--- 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。