Python alist proxy and monitor.
安装
你可以从 pypi 安装
pip install -U alist_proxy
用法
作为模块使用
>>> import alist_proxy
>>> help(alist_proxy)
Help on package alist_proxy:
NAME
alist_proxy - # encoding: utf-8
PACKAGE CONTENTS
__main__
FUNCTIONS
make_application(alist_token: str = '', base_url: str = 'http://localhost:5244', collect: None | collections.abc.Callable[[dict], typing.Any] = None, webhooks: None | collections.abc.Sequence[str] = None, project: None | collections.abc.Callable[[dict], None | dict] = None, threaded: bool = False) -> blacksheep.server.application.Application
创建一个 blacksheep 应用,用于反向代理 alist,并持续收集每个请求事件的消息
:param alist_token: alist 的 token,提供此参数可在 115 网盘遭受 405 风控时自动扫码刷新 cookies
:param base_url: alist 的 base_url
:param collect: 调用以收集 alist 请求事件的消息(在 project 调用之后),如果为 None,则输出到日志
:param webhooks: 一组 webhook 的链接,事件会用 POST 请求发送给每一个链接,响应头为 {"Content-type": "application/json; charset=utf-8"}
:param project: 调用以对请求事件的消息进行映射处理,如果结果为 None,则丢弃此消息
:param threaded: collect 和 project,如果不是 async 函数,就放到单独的线程中运行
:return: 一个 blacksheep 应用,你可以二次扩展,并用 uvicorn 运行
make_application_with_fs_event_stream(alist_token: str, base_url: str = 'http://localhost:5244', db_uri: str = 'sqlite', webhooks: None | collections.abc.Sequence[str] = None)
只收集和文件系统操作有关的事件,存储到 redis streams,并且可以通过 websocket 拉取
:param alist_token: alist 的 token,用来追踪后台任务列表(若不提供,则不追踪任务列表)
:param base_url: alist 的 base_url
:param db_uri: 数据库连接的 URI,格式为 "{dbtype}://{host}:{port}/{path}
- dbtype: 数据库类型,目前仅支持 "sqlite"、"mongodb" 和 "redis"
- host: (非 "sqlite")ip 或 hostname,如果忽略,则用 "localhost"
- port: (非 "sqlite")端口号,如果忽略,则自动使用此数据库的默认端口号
- path: (限 "sqlite")文件路径,如果忽略,则为 ""(会使用一个临时文件)
如果你只输入 dbtype 的名字,则视为 "{dbtype}://"
如果你输入了值,但不能被视为 dbtype,则自动视为 path,即 "sqlite:///{path}"
:param webhooks: 一组 webhook 的链接,事件会用 POST 请求发送给每一个链接,响应头为 {"Content-type": "application/json; charset=utf-8"}
:return: 一个 blacksheep 应用,你可以二次扩展,并用 uvicorn 运行
make_application_with_fs_events(alist_token: str = '', base_url: str = 'http://localhost:5244', collect: None | collections.abc.Callable[[dict], typing.Any] = None, webhooks: None | collections.abc.Sequence[str] = None, threaded: bool = False) -> blacksheep.server.application.Application
只收集和文件系统操作有关的事件
:param alist_token: alist 的 token,用来追踪后台任务列表(若不提供,则不追踪任务列表)
:param base_url: alist 的 base_url
:param collect: 调用以收集 alist 请求事件的消息(在 project 调用之后),如果为 None,则输出到日志
:param webhooks: 一组 webhook 的链接,事件会用 POST 请求发送给每一个链接,响应头为 {"Content-type": "application/json; charset=utf-8"}
:param threaded: collect 如果不是 async 函数,就放到单独的线程中运行
:return: 一个 blacksheep 应用,你可以二次扩展,并用 uvicorn 运行
VERSION
(0, 0, 9)
AUTHOR
ChenyangGao <https://chenyanggao.github.io>
命令行使用
$ alist-proxy -h
usage: alist_proxy [-h] [-H HOST] [-P PORT] [-b BASE_URL] [-t TOKEN] [-u DB_URI] [-w [webhook ...]] [-d] [-v]
🌍🚢 alist 网络代理抓包 🕷️🕸️
options:
-h, --help show this help message and exit
-H HOST, --host HOST ip 或 hostname,默认值:'0.0.0.0'
-P PORT, --port PORT 端口号,默认值:5245
-b BASE_URL, --base-url BASE_URL
被代理的 alist 服务的 base_url,默认值:'http://localhost:5244'
-t TOKEN, --token TOKEN
alist 的 token,用来追踪后台任务列表和更新某些 cookies
-u DB_URI, --db-uri DB_URI
数据库连接的 URI,格式为 "{dbtype}://{host}:{port}/{path}"
- dbtype: 数据库类型,目前仅支持 "sqlite"、"mongodb" 和 "redis"
- host: (非 "sqlite")ip 或 hostname,如果忽略,则用 "localhost"
- port: (非 "sqlite")端口号,如果忽略,则自动使用此数据库的默认端口号
- path: (限 "sqlite")文件路径,如果忽略,则为 ""(会使用一个临时文件)
如果你只输入 dbtype 的名字,则视为 "{dbtype}://"
如果你输入了值,但不能被视为 dbtype,则自动视为 path,即 "sqlite:///{path}"
-w [webhook ...], --webhooks [webhook ...]
一组 webhook 的链接,事件会用 POST 请求发送给每一个链接,响应头为 {"Content-type": "application/json; charset=utf-8"}
-d, --debug 启用 debug 模式(会输出更详细的信息)
-v, --version 输出版本
$ alist-proxy
INFO: Started server process [64373]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:5245 (Press CTRL+C to quit)
启动准备
首先要求有一个正在运行中的 alist 服务,假设地址为 http://localhost:5244
然后在命令行中运行
alist-proxy --base-url http://localhost:5244
就可以开始代理监听了。如果 --base-url 就是默认地址 http://localhost:5244,是可以省略的。
如果你还需要监听后台的 复制、上传、离线下载转存 事件,则需要在命令行中提供 alist 的 token。
ALIST_TOKEN='alist-xxxx'
alist-proxy --token "$ALIST_TOKEN"
如果你需要使用 webhook,则需要指定 -w/--webhooks 参数。
如果你需要使用 websocket,则需要指定 --db-uri 参数,以将数据存储到数据库,目前只支持 sqlite、mongodb 和 redis。
webhook 接口
如果你指定了 -w/--webhooks 参数,就会发送事件到指定的这组链接上
alist-proxy -w http://localhost:8888/webhook
客户端代码
from flask import request, Flask
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def handle_post():
data = request.get_json()
print(f"Received: {data}")
return "", 200
app.run(port=8888, threaded=True)
websocket 接口
如果你指定了 -u/--db-uri 参数,就可以使用 websocket 接口 /pull
alist-proxy -u sqlite
客户端代码
from asyncio import run
from json import loads
import websockets
async def pull():
uri = "ws://localhost:5245/pull"
async with websockets.connect(uri) as websocket:
while True:
data = loads(await websocket.recv())
print(f"Received: {data}")
run(pull())
redis
/pull 接口支持 3 个查询参数,均可省略,省略则从当前开始拉取最新数据
lastid: 从这个 id(不含)开始读取。省略时,如果指定了非空的group,则继续这个组的读取进度,否则从当前开始(不管以前)读取。如果要从头开始读取,指定 '0' 即可group: 组名称。如果组不存在,则自动创建。name: 消费者名称。
mongodb
/pull 接口支持 2 个查询参数,均可省略,省略则从当前开始拉取最新数据
lastid: 从这个 id(不含)开始读取,是一个字符串,表示 UUID。from_datetime: 从这个时间点开始,是一个字符串。
sqlite
/pull 接口支持 2 个查询参数,均可省略,省略则从当前开始拉取最新数据
lastid: 从这个 id(不含)开始读取,是一个整数,表示自增主键。from_datetime: 从这个时间点开始,是一个字符串。
事件说明
命令行程序只采集和文件系统操作有关的事件消息
你可以从 /pull 接口拉取 json 格式的数据。这些数据有几个共同的字段
- category: 任务类别。有 3 个可能的值:
- web: 由网页直接调用接口成功后产生
- dav: 通过 webdav 的成功操作产生
- task: 监控后台任务,由执行成功的任务产生
- type: 任务类型。可能的取值如下:
- upload: 上传/创建 文件
- rename: 文件或目录的改名
- move: 移动文件或目录(webdav 还包括改名)
- remove: 删除文件或目录
- copy: 复制文件或目录
- mkdir: 创建空目录
- find: 查询文件或目录的信息,或罗列目录
- method: 具体的操作方法
- payload: 和路径有关的数据,每组(由 (method, category, type) 一起确定)都有所不同
同一种 category 的各个 method 的 payload 的字段构成近似。
-
web: payload 收集了相关的查询参数,详见 https://alist.nn.ci/guide/api/fs.html
-
dav: 一般包含
- path: 被操作的路径
- is_dir: 是否目录
可能包含
- to_path: 操作后的路径(COPY 或 MOVE)
-
task: 目前有 3 种情况
- method 为 copy,即复制,包含
- src_path: 源路径
- dst_path: 目标路径
- src_storage: 源所在存储
- dst_storage: 目标所在存储
- src_dir: 源所在目录
- dst_dir: 目标所在目录
- name: 名字
- is_dir: 是否目录
- method 为 upload,即上传,包含
- path: 目标路径
- dst_storage: 目标所在存储
- dst_dir: 目标所在目录
- name: 名字
- is_dir: 是否目录,必为 False
- method 为 transfer,即离线下载后上传,包含
- path: 目标路径
- dst_dir: 目标所在目录
- name: 名字
- is_dir: 是否目录,必为 False
- method 为 copy,即复制,包含
Metadata
Release files for alist_proxy 0.1.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| alist_proxy-0.1.3.2.tar.gz | 14.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| alist_proxy-0.1.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.5 kB
Release files / alist_proxy-0.1.3.2.tar.gz
| Download URL | alist_proxy-0.1.3.2.tar.gz |
|---|---|
| Size | 14.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c99d68cfd1342f98d962827153fb9ffc3be2932ce418429fd689b0fd50414fc
|
|
BLAKE2b-256 checksum How to use checksums |
b73d3af74646c6bf0966a3faa0be83ea57196921af8faca8df872af2f497d64c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.4 CPython/3.12.4 Darwin/23.5.0
|
Release files / alist_proxy-0.1.3.2-py3-none-any.whl
| Download URL | alist_proxy-0.1.3.2-py3-none-any.whl |
|---|---|
| Size | 17.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17e5013c85091e346e0cf911ca92967ee58fab0e5e3593b71ef943583858b081
|
|
BLAKE2b-256 checksum How to use checksums |
7ac1e0e99e4d03e1ca513d4ff2ad6b645ca4d3dc542b4d7debe8a369ddbb1fea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.8.4 CPython/3.12.4 Darwin/23.5.0
|