mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2026-08-30 05:22:01 +00:00
docs: 更新文档导航和解析器指南
- 添加演练场(Playground)文档导航区到主 README - 新增 Python 解析器文档链接(开发指南、测试报告、LSP集成) - 更新前端版本号至 0.1.9b19p - 补充 Python 解析器 requests 库使用章节和官方文档链接 - 添加 JavaScript 和 Python 解析器的语言版本和官方文档 - 优化文档结构,分类为项目文档和外部资源
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
/**
|
||||
* Python 解析器模板
|
||||
* 包含解析器的基础模板代码
|
||||
*/
|
||||
|
||||
/**
|
||||
* 生成 Python 解析器模板代码
|
||||
* @param {string} name - 解析器名称
|
||||
* @param {string} identifier - 标识符
|
||||
* @param {string} author - 作者
|
||||
* @param {string} match - URL匹配模式
|
||||
* @returns {string} Python模板代码
|
||||
*/
|
||||
export const generatePyTemplate = (name, identifier, author, match) => {
|
||||
const type = identifier.toLowerCase().replace(/[^a-z0-9]/g, '_');
|
||||
const displayName = name;
|
||||
const description = `使用Python实现的${name}解析器`;
|
||||
|
||||
return `# ==UserScript==
|
||||
# @name ${name}
|
||||
# @type ${type}
|
||||
# @displayName ${displayName}
|
||||
# @description ${description}
|
||||
# @match ${match || 'https?://example.com/s/(?<KEY>\\\\w+)'}
|
||||
# @author ${author || 'yourname'}
|
||||
# @version 1.0.0
|
||||
# ==/UserScript==
|
||||
|
||||
"""
|
||||
${name}解析器 - Python实现
|
||||
使用GraalPy运行,提供与JavaScript解析器相同的功能
|
||||
|
||||
可用模块:
|
||||
- requests: HTTP请求库 (已内置,支持 get/post/put/delete 等)
|
||||
- re: 正则表达式
|
||||
- json: JSON处理
|
||||
- base64: Base64编解码
|
||||
- hashlib: 哈希算法
|
||||
|
||||
内置对象:
|
||||
- share_link_info: 分享链接信息
|
||||
- http: 底层HTTP客户端
|
||||
- logger: 日志记录器
|
||||
- crypto: 加密工具 (md5/sha1/sha256/aes/base64)
|
||||
"""
|
||||
|
||||
import requests
|
||||
import re
|
||||
import json
|
||||
|
||||
|
||||
def parse(share_link_info, http, logger):
|
||||
"""
|
||||
解析单个文件下载链接
|
||||
|
||||
Args:
|
||||
share_link_info: 分享链接信息对象
|
||||
http: HTTP客户端
|
||||
logger: 日志记录器
|
||||
|
||||
Returns:
|
||||
str: 直链下载地址
|
||||
"""
|
||||
url = share_link_info.get_share_url()
|
||||
logger.info(f"开始解析: {url}")
|
||||
|
||||
# 使用 requests 库发起请求(推荐)
|
||||
response = requests.get(url, headers={
|
||||
"Referer": url
|
||||
})
|
||||
|
||||
if not response.ok:
|
||||
raise Exception(f"请求失败: {response.status_code}")
|
||||
|
||||
html = response.text
|
||||
|
||||
# 示例:使用正则表达式提取下载链接
|
||||
# match = re.search(r'download_url["\\':]\s*["\\']([^"\\'>]+)', html)
|
||||
# if match:
|
||||
# return match.group(1)
|
||||
|
||||
return "https://example.com/download/file.zip"
|
||||
|
||||
|
||||
def parse_file_list(share_link_info, http, logger):
|
||||
"""
|
||||
解析文件列表(可选)
|
||||
|
||||
Args:
|
||||
share_link_info: 分享链接信息对象
|
||||
http: HTTP客户端
|
||||
logger: 日志记录器
|
||||
|
||||
Returns:
|
||||
list: 文件信息列表
|
||||
"""
|
||||
dir_id = share_link_info.get_other_param("dirId") or "0"
|
||||
logger.info(f"解析文件列表,目录ID: {dir_id}")
|
||||
|
||||
file_list = []
|
||||
|
||||
return file_list
|
||||
`;
|
||||
};
|
||||
|
||||
/**
|
||||
* Python 解析器的默认空白模板
|
||||
*/
|
||||
export const PY_EMPTY_TEMPLATE = `# ==UserScript==
|
||||
# @name 新解析器
|
||||
# @type new_parser
|
||||
# @displayName 新解析器
|
||||
# @description 解析器描述
|
||||
# @match https?://example.com/s/(?<KEY>\\w+)
|
||||
# @author yourname
|
||||
# @version 1.0.0
|
||||
# ==/UserScript==
|
||||
|
||||
import requests
|
||||
import re
|
||||
import json
|
||||
|
||||
|
||||
def parse(share_link_info, http, logger):
|
||||
"""解析单个文件下载链接"""
|
||||
url = share_link_info.get_share_url()
|
||||
logger.info(f"开始解析: {url}")
|
||||
|
||||
# 在这里编写你的解析逻辑
|
||||
|
||||
return ""
|
||||
`;
|
||||
|
||||
/**
|
||||
* Python HTTP 请求示例模板
|
||||
*/
|
||||
export const PY_HTTP_EXAMPLE = `# HTTP 请求示例
|
||||
|
||||
import requests
|
||||
import json
|
||||
|
||||
# GET 请求
|
||||
response = requests.get("https://api.example.com/data")
|
||||
if response.ok:
|
||||
data = response.json()
|
||||
logger.info("获取数据成功")
|
||||
|
||||
# POST 请求(表单数据)
|
||||
form_data = {
|
||||
"key": "value",
|
||||
"name": "test"
|
||||
}
|
||||
post_response = requests.post("https://api.example.com/submit", data=form_data)
|
||||
|
||||
# POST 请求(JSON数据)
|
||||
json_data = {"id": 1, "name": "test"}
|
||||
json_response = requests.post(
|
||||
"https://api.example.com/api",
|
||||
json=json_data,
|
||||
headers={"Content-Type": "application/json"}
|
||||
)
|
||||
|
||||
# 自定义请求头
|
||||
custom_headers = {
|
||||
"User-Agent": "Mozilla/5.0",
|
||||
"Referer": "https://example.com"
|
||||
}
|
||||
custom_response = requests.get("https://api.example.com/data", headers=custom_headers)
|
||||
|
||||
# 会话保持 Cookie
|
||||
session = requests.Session()
|
||||
session.get("https://example.com/login") # 获取 Cookie
|
||||
session.post("https://example.com/api") # 自动带上 Cookie
|
||||
`;
|
||||
|
||||
/**
|
||||
* Python 正则表达式示例
|
||||
*/
|
||||
export const PY_REGEX_EXAMPLE = `# 正则表达式示例
|
||||
|
||||
import re
|
||||
|
||||
html = response.text
|
||||
|
||||
# 匹配下载链接
|
||||
download_match = re.search(r'href=["\\']([^"\\']*.zip)["\\'\\']', html)
|
||||
if download_match:
|
||||
download_url = download_match.group(1)
|
||||
|
||||
# 匹配JSON数据
|
||||
json_match = re.search(r'var data = (\\{[^}]+\\})', html)
|
||||
if json_match:
|
||||
data = json.loads(json_match.group(1))
|
||||
|
||||
# 查找所有匹配项
|
||||
all_links = re.findall(r'href=["\\']([^"\\']]+)["\\'\\']', html)
|
||||
|
||||
# 使用命名分组
|
||||
pattern = r'<a href="(?P<url>[^"]+)">(?P<text>[^<]+)</a>'
|
||||
for match in re.finditer(pattern, html):
|
||||
url = match.group('url')
|
||||
text = match.group('text')
|
||||
`;
|
||||
|
||||
/**
|
||||
* Python 安全提示
|
||||
*/
|
||||
export const PY_SECURITY_NOTICE = `# ⚠️ Python 安全限制说明
|
||||
#
|
||||
# 以下操作被禁止(安全策略限制):
|
||||
# - os.system() 系统命令执行
|
||||
# - os.popen() 进程创建
|
||||
# - os.remove() 删除文件
|
||||
# - os.rmdir() 删除目录
|
||||
# - subprocess.* 子进程操作
|
||||
# - open() 文件写入 (read模式允许)
|
||||
#
|
||||
# 允许的操作:
|
||||
# - requests.* 网络请求
|
||||
# - re.* 正则表达式
|
||||
# - json.* JSON处理
|
||||
# - base64.* Base64编解码
|
||||
# - hashlib.* 哈希算法
|
||||
# - os.getcwd() 获取当前目录
|
||||
# - os.path.* 路径操作
|
||||
`;
|
||||
|
||||
export default {
|
||||
generatePyTemplate,
|
||||
PY_EMPTY_TEMPLATE,
|
||||
PY_HTTP_EXAMPLE,
|
||||
PY_REGEX_EXAMPLE,
|
||||
PY_SECURITY_NOTICE
|
||||
};
|
||||
Reference in New Issue
Block a user