跳转至

songlist

歌单相关 API

get_detail async

get_detail(songlist_id: int, dirid: int = 0, num: int = 10, page: int = 1, onlysong: bool = False, tag: bool = True, userinfo: bool = True)

获取歌单详细信息和歌曲

PARAMETER DESCRIPTION
songlist_id

歌单 ID

TYPE: int

dirid

歌单 dirid

TYPE: int DEFAULT: 0

num

返回数量

TYPE: int DEFAULT: 10

page

页码

TYPE: int DEFAULT: 1

onlysong

是否仅返回歌曲信息(优先级最大)

TYPE: bool DEFAULT: False

tag

是否返回歌单的标签信息

TYPE: bool DEFAULT: True

userinfo

是否返回歌单创建者的用户信息

TYPE: bool DEFAULT: True

Source code in qqmusic_api/songlist.py
@api_request("music.srfDissInfo.DissInfo", "CgiGetDiss")
async def get_detail(
    songlist_id: int,
    dirid: int = 0,
    num: int = 10,
    page: int = 1,
    onlysong: bool = False,
    tag: bool = True,
    userinfo: bool = True,
):
    """获取歌单详细信息和歌曲

    Args:
        songlist_id: 歌单 ID
        dirid: 歌单 dirid
        num: 返回数量
        page: 页码
        onlysong: 是否仅返回歌曲信息(优先级最大)
        tag: 是否返回歌单的标签信息
        userinfo: 是否返回歌单创建者的用户信息
    """

    def _processsor(data: dict[str, Any]):
        return {
            "dirinfo": data.get("dirinfo", {}),
            "total_song_num": data.get("total_song_num", 0),
            "songlist_size": data.get("songlist_size", 0),
            "songlist": data.get("songlist", []),
            "songtag": data.get("songtag", []),
            "orderlist": data.get("orderlist", []),
        }

    return {
        "disstid": songlist_id,
        "dirid": dirid,
        "tag": tag,
        "song_begin": num * (page - 1),
        "song_num": num,
        "userinfo": userinfo,
        "orderlist": True,
        "onlysonglist": onlysong,
    }, _processsor

get_songlist async

get_songlist(songlist_id: int, dirid: int = 0) -> list[dict[str, Any]]

获取歌单中所有歌曲列表

PARAMETER DESCRIPTION
songlist_id

歌单 ID

TYPE: int

dirid

歌单 dirid

TYPE: int DEFAULT: 0

Source code in qqmusic_api/songlist.py
async def get_songlist(
    songlist_id: int,
    dirid: int = 0,
) -> list[dict[str, Any]]:
    """获取歌单中所有歌曲列表

    Args:
        songlist_id: 歌单 ID
        dirid: 歌单 dirid
    """
    response = await get_detail(songlist_id=songlist_id, dirid=dirid, num=100, onlysong=True)

    total = response["total_song_num"]
    songs = response["songlist"]
    if total <= 100:
        return cast(list[dict[str, Any]], songs)

    rg = RequestGroup()
    for p, num in enumerate(range(100, total, 100), start=2):
        rg.add_request(get_detail, songlist_id=songlist_id, dirid=dirid, num=100, page=p, onlysong=True)

    response = await rg.execute()
    for res in response:
        songs.extend(res["songlist"])

    return songs

create async

create(dirname: str, *, credential: Credential | None = None)

添加歌单, 重名会在名称后面添加时间戳

PARAMETER DESCRIPTION
dirname

歌单名称

TYPE: str

credential

凭证

TYPE: Credential | None DEFAULT: None

RETURNS DESCRIPTION

创建的歌单基本信息

Source code in qqmusic_api/songlist.py
@api_request("music.musicasset.PlaylistBaseWrite", "AddPlaylist", verify=True, cacheable=False)
async def create(dirname: str, *, credential: Credential | None = None):
    """添加歌单, 重名会在名称后面添加时间戳

    Args:
        dirname: 歌单名称
        credential: 凭证

    Returns:
        创建的歌单基本信息
    """
    return {
        "dirName": dirname,
    }, lambda data: cast(dict[str, Any], data["result"])

delete async

delete(dirid: int, *, credential: Credential | None = None)

删除歌单

PARAMETER DESCRIPTION
dirid

歌单id

TYPE: int

credential

凭证

TYPE: Credential | None DEFAULT: None

RETURNS DESCRIPTION

是否删除成功若不存在则返回False

Source code in qqmusic_api/songlist.py
@api_request("music.musicasset.PlaylistBaseWrite", "DelPlaylist", verify=True, cacheable=False)
async def delete(dirid: int, *, credential: Credential | None = None):
    """删除歌单

    Args:
        dirid: 歌单id
        credential: 凭证

    Returns:
        是否删除成功若不存在则返回False
    """
    return {
        "dirId": dirid,
    }, lambda data: data["result"]["dirId"] == dirid

add_songs async

add_songs(dirid: int = 1, song_ids: list[int] = [], *, credential: Credential | None = None)

添加歌曲到歌单

PARAMETER DESCRIPTION
dirid

歌单 dirid

TYPE: int DEFAULT: 1

song_ids

歌曲 ID 列表

TYPE: list[int] DEFAULT: []

credential

凭证

TYPE: Credential | None DEFAULT: None

RETURNS DESCRIPTION

是否添加成功, 歌曲已存在返回False

Source code in qqmusic_api/songlist.py
@api_request("music.musicasset.PlaylistDetailWrite", "AddSonglist", verify=True, cacheable=False)
async def add_songs(dirid: int = 1, song_ids: list[int] = [], *, credential: Credential | None = None):
    """添加歌曲到歌单

    Args:
        dirid: 歌单 dirid
        song_ids: 歌曲 ID 列表
        credential: 凭证

    Returns:
        是否添加成功, 歌曲已存在返回False
    """
    return {
        "dirId": dirid,
        "v_songInfo": [{"songType": 0, "songId": songid} for songid in song_ids],
    }, lambda data: bool(data["result"]["updateTime"])

del_songs async

del_songs(dirid: int = 1, song_ids: list[int] = [], *, credential: Credential | None = None)

删除歌单歌曲

PARAMETER DESCRIPTION
dirid

歌单 dirid

TYPE: int DEFAULT: 1

song_ids

歌曲 ID 列表

TYPE: list[int] DEFAULT: []

credential

凭证

TYPE: Credential | None DEFAULT: None

RETURNS DESCRIPTION

是否删除成功, 歌曲不存在返回False

Source code in qqmusic_api/songlist.py
@api_request("music.musicasset.PlaylistDetailWrite", "DelSonglist", verify=True, cacheable=False)
async def del_songs(dirid: int = 1, song_ids: list[int] = [], *, credential: Credential | None = None):
    """删除歌单歌曲

    Args:
        dirid: 歌单 dirid
        song_ids: 歌曲 ID 列表
        credential: 凭证

    Returns:
        是否删除成功, 歌曲不存在返回False
    """
    return {
        "dirId": dirid,
        "v_songInfo": [{"songType": 0, "songId": songid} for songid in song_ids],
    }, lambda data: bool(data["result"]["updateTime"])