Skip to content

playlist_tracks 走 eapi 通道请求发送失败,Node 参考实现该端点为 weapi #2

Description

@jinzhongjia

现象

ApiClient::playlist_tracks(/api/playlist/manipulate/tracks)使用 CryptoType::default()(即 Eapi),
实际调用时请求在发送层即失败:

HTTP request failed: error sending request for url (https://interface.music.163.com/eapi/playlist/manipulate/tracks)

同环境下其他 eapi 端点(song_url_v1 / cloudsearch / likelist)均正常,失败特定于该端点;
目标域名用 curl 可达(HTTP 200),排除网络问题。

对照

Node 参考实现(NeteaseCloudMusicApi module/playlist_tracks.js)该端点走 weapi
(music.163.com/weapi/playlist/manipulate/tracks)。

另:playlist_track_add(/api/playlist/track/add,weapi)对用户自建歌单返回
code=401 无权限操作歌单,似乎并不适用于常规「收藏歌曲到歌单」场景。

绕行验证(可用)

用公开的底层 request() 手动以 weapi 调同一端点,真实登录态下成功(添加/重复添加均正常,
502 已存在被 SPECIAL_STATUS_CODES 特判为成功):

let data = json!({
    "op": "add",
    "pid": playlist_id,
    "trackIds": json!([song_id]).to_string(),
    "imme": "true",
});
let opt = RequestOption {
    crypto: CryptoType::Weapi,
    cookie: Some(cookie),
    ..Default::default()
};
client.request("/api/playlist/manipulate/tracks", data, opt).await

建议

playlist_tracks 的 crypto 由 CryptoType::default() 改为 CryptoType::Weapi,与 Node 实现对齐。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions