JAVDB 视频平台 API 抓取工具,采用适配器模式设计,支持多种视频平台的统一接口访问。
📖 完整 API 文档 - 详细的功能说明、参数、示例和返回格式
javdb-api-scraper/
├── lib/ # 核心库
│ ├── __init__.py # 库入口,导出所有公共接口
│ ├── platform.py # 平台枚举和ID处理
│ ├── base_adapter.py # 适配器基类
│ ├── javdb_adapter.py # JAVDB平台适配器
│ ├── adapter_factory.py # 适配器工厂
│ ├── external_api.py # 统一外部API接口
│ ├── crypto_utils.py # 加密/解密工具
│ └── login.py # 登录功能
├── test/ # 测试目录
│ ├── README.md # 测试说明
│ └── verify_api.py # API验证测试
├── javdb_api.py # 原始JAVDB API实现
├── config.example.py # 配置示例
├── third_party_config.json # 第三方API配置
├── requirements.txt # 依赖
└── README.md # 本文档
pip install -r requirements.txt- 复制配置示例文件:
cp config.example.py config.py-
编辑
config.py,配置域名、超时时间等参数 -
(可选)如需登录功能,配置账号密码
from lib import (
search_videos,
get_video_detail,
get_video_by_code,
search_actor,
get_actor_works,
)
# 搜索视频
videos = search_videos("SSIS", max_pages=2)
for video in videos:
print(f"{video['code']}: {video['title']}")
# 获取视频详情
detail = get_video_detail("YwG8Ve")
print(f"标题: {detail['title']}")
print(f"磁力链接: {detail['magnets']}")
# 根据番号搜索
detail = get_video_by_code("MIDA-583")
print(f"标题: {detail['title']}")
# 搜索演员
actors = search_actor("井上もも")
for actor in actors:
print(f"{actor['actor_name']}: {actor['actor_id']}")
# 获取演员作品
result = get_actor_works("0R1n3", max_pages=2)
for work in result['works']:
print(f"{work['code']}: {work['title']}")from lib import AdapterFactory, Platform
# 获取适配器
adapter = AdapterFactory.get_adapter(Platform.JAVDB)
# 使用适配器方法
videos = adapter.search_videos("SSIS", max_pages=2)
detail = adapter.get_video_detail("YwG8Ve")
# 转换为标准格式
data = adapter.convert_to_standard_format(videos)
print(f"视频数: {len(data['videos'])}")
print(f"标签数: {len(data['tags'])}")from lib import CryptoUtils, DEFAULT_KEY
# 加密数据
encrypted = CryptoUtils.xor_encrypt("Hello, World!", DEFAULT_KEY)
# 解密数据
decrypted = CryptoUtils.xor_decrypt(encrypted, DEFAULT_KEY)
# 加密文件
CryptoUtils.encrypt_file("input.txt", "output.enc", DEFAULT_KEY)
# 解密文件
content = CryptoUtils.decrypt_file("output.enc", DEFAULT_KEY)from lib import login, ensure_login
# 登录(使用配置文件中的账号密码)
success = login()
# 自动登录(先尝试加载 cookies,过期则重新登录)
success = ensure_login()from lib import auto_login
# 自动化登录(打开浏览器,手动登录后自动保存 cookies)
success = auto_login(timeout=300) # 等待 5 分钟
# 流程:
# 1. 自动打开浏览器,显示登录助手页面
# 2. 在页面中点击按钮打开 JAVDB 登录页
# 3. 在 JAVDB 中完成登录
# 4. 从浏览器复制 cookies 并粘贴到助手页面
# 5. 提交后自动保存到 cookies.jsonfrom javdb_api import JavdbAPI
api = JavdbAPI()
# 获取演员作品并按标签筛选
result = api.get_actor_works_with_tags(
actor_id="NeOr", # 永野一夏
tag_names=["美少女"], # 按标签名称筛选
max_pages=1,
get_details=True, # 获取详细信息(包含标签)
save_temp=True # 保存到临时文件
)
print(f"总作品: {result['total_works']}")
print(f"筛选后: {result['filtered_works']}")
print(f"筛选标签: {result['tags']}")
# 筛选后的作品
for work in result['works']:
print(f"{work['code']}: {work['title']}")
# 也可以使用标签 ID 筛选
result = api.get_actor_works_with_tags(
actor_id="NeOr",
tag_ids=["c1=23", "c3=78"], # 多标签组合
max_pages=1
)
# 临时文件机制:
# - 首次运行会获取所有作品并保存到临时文件
# - 后续运行会从临时文件加载,避免重复请求
# - 如需重新获取,删除临时文件或使用不同的 temp_file 参数搜索视频
参数:
keyword: 搜索关键词max_pages: 最大搜索页数platform: 平台名称,默认使用配置中的默认平台
返回: 视频列表
获取视频详情
参数:
video_id: 视频IDplatform: 平台名称
返回: 视频详情字典
根据番号获取视频详情
参数:
code: 番号(如 MIDA-583)platform: 平台名称
返回: 视频详情字典
搜索演员
参数:
actor_name: 演员名字platform: 平台名称
返回: 演员列表
获取演员作品
参数:
actor_id: 演员IDpage: 起始页码max_pages: 最大页数full_detail: 是否获取完整详情platform: 平台名称
返回: 作品列表和分页信息
获取标签作品
参数:
tag_id: 标签IDpage: 起始页码max_pages: 最大页数platform: 平台名称
返回: 作品列表和分页信息
多标签组合搜索
参数:
page: 起始页码max_pages: 最大页数platform: 平台名称**tag_params: 标签参数,如 c1=23, c3=78
返回: 作品列表和分页信息
下载视频缩略图
参数:
video_id: 视频IDdownload_dir: 下载目录platform: 平台名称
返回: (成功下载数, 总数)
将平台数据转换为系统标准格式
参数:
videos: 视频数据列表platform: 平台名称
返回: 标准格式的视频和标签数据
{
"video_id": "YwG8Ve",
"code": "MIDA-583",
"title": "作品标题",
"date": "2026-03-04",
"tags": ["美少女電影", "單體作品", "情侶"],
"actors": ["井上もも"],
"series": "系列名",
"magnets": [
{
"magnet": "magnet:?xt=urn:btih:...",
"size_text": "5.27GB",
"size_mb": 5396.48
}
],
"thumbnail_images": [
"https://c0.jdbstatic.com/samples/yw/YwG8Ve_l_0.jpg",
...
],
"preview_video": "",
"cover_url": "https://c0.jdbstatic.com/covers/yw/YwG8Ve.jpg"
}{
"videos": [
{
"id": "JAVDB_YwG8Ve",
"video_id": "YwG8Ve",
"code": "MIDA-583",
"title": "作品标题",
"date": "2026-03-04",
"cover_path": "https://...",
"thumbnail_images": [...],
"magnets": [...],
"actors": ["井上もも"],
"series": "",
"rating": "4.57分",
"tag_ids": ["tag_001", "tag_002"],
"create_time": "2026-03-02T10:00:00",
"last_read_time": "2026-03-02T10:00:00",
"is_deleted": False
}
],
"tags": [
{
"id": "tag_001",
"name": "美少女電影",
"create_time": "2026-03-02T10:00:00"
}
]
}要添加新的视频平台,需要:
- 在
lib/platform.py中添加平台枚举 - 创建新的适配器类,继承
BaseAdapter - 在
lib/adapter_factory.py中注册适配器 - 在
third_party_config.json中添加配置
编辑 config.py 文件:
JAVDB = {
'domains': ['javdb.com', 'javdb123.com'],
'timeout': 30,
'retry_times': 3,
'sleep_time': 0.5
}
LOGIN = {
'username': 'your_email@example.com',
'password': 'your_password'
}运行 API 验证测试:
cd test
python verify_api.pyMIT License