Client
Client 用于统一管理连接、凭证、设备信息与请求配置,是调用 API 的入口。
用法
import asyncio
from qqmusic_api import Client
async def main() -> None:
async with Client() as client:
result = await client.search.quick_search("周杰伦")
print(result)
asyncio.run(main())
批量并发请求
Client.gather() 可以一次执行多个 Request,并按传入顺序返回解析后的结果。适合同时请求多个互不依赖的 API。
import asyncio
from qqmusic_api import Client
from qqmusic_api.modules.search import SearchType
async def main() -> None:
async with Client() as client:
results = await client.gather(
[
client.search.search_by_type("周杰伦", SearchType.SONG, num=1),
client.search.search_by_type("林俊杰", SearchType.SONG, num=1),
]
)
print(results[0].song)
print(results[1].song)
asyncio.run(main())
gather() 的返回值顺序始终与传入的请求顺序一致。
如果希望单个请求失败时不立即抛出异常,可以启用 return_exceptions:
results = await client.gather(
[
client.search.search_by_type("周杰伦", SearchType.SONG, num=1),
client.search.search_by_type("林俊杰", SearchType.SONG, num=1),
],
return_exceptions=True,
)
此时失败项会以异常对象的形式出现在对应位置,成功项仍返回正常的响应模型。
全局凭证
如果你的场景需要登录,可以在初始化 Client 时直接注入 Credential:
from qqmusic_api import Client, Credential
credential = Credential(musicid=123456, musickey="Q_H_L_xxx")
client = Client(credential=credential)
请求平台
默认的请求平台是 android,如果需要可以在初始化时覆盖:
import asyncio
from qqmusic_api import Client, Platform
async def main():
async with Client(platform=Platform.DESKTOP) as client:
...
asyncio.run(main())
支持的平台:
| 平台 | Platform 值 |
说明 |
|---|---|---|
| Android | Platform.ANDROID |
默认,大部分接口使用 |
| Desktop | Platform.DESKTOP |
QQ 音乐桌面端 |
| Web | Platform.WEB |
QQ 音乐网页端 |
Note
部分接口的请求平台是固定的,传入 platform 参数不会生效。例如 get_detail 固定使用 Web 平台,send_authcode 固定使用 Android 平台。
设备信息
可通过 device_path 参数指定设备信息文件的路径进行持久化存储:
不传 device_path 则仅在内存维护设备状态,重启后丢失。
Client.credential 更改时设备信息保持不变。