Wiz笔记二次开发

目前wiz笔记的docker版本停留在1.0.31版本,想要使用最新的功能就不能使用docker自建的服务端了,于是打算在现有基础上根据webAPI的内容对其进行二次开发

目前解析出来的接口都是我急需使用的,大家可以参考,我会在未来慢慢开发完善的

python 复制代码
import requests,re
from bs4 import BeautifulSoup
class wiz:
    def __init__(self,username,password,domain):
        self.username = username
        self.password = password
        self.token = ""
        self.kbGuid = ''
        self.headers = {}
        self.data = []
        self.domain = domain
        self.update_url()  # 初始化 URL
    def update_url(self):
        self.url={
            "getWizToken":f"{self.domain}/as/user/login",
            "getFolder":f"{self.domain}/ks/category/all/{self.kbGuid}",
            "logOut":f"{self.domain}/as/user/logout",
            "getMessageList":f"{self.domain}/ks/note/list/category/{self.kbGuid}",
            "getMessage":f"{self.domain}/ks/note/download/{self.kbGuid}/",
        }
    def getWizToken(self):
        params = {
            'clientType': 'web',
            'clientVersion': '4.0',
            'lang': 'zh-cn',
        }
        json_data = {
            'userId': self.username,
            'password': self.password,
            'autoLogin': True,
            'domain': 'clouded.top',
            'deviceId': None,
        }
        response = requests.post(self.url['getWizToken'],params=params,json=json_data,).json()
        if response['returnCode'] == 200:#登陆成功
            self.token = response["result"]["token"]
            self.kbGuid = response["result"]["kbGuid"]
            self.update_url()
            self.headers["X-Wiz-Token"] = self.token
        elif response['returnCode'] == 31002:#用户名密码错误
            print(response["returnMessage"])
    def getFolder(self):
        response = requests.get(self.url['getFolder'],headers=self.headers).json()
        for item in response['result']:
            # print(item)
            self.getMessageList(item)
    def logOut(self):
        params = {
            'domain': 'clouded.top',
            'clientType': 'web',
            'clientVersion': '4.0',
            'lang': 'zh-cn',
        }
        requests.get(self.url['logOut'], params=params,headers=self.headers)
    def getMessageList(self,path):
        params = {
            'lang': 'zh-cn',
            'category': path,
            'start': '0',
            'count': '100',
            'orderBy': 'modified',
            'ascending': 'desc',
            'withAbstract': 'true',
            'withFavor': 'false',
            'withShare': 'true',
            'clientType': 'web',
            'clientVersion': '4.0',
        }
        response = requests.get(self.url['getMessageList'],params=params,headers=self.headers).json()
        res=response['result']
        for r in res:
            title=r['title']
            uid=r['docGuid']
            self.getMessage(uid,path)
    def getMessage(self,uid,path):
        params = {
            'downloadInfo': '1',
            'downloadData': '1',
            'withFavor': 'false',
            'withShare': 'true',
            'clientType': 'web',
            'clientVersion': '4.0',
            'lang': 'zh-cn',
        }
        response = requests.get(f'{self.url['getMessage']}{uid}',params=params,headers=self.headers).json()
        wordCount,imageCount = self.wordCount(response['html'])
        audioCount = 0
        print(f"getOK-{path}{response['info']['title']}")
        if response['resources']:
            for i in response['resources'] :
                if 'wiz' not in i['name'] and 'audio.png' in i['name']:
                    imageCount -= 1#音频资源的图标会错误的解析为图片
                    audioCount += int(i['size']/1024/4.5)#音频长度累加 单位:s  粗略估计
        self.data.append({"path":f"{path}","title":response['info']['title'],"owner":response['info']['owner'],"wordCount":wordCount,"imageCount":imageCount,"audioCount":audioCount,"accessed":response['info']['accessed'],"created":response['info']['created']})
    def wordCount(self,html):
        soup = BeautifulSoup(html,'html.parser')
        for elem in soup(['style', 'script', 'head', 'title', 'meta']):
            elem.decompose()
        char_count = len(re.sub(r'\s', '', soup.get_text()))
        image_count = len(soup.find_all('img'))
        return char_count,image_count
    def showData(self):
        # for one in self.data:
        #     print(one)
        # print(self.data)
        return self.data

#main=wiz(username="admin@wiz.cn",password="123456",domain="http://120.349.12.333:9192")
main.getWizToken()
main.getFolder()
data=main.showData()


main.logOut()

大家可以自行运行代码,更改账号密码以及服务器链接就可以查看自己服务器上的文章信息,目前还在开发中...

目前基于这个写了一个文章总览页面,类似Github的代码热力图

有兴趣的话可以在下一章放出源代码

相关推荐
hkNaruto几秒前
【AI】深度学习、强化学习、深度强化学习基础概念笔记
人工智能·笔记·深度学习
小小张说故事3 分钟前
Python 的 int 为什么不会溢出?拆开 PyLongObject 和它背后那串变长数组
python
努力实干4 分钟前
第二阶段 · 第 7 课:C++ 多线程与线程安全
开发语言·c++·安全
2501_915909068 分钟前
Windows 上用 VS Code 调试 iPhone 真机 App,KXBuild 断点、崩溃定位实操
ide·windows·vscode·ios·iphone·个人开发·敏捷流程
爱聊灵光的维C27 分钟前
C语言初阶:关于函数设计的详细讲解和注意事项
c语言·开发语言·青少年编程·蓝桥杯·学习方法
熊猫钓鱼>_>33 分钟前
上架审核常见驳回与隐私合规清单:过审前先自查这 8 条【鸿蒙心迹】
开发语言·前端·华为·华为云·harmonyos·openharmony·ai制作
威哥爱编程36 分钟前
Python 智能体开发实战 03:聊十轮就“失忆”,账单还翻倍?管好上下文,Token 立省一半
python·agent
情 九37 分钟前
MCP 开发环境搭建:Mac 与 Windows 跑通 Python 服务和 stdio 客户端
windows·python·macos·mcp
SEO_juper43 分钟前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
无心水1 小时前
15、云原生架构设计理论与实践 核心考点与学习笔记
笔记·学习·云原生·架构师·软考·系统架构设计师·软考系统架构设计师