diff --git a/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2 用 apasstk 和 JSON 按剧分页.md b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2 用 apasstk 和 JSON 按剧分页.md new file mode 100644 index 0000000..c630a8a --- /dev/null +++ b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2 用 apasstk 和 JSON 按剧分页.md @@ -0,0 +1,34 @@ +--- +title: playlistv2 用 apasstk 和 JSON 按剧分页 +type: experience +permalink: main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/playlistv2-用-apasstk-和-json-按剧分页 +stable_id: f2a9f710-4c97-46ed-963b-7f0e5f8484d4 +scope: project +memory_type: experience +project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be +usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 +status: active +revision: 1 +request_id: rapt-batch-api-20260925 +created_at: '2026-09-24T23:13:54.617444+00:00' +updated_at: '2026-09-24T23:13:54.617444+00:00' +tags: +- 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。签名地址会过期,重新跐脚本即可刷新。token 从 MuMu adb 读 FlutterSharedPreferences,或环境变量 RAPTD_TOKEN。连接偶尔会被对端直接断开,脚本里已做重试。 + +不要把 accessToken 或 CDN 签名写进普通记忆。不要再用 Bearer 或 form 去调 playlistv2。 \ No newline at end of file