create: playlistv2 用 apasstk 和 JSON 按剧分页

MemRelay-Operation: memory-save:rapt-batch-api-20260925
MemRelay-Resource: f2a9f710-4c97-46ed-963b-7f0e5f8484d4
This commit is contained in:
2026-09-25 07:14:00 +08:00
parent 23a84f02b2
commit 640218fcfb
@@ -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。