import os.path import requests import json import time from pathlib import Path class WikijsTool: BASE_URL = "http://10.1.16.39:8090/graphql" HEADERS = { "Authorization": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGkiOjcsImdycCI6MSwiaWF" "0IjoxNzIzMDIwNzg4LCJleHAiOjE4MTc2OTM1ODgsImF1ZCI6InVybjp3aWtpLmpzIiwiaX" "NzIjoidXJuOndpa2kuanMifQ.NSfE4tB7tkN8yapAs0CgkR-Yll6wc3gO3QGKMAv-TlGxx6A-9fJRmkwhRDTVMj_yPVG6" "NXVy_AZpJtLapRXFGn0cvscsRJxq3fY1KgEyt8wO99jvd8DpNHpHhAIgrtyDelmHsBD2Wb5Ib3WJFsWC6d8Yhm9dkpx6tZ" "vMAlFIKOg6UodMoMIry3YWiPGLaqJPQ0gcKmcnB2tC7sPXIIZnvfb5912GVM0n-4wvWobQnb_tXQuYZf99wH_leXjC_7BK8" "8JSaAmB980i3rBxfejmaJ8E6D48zRxwwPFa0veVjjzRkVqHPwAjl1CXb2HE29pGtNmSEE1kLQVqOZD_ibOwKQ" } def __init__(self): pass @staticmethod def init_url(): # 获取当前文件的路径 file_path = Path(__file__).resolve() file_path = os.path.join(file_path.parent, 'wikiconfig.json') if not os.path.exists(file_path): return False with open(file_path, 'r', encoding='utf-8') as file: data = json.load(file) if 'url' in data: WikijsTool.BASE_URL = data['url'] if 'Authorization' in data: WikijsTool.HEADERS['Authorization'] = data['Authorization'] return True @staticmethod def get_all_documents() -> list[dict]: query = """ query Pages { pages { list { path locale title contentType id isPublished } } } """ # 构建请求数据 data = { 'query': query, } # 发送 POST 请求 response = requests.post(WikijsTool.BASE_URL, headers=WikijsTool.HEADERS, json=data) if response.status_code == 200: # 解析数据 list_info = json.loads(response.content)['data']['pages']['list'] return [item for item in list_info] else: raise ValueError(f"获取文档列表失败,原因:“{response.text}") @staticmethod def get_all_doc_by_path(path: str, path_is_dir: bool = True) -> list[dict]: list_document = WikijsTool.get_all_documents() all_document_list = [] if path_is_dir: temp_path = path + '/' else: temp_path = path for document_info in list_document: document_path = str(document_info["path"]) # 根据路径过滤出对应的所有文档 if not document_path.startswith(temp_path): continue all_document_list.append(document_info) return all_document_list @staticmethod def search_document(query_str: str) -> list[dict]: graphql_query = f""" query Pages {{ pages {{ search(query: "{query_str}") {{ results {{ id path locale title }} }} }} }} """ # 构建请求数据 data = { 'query': graphql_query, } # 发送 POST 请求 response = requests.post(WikijsTool.BASE_URL, headers=WikijsTool.HEADERS, json=data) if response.status_code == 200: # 解析数据 search_results = json.loads(response.content)['data']['pages']['search']['results'] return search_results else: raise ValueError(f"查询文档失败,原因:“{response.text}") @staticmethod def query_doc_info(doc_id: int) -> dict: query = """ query singlePages($doc_id: Int!) { pages { single(id: $doc_id) { id path title isPublished content contentType isPrivate updatedAt createdAt } } } """ # 构建请求数据 variables = { 'doc_id': doc_id, } data = { 'query': query, 'variables': variables } # 发送 POST 请求 response = requests.post(WikijsTool.BASE_URL, headers=WikijsTool.HEADERS, json=data) if "errors" in response.text: result = json.loads(response.content)['errors'][0]['message'] raise ValueError(f"查询文档失败,原因:“{result}") else: return json.loads(response.content)['data']['pages']['single'] WikijsTool.init_url() if __name__ == "__main__": WikijsTool.query_doc_info(6448) print(WikijsTool.rename_directory("配网知识库/配网造价软件", "配网知识库/配网造价软件1"))