Files
MemRelay/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2 用 apasstk 和 JSON 按剧分页.md
T
memrelay 7ac3289356 update: playlistv2 用 apasstk 和 JSON 按剧分页
MemRelay-Operation: memory-save:rapt-playlist-revise-20260925
MemRelay-Resource: f2a9f710-4c97-46ed-963b-7f0e5f8484d4
2026-09-25 23:15:35 +08:00

2.0 KiB
Raw Blame History

title, type, permalink, stable_id, scope, memory_type, project_id, usage_profile_id, status, revision, request_id, created_at, updated_at, tags
title type permalink stable_id scope memory_type project_id usage_profile_id status revision request_id created_at updated_at tags
playlistv2 用 apasstk 和 JSON 按剧分页 experience main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2-用-apasstk-和-json-按剧分页 f2a9f710-4c97-46ed-963b-7f0e5f8484d4 project experience 280dd2a0-d23d-4a71-91e1-dce4353163be 0c9feb46-d06e-43cd-9ef0-c5813c84a998 active 2 rapt-playlist-revise-20260925 2026-09-24T23:13:54.617444+00:00 2026-09-25T15:15:33.875012+00:00
playlistv2
apasstk
scraper

批量拿 CDN 必须复刻 App 真实请求,不能用 Authorization: Bearer 加 form 表单。

基址:https://apis.raptdrama.com 认证头:apasstk,值就是登录后 FlutterSharedPreferences 里的 accessToken。另外要带 User-Agent: RaptDrama/1.1.81 (Android 12; 23113RKC6C; Redmi),X-Device-Type: phone,以及设备指纹那组 X- 头。正文是 application/json。

Passion 列表:POST /app/open/classify_video,body {"page":从1开始,"limit":10,"type":20}。参数名是 type,不是 tstype 或 classify。空页结束。 分集:GET /app/video/getchapters?vid=剧id&start=&limit= 播放地址:POST /app/video/playlistv2,body {"vid":剧id,"page":n,"before":第一页为1其余为0}。vid 是整部剧的 id,不是单集 id。每页 10 集,data.count 是总集数。list 项里 cid 是集 id,idx 是集号,src 是主 m3u8;未解锁集 src 为空字符串。

主 m3u8 指向 1080p/video.m3u8,ts 为同目录下 videoN.ts,共用 Bunny token path。

已验证:rapt_scraper.py 一次跑完 Passion:37 部、1607 集、118 集免费且全部有 m3u8 和 ts,1489 集锁定且 src 为空。结果在 raptdrama_passion_full.json。签名地址会过期,重新跑脚本即可刷新。默认用游客 autologin;指定账号用环境变量 RAPTD_TOKEN,或在已 root 的设备上加 --from-device。连接偶尔会被对端直接断开,脚本里已做重试。

不要把 accessToken 或 CDN 签名写进普通记忆。不要再用 Bearer 或 form 去调 playlistv2。