跳转至

SingerApi

modules.singer.SingerApi

SingerApi(client: Client)

Bases: ApiModule

歌手相关 API.

Source code in qqmusic_api/modules/_base.py
def __init__(self, client: "Client") -> None:
    self._client = client
    self._session = client._session

get_singer_list

get_singer_list(
    area: int | AreaType = ALL,
    sex: int | SexType = ALL,
    genre: int | GenreType = ALL,
)

获取歌手列表原始数据.

PARAMETER DESCRIPTION
area

地区类型.

TYPE: int | AreaType DEFAULT: ALL

sex

性别类型.

TYPE: int | SexType DEFAULT: ALL

genre

风格类型.

TYPE: int | GenreType DEFAULT: ALL

Source code in qqmusic_api/modules/singer.py
def get_singer_list(
    self,
    area: int | AreaType = AreaType.ALL,
    sex: int | SexType = SexType.ALL,
    genre: int | GenreType = GenreType.ALL,
):
    """获取歌手列表原始数据.

    Args:
        area: 地区类型.
        sex: 性别类型.
        genre: 风格类型.
    """
    return self._build_cgi(
        module="music.musichallSinger.SingerList",
        method="GetSingerList",
        param={
            "hastag": 0,
            "area": int(AreaType(area)),
            "sex": int(SexType(sex)),
            "genre": int(GenreType(genre)),
        },
        response_model=SingerTypeListResponse,
    )

get_singer_list_index

get_singer_list_index(
    area: int | AreaType = ALL,
    sex: int | SexType = ALL,
    genre: int | GenreType = ALL,
    index: int | IndexType = ALL,
    page: int = 1,
    num: int = 80,
)

获取按索引分页的歌手列表原始数据.

PARAMETER DESCRIPTION
area

地区类型.

TYPE: int | AreaType DEFAULT: ALL

sex

性别类型.

TYPE: int | SexType DEFAULT: ALL

genre

风格类型.

TYPE: int | GenreType DEFAULT: ALL

index

首字母索引.

TYPE: int | IndexType DEFAULT: ALL

page

页码.

TYPE: int DEFAULT: 1

num

每页返回数量.

TYPE: int DEFAULT: 80

Source code in qqmusic_api/modules/singer.py
def get_singer_list_index(
    self,
    area: int | AreaType = AreaType.ALL,
    sex: int | SexType = SexType.ALL,
    genre: int | GenreType = GenreType.ALL,
    index: int | IndexType = IndexType.ALL,
    page: int = 1,
    num: int = 80,
):
    """获取按索引分页的歌手列表原始数据.

    Args:
        area: 地区类型.
        sex: 性别类型.
        genre: 风格类型.
        index: 首字母索引.
        page: 页码.
        num: 每页返回数量.
    """
    return self._build_cgi(
        module="music.musichallSinger.SingerList",
        method="GetSingerListIndex",
        param={
            "area": int(AreaType(area)),
            "sex": int(SexType(sex)),
            "genre": int(GenreType(genre)),
            "index": int(IndexType(index)),
            "sin": (page - 1) * num,
            "cur_page": page,
        },
        response_model=SingerIndexPageResponse,
        pager_strategy=MultiFieldContinuationStrategy[SingerIndexPageResponse](
            lambda params, response: (
                None
                if not response.singerlist or params["sin"] + len(response.singerlist) >= (response.total or 0)
                else {
                    **cast("dict[str, int]", params),
                    "sin": cast("dict[str, int]", params)["sin"] + len(response.singerlist),
                    "cur_page": cast("dict[str, int]", params)["cur_page"] + 1,
                }
            ),
            context_name="singer_list_index",
        ),
    ).with_extractor(lambda r: r.singerlist)

get_info

get_info(mid: str)

获取歌手主页基本信息.

固定使用 Android 平台.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

Source code in qqmusic_api/modules/singer.py
def get_info(self, mid: str):
    """获取歌手主页基本信息.

    固定使用 Android 平台.

    Args:
        mid: 歌手 MID.
    """
    return self._build_cgi(
        module="music.UnifiedHomepage.UnifiedHomepageSrv",
        method="GetHomepageHeader",
        param={"SingerMid": mid},
        response_model=HomepageHeaderResponse,
        platform=Platform.ANDROID,
    )

get_tab_detail

get_tab_detail(
    mid: str,
    tab_type: TabType,
    page: int = 1,
    num: int = 10,
)

获取歌手主页特定 Tab 的详情原始数据.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

tab_type

Tab 类型.

TYPE: TabType

page

页码.

TYPE: int DEFAULT: 1

num

返回数量.

TYPE: int DEFAULT: 10

Source code in qqmusic_api/modules/singer.py
def get_tab_detail(
    self,
    mid: str,
    tab_type: TabType,
    page: int = 1,
    num: int = 10,
):
    """获取歌手主页特定 Tab 的详情原始数据.

    Args:
        mid: 歌手 MID.
        tab_type: Tab 类型.
        page: 页码.
        num: 返回数量.
    """
    return self._build_cgi(
        module="music.UnifiedHomepage.UnifiedHomepageSrv",
        method="GetHomepageTabDetail",
        param={
            "SingerMid": mid,
            "IsQueryTabDetail": 1,
            "TabID": tab_type.tab_id,
            "PageNum": page - 1,
            "PageSize": num,
            "Order": 0,
        },
        response_model=HomepageTabDetailResponse,
        pager_strategy=PageStrategy[HomepageTabDetailResponse](
            page_key="PageNum",
            page_size=num,
            start_page=page - 1,
            has_more_extractor=lambda response: bool(response.has_more),
        ),
    )

