ChenyangGao / web-mount-packs

Encapsulating web interfaces for some network disks
MIT License
246 stars 45 forks source link

从 http_request 模块导入 texttools 时,提示缺少texttools #13

Closed paulxjz closed 6 months ago

paulxjz commented 6 months ago

如题,这个texttools怎么装,我没找到,我用AI写了输入文件夹cid和cookie,就可以输出文件夹里的文件夹cid及对应名称,我在0.0.7.4运行没问题,升级到0.0.8.1就出问题,请求帮助。报错信息如下

Traceback (most recent call last): File "D:\ruanjian\WingetUI-data\winget\rss2cloud\123\rss\list_folders.py", line 3, in from p115 import P115Client, P115FileSystem File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115__init.py", line 7, in from .component import File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115\component__init__.py", line 8, in from .client import File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115\component\client.py", line 53, in from http_request import encode_multipart_data, encode_multipart_data_async, SupportsGeturl File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\http_request\init__.py", line 21, in from texttools import text_to_dict ModuleNotFoundError: No module named 'texttools'

源代码如下

import json
from tkinter import Tk, Label, Entry, Button, StringVar
from p115 import P115Client, P115FileSystem

def list_directories(cid, cookie):
    client = P115Client(cookie)
    fs = P115FileSystem(client)
    try:
        entries = fs.listdir_attr(cid)
        result = [{"name": entry['name'], "cid": str(entry['id'])} for entry in entries if entry["is_directory"]]
        with open('directories.json', 'w', encoding='utf-8') as json_file:
            json.dump(result, json_file, ensure_ascii=False, indent=2)
        print("目录信息已保存至 directories.json")
    except Exception as e:
        print(f"发生错误: {e}")

def on_submit():
    cookie_value = cookie_entry.get()
    cid_value = cid_entry.get()
    list_directories(int(cid_value), cookie_value)
    root.destroy()  # 提交后关闭窗口

root = Tk()
root.title("CID与Cookie输入")

Label(root, text="请输入Cookie:").pack()
cookie_var = StringVar()
cookie_entry = Entry(root, textvariable=cookie_var, show="*")  # 显示为星号隐藏实际输入
cookie_entry.pack()

Label(root, text="请输入CID:").pack()
cid_var = StringVar()
cid_entry = Entry(root)
cid_entry.pack()

submit_button = Button(root, text="确定", command=on_submit)
submit_button.pack()

root.mainloop()
ChenyangGao commented 6 months ago

你好,不好意思最近代码重构了,测试不到位,现在重新升级一下,就可以了,运行

pip install -U python-http_request python-115

以后如果有模块缺失,但手动用 pip 安装不上,可能需要带一个前缀 python-,例如 python-texttools

目前我重构了代码,把公用模块一个个独立出来了,不在原来的项目中,具体可以看这里 https://pypi.org/user/ChenyangGao/

ChenyangGao commented 6 months ago

如果你要输出目录信息,也可以用命令行工具

$ p115 iterdir -h
usage: p115 iterdir [-h] [-c COOKIES] [-p PASSWORD] [-s SELECT]
                    [-k [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...]]
                    [-t {log,json,csv}] [-d DUMP] [-de] [-o OUTPUT_FILE]
                    [-m MIN_DEPTH] [-M MAX_DEPTH] [-dfs] [-v]
                    [path]

115 文件夹信息遍历导出

positional arguments:
  path                  文件夹路径或 id,默认值 0,即根目录

options:
  -h, --help            show this help message and exit
  -c COOKIES, --cookies COOKIES
                        115 登录 cookie,如果缺失,则从 115-cookies.txt 文件中获取,此文件可以在
                        当前工作目录、此脚本所在目录 或 用户根目录 下
  -p PASSWORD, --password PASSWORD
                        密码,用于进入隐藏模式,罗列隐藏文件
  -s SELECT, --select SELECT
                        提供一个表达式(会注入一个变量 path,类型是 p115.P115Path),用于对路径进行筛选
  -k [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...], --keys [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...]
                        选择输出的 key,默认输出所有可选值
  -t {log,json,csv}, --output-type {log,json,csv}
                        输出类型,默认为 log - log 每行输出一条数据,每条数据输出为一个 json 的 object -
                        json 输出一个 json 的 list,每条数据输出为一个 json 的 object - csv
                        输出一个 csv,第 1 行为表头,以后每行输出一条数据
  -d DUMP, --dump DUMP  (优先级高于 -k/--keys 和 -t/--output-type)
                        提供一段代码,每次调用,再行输出,尾部会添加一个 b' '。 如果结果 result 是 - None,跳过
                        - bytes,输出 - 其它,先调用 `bytes(str(result), 'utf-8')`,再输出
  -de, --dump-exec      对 dump 代码进行 exec 解析(必须生成一个变量 dump,用于调用),否则用 eval
                        解析(会注入一个变量 path,类型是 p115.P115Path)
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        保存到文件,此时命令行会输出进度条
  -m MIN_DEPTH, --min-depth MIN_DEPTH
                        最小深度,默认值 0,小于或等于 0 时不限
  -M MAX_DEPTH, --max-depth MAX_DEPTH
                        最大深度,默认值 -1,小于 0 时不限
  -dfs, --depth-first   使用深度优先搜索,否则使用广度优先
  -v, --version         输出版本号
