MemRelay-Operation: memory-save:rapt-playlist-revise-20260925 MemRelay-Resource: f2a9f710-4c97-46ed-963b-7f0e5f8484d4
34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
---
|
||
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: 2
|
||
request_id: rapt-playlist-revise-20260925
|
||
created_at: '2026-09-24T23:13:54.617444+00:00'
|
||
updated_at: '2026-09-25T15:15:33.875012+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。签名地址会过期,重新跑脚本即可刷新。默认用游客 autologin;指定账号用环境变量 RAPTD_TOKEN,或在已 root 的设备上加 --from-device。连接偶尔会被对端直接断开,脚本里已做重试。
|
||
|
||
不要把 accessToken 或 CDN 签名写进普通记忆。不要再用 Bearer 或 form 去调 playlistv2。 |