get_desc

get_desc(
    mids: list[str],
    *,
    ex_singer: bool = True,
    wiki_singer: bool = True,
    group_singer: bool = True,
    pic: bool = True,
    photos: bool = True,
)

获取歌手列表的描述信息.

PARAMETER DESCRIPTION
mids

歌手 MID 列表.

TYPE: list[str]

ex_singer

是否返回扩展描述信息.

TYPE: bool DEFAULT: True

wiki_singer

是否返回百科 XML 数据.

TYPE: bool DEFAULT: True

group_singer

是否返回组合成员信息.

TYPE: bool DEFAULT: True

pic

是否返回头像/立绘图片 URL.

TYPE: bool DEFAULT: True

photos

是否返回相册大图列表.

TYPE: bool DEFAULT: True

Source code in qqmusic_api/modules/singer.py
def get_desc(
    self,
    mids: list[str],
    *,
    ex_singer: bool = True,
    wiki_singer: bool = True,
    group_singer: bool = True,
    pic: bool = True,
    photos: bool = True,
):
    """获取歌手列表的描述信息.

    Args:
        mids: 歌手 MID 列表.
        ex_singer: 是否返回扩展描述信息.
        wiki_singer: 是否返回百科 XML 数据.
        group_singer: 是否返回组合成员信息.
        pic: 是否返回头像/立绘图片 URL.
        photos: 是否返回相册大图列表.
    """
    return self._build_cgi(
        module="music.musichallSinger.SingerInfoInter",
        method="GetSingerDetail",
        param={
            "singer_mids": mids,
            "group_singer": group_singer,
            "wiki_singer": wiki_singer,
            "ex_singer": ex_singer,
            "pic": pic,
            "photos": photos,
        },
        response_model=SingerDetailResponse,
    )

get_similar

get_similar(mid: str, number: int = 10)

获取相似歌手列表.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

number

返回相似歌手的数量.

TYPE: int DEFAULT: 10

Source code in qqmusic_api/modules/singer.py
def get_similar(self, mid: str, number: int = 10):
    """获取相似歌手列表.

    Args:
        mid: 歌手 MID.
        number: 返回相似歌手的数量.
    """
    return self._build_cgi(
        module="music.SimilarSingerSvr",
        method="GetSimilarSingerList",
        param={"singerMid": mid, "number": number},
        response_model=SimilarSingerResponse,
    )

get_songs_list

get_songs_list(mid: str, num: int = 10, page: int = 1)

获取歌手的歌曲列表.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

num

返回歌曲数量.

TYPE: int DEFAULT: 10

page

分页页码.

TYPE: int DEFAULT: 1

Source code in qqmusic_api/modules/singer.py
def get_songs_list(self, mid: str, num: int = 10, page: int = 1):
    """获取歌手的歌曲列表.

    Args:
        mid: 歌手 MID.
        num: 返回歌曲数量.
        page: 分页页码.
    """
    return self._build_cgi(
        module="musichall.song_list_server",
        method="GetSingerSongList",
        param={"singerMid": mid, "order": 1, "number": num, "begin": (page - 1) * num},
        response_model=SingerSongListResponse,
        pager_strategy=OffsetStrategy[SingerSongListResponse](
            offset_key="begin",
            page_size_key="number",
            total_extractor=lambda r: r.total_num,
            count_extractor=lambda r: len(r.song_list),
        ),
    ).with_extractor(lambda response: response.song_list)

get_album_list

get_album_list(mid: str, num: int = 10, page: int = 1)

获取歌手的专辑列表.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

num

返回专辑数量.

TYPE: int DEFAULT: 10

page

分页页码.

TYPE: int DEFAULT: 1

Source code in qqmusic_api/modules/singer.py
def get_album_list(self, mid: str, num: int = 10, page: int = 1):
    """获取歌手的专辑列表.

    Args:
        mid: 歌手 MID.
        num: 返回专辑数量.
        page: 分页页码.
    """
    return self._build_cgi(
        module="music.musichallAlbum.AlbumListServer",
        method="GetAlbumList",
        param={"singerMid": mid, "order": 1, "number": num, "begin": (page - 1) * num},
        response_model=SingerAlbumListResponse,
        pager_strategy=OffsetStrategy[SingerAlbumListResponse](
            offset_key="begin",
            page_size_key="number",
            total_extractor=lambda r: r.total,
            count_extractor=lambda r: len(r.album_list),
        ),
    ).with_extractor(lambda r: r.album_list)

get_mv_list

get_mv_list(mid: str, num: int = 10, page: int = 1)

获取歌手 MV 列表数据.

PARAMETER DESCRIPTION
mid

歌手 MID.

TYPE: str

num

返回数量.

TYPE: int DEFAULT: 10

page

分页页码.

TYPE: int DEFAULT: 1

Source code in qqmusic_api/modules/singer.py
def get_mv_list(self, mid: str, num: int = 10, page: int = 1):
    """获取歌手 MV 列表数据.

    Args:
        mid: 歌手 MID.
        num: 返回数量.
        page: 分页页码.
    """
    return self._build_cgi(
        module="MvService.MvInfoProServer",
        method="GetSingerMvList",
        param={"singermid": mid, "order": 1, "count": num, "start": (page - 1) * num},
        response_model=SingerMvListResponse,
        pager_strategy=OffsetStrategy[SingerMvListResponse](
            offset_key="start",
            page_size_key="count",
            total_extractor=lambda r: r.total,
            count_extractor=lambda r: len(r.mv_list),
        ),
    ).with_extractor(lambda r: r.mv_list)