paulxjz commented 6 months ago

如果你要输出目录信息,也可以用命令行工具

$ p115 iterdir -h
usage: p115 iterdir [-h] [-c COOKIES] [-p PASSWORD] [-s SELECT]
                    [-k [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...]]
                    [-t {log,json,csv}] [-d DUMP] [-de] [-o OUTPUT_FILE]
                    [-m MIN_DEPTH] [-M MAX_DEPTH] [-dfs] [-v]
                    [path]

115 文件夹信息遍历导出

positional arguments:
  path                  文件夹路径或 id,默认值 0,即根目录

options:
  -h, --help            show this help message and exit
  -c COOKIES, --cookies COOKIES
                        115 登录 cookie,如果缺失,则从 115-cookies.txt 文件中获取,此文件可以在
                        当前工作目录、此脚本所在目录 或 用户根目录 下
  -p PASSWORD, --password PASSWORD
                        密码,用于进入隐藏模式,罗列隐藏文件
  -s SELECT, --select SELECT
                        提供一个表达式(会注入一个变量 path,类型是 p115.P115Path),用于对路径进行筛选
  -k [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...], --keys [{id,parent_id,name,path,relpath,sha1,pickcode,is_directory,size,ctime,mtime,atime,hidden,violated,play_long,thumb,star,score,labels,description} ...]
                        选择输出的 key,默认输出所有可选值
  -t {log,json,csv}, --output-type {log,json,csv}
                        输出类型,默认为 log - log 每行输出一条数据,每条数据输出为一个 json 的 object -
                        json 输出一个 json 的 list,每条数据输出为一个 json 的 object - csv
                        输出一个 csv,第 1 行为表头,以后每行输出一条数据
  -d DUMP, --dump DUMP  (优先级高于 -k/--keys 和 -t/--output-type)
                        提供一段代码,每次调用,再行输出,尾部会添加一个 b' '。 如果结果 result 是 - None,跳过
                        - bytes,输出 - 其它,先调用 `bytes(str(result), 'utf-8')`,再输出
  -de, --dump-exec      对 dump 代码进行 exec 解析(必须生成一个变量 dump,用于调用),否则用 eval
                        解析(会注入一个变量 path,类型是 p115.P115Path)
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        保存到文件,此时命令行会输出进度条
  -m MIN_DEPTH, --min-depth MIN_DEPTH
                        最小深度,默认值 0,小于或等于 0 时不限
  -M MAX_DEPTH, --max-depth MAX_DEPTH
                        最大深度,默认值 -1,小于 0 时不限
  -dfs, --depth-first   使用深度优先搜索,否则使用广度优先
  -v, --version         输出版本号

我升级以后还是报错了,以下是报错信息

Traceback (most recent call last):
  File "D:\ruanjian\WingetUI-data\winget\rss2cloud\123\rss\list_folders.py", line 3, in <module>
    from p115 import P115Client, P115FileSystem
  File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115\__init__.py", line 7, in <module>
    from .component import *
  File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115\component\__init__.py", line 8, in <module>
    from .client import *
  File "D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\p115\component\client.py", line 60, in <module>
    from startfile import startfile, startfile_async # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ImportError: cannot import name 'startfile_async' from 'startfile' (D:\ruanjian\WingetUI-data\Scoop\apps\python\current\Lib\site-packages\startfile.py). Did you mean: 'startfile_aysnc'?

我尝试将startfile.py里面的函数名改了,确实不报错了。 我也尝试用命令行

p115 iterdir -c "YOUR_COOKIE_STRING" -p "password" -k name -k id -t json -m 1 -M 1 2906117406037584494 

只生成了id和它的值,如果改成-k name,id 它就报错

我想请教下这个命令行怎么写

ChenyangGao commented 6 months ago

是bug,再升级一下

pip install -U 'python-startfile>=0.0.1.1' 'python-115>=0.0.8.3.5'

按照命令行的说明来按需求使用

例如获取几个必要的字段,只输出文件的信息不输出文件夹的,并把结果输出到本地的一个文件

p115 iterdir -k id name path sha1 size -dfs -s 'path.is_file()' -o 115.log.json
paulxjz commented 6 months ago

是bug,再升级一下

pip install -U 'python-startfile>=0.0.1.1' 'python-115>=0.0.8.3.5'

按照命令行的说明来按需求使用

例如获取几个必要的字段,只输出文件的信息不输出文件夹的,并把结果输出到本地的一个文件

p115 iterdir -k id name path sha1 size -dfs -s 'path.is_file()' -o 115.log.json

好的我会了,感谢