Files
MusicServer/sdk/lr/appApi.ts
T
snowy-yang 8c02fb5c15 refactor(sdk): 审计 P2 卫生项清理——请求层收敛与死代码清除
- 删除旧 sdk/request.ts,全部 import 收敛到 sdk/common/request.ts(85 文件)
- 注释死代码 630+ 行、裸 console.log 吞错 6 处、未使用符号 26 处清零
- bili 状态校验去重;utils DNS 预解析失败日志改 warn 带上下文
- CODE-AUDIT.md:第四节 P2 清理记录 + 第八节线索逐条复核结论(kw/kg/tx/wy parse 骨架相似实质各异,不抽公共层)
2026-10-03 20:48:54 +08:00

36 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 懒人听书 App API(dapis.mting.info)—— 搜索通道(游客 token 匿名可用)
// 签名(移植 loyalflower/lrts_download download.go):
// sc = md5(urlPath + "?" + <按 key 排序的 query(不含sc) 拼接> + secret),secret = "iJ0DgxmdC83#I&j@iwg"
// 头:UA Android13/yyting/... / Referer yytingting.com / ClientVersion 6.3.4.0
// 端点:/yyting/search/searchBatch.action(q=2150)
// 注意:章节/取流 App 端点(q=1930/2224)游客 token 已失效(482 请登录),取流走 web 通道(见 apis/lr.ts)
import crypto from 'node:crypto'
import { httpFetch } from '../common/request.ts'
const DOMAIN = 'http://dapis.mting.info'
const SECRET = 'iJ0DgxmdC83#I&j@iwg'
const GUEST_TOKEN = 'OqzlvCxt2i_P1SZKF6GjFg**_lK0uCQpm5tN-P6XdFZYawCDKSgeC4anU'
const GUEST_IMEI = 'MDI6MDA6MDA6MDA6MDA6DDA='
const APP_HEADERS = {
'User-Agent': 'Android13/yyting/vivo/V2133A/ch_uc_beta/167/Android',
Referer: 'yytingting.com',
ClientVersion: '6.3.4.0',
}
const signed = (path: string, params: Record<string, string>) => {
const q: Record<string, string> = { token: GUEST_TOKEN, imei: GUEST_IMEI, nwt: '1', ...params }
const qs = Object.keys(q).sort().map(k => `${k}=${q[k]}`).join('&')
q.sc = crypto.createHash('md5').update(path + '?' + qs + SECRET).digest('hex')
return `${DOMAIN}${path}?${Object.entries(q).map(([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&')}`
}
/** App API GET(游客态,仅搜索可用;章节/取流会 482 需登录) */
export const appApiGet = async(path: string, params: Record<string, string>): Promise<any> => {
const { statusCode, body } = await httpFetch(signed(path, params), { headers: APP_HEADERS, timeout: 15000 }).promise as any
if (statusCode != 200) throw new Error(`懒人 App API HTTP ${statusCode}`)
return body ?? {}
}
export default { appApiGet }