跳转至

Credential

Credential 用于保存 QQ 音乐登录态相关数据,并在需要登录的接口中作为凭证使用。

核心字段

字段 类型 必需 说明
musicid int 是 账号标识。QQ 登录通常是 QQ 号,微信登录通常是更长的数字 ID。
musickey str 是 登录态 Key,通常以 Q_H_L_ 或 W_X_ 开头。
refresh_key str 否 用于刷新登录态。
refresh_token str 否 用于刷新登录态。
encrypt_uin str 否 部分接口会返回的加密账号标识。

常见组合

musickey 前缀 musicid 形态 说明
Q_H_L_ 6-11 位数字 QQ 账号登录
W_X_ 最长可到 19 位 微信账号登录

全局使用

import asyncio

from qqmusic_api import Client, Credential


async def main() -> None:
    credential = Credential(musicid=123456, musickey="Q_H_L_xxx")

    async with Client(credential=credential) as client:
        result = await client.user.get_euin(credential.musicid)
        print(result)


asyncio.run(main())

单次请求覆盖

如果你不想把凭证绑定到整个 Client,需要登录态的接口都支持使用 credential 参数进行单次请求覆盖。

import asyncio
from qqmusic_api import Client, Credential

async def main() -> None:
    async with Client() as client:
        credential = Credential(musicid=123456, musickey="Q_H_L_xxx")
        result = await client.song.get_song_urls(..., credential=credential)
        print(result)

asyncio.run(main())

刷新

可以通过 client.login.check_expired 和 credential.is_expired() 来判断是否过期。

Note

credential.is_expired() 只是简单的通过时间戳判断是否过期

import asyncio
from qqmusic_api import Client, Credential

async def main() -> None:
    async with Client() as client:
        credential = Credential(
            musicid=123456,
            musickey="Q_H_L_xxx",
            refresh_key="xxx",
            refresh_token="xxx",
            access_token="xxx",
        )
        credential = await client.login.refresh_credential(credential)
        print(credential.musicid, credential.musickey)

asyncio.run(main())

凭证快照与 Android 会话

每次请求执行前,客户端会捕获当前凭证。Credential 是不可变模型,因此可以安全共享引用;执行期间重新设置
Client.credential 不会影响正在执行的操作。

Android 平台的匿名会话值(uid/sid)由会话管理器在当前客户端内维护,与账号凭证相互独立。
首次 Android 业务请求获取会话,之后复用,并在跨自然日后的首次 Android 请求中刷新。新建客户端时会重新获取匿名会话。
device_path 保存设备指纹和 QIMEI 等设备信息,供后续客户端继续使用同一设备。