使用TikTokApi获取TikTok音频下载URL时遇await错误求助
解决TikTokApi获取音频下载URL的错误问题
错误原因分析
- TypeError: object Sound can't be used in 'await' expression:你错误地对
api.sound(sound_id)使用了await,但该方法返回的是Sound对象,不是异步协程,不需要用await等待。 - sound_id无法传递/信息获取失败:旧版本的嵌套字典路径
sound_info["itemInfo"]["itemStruct"]["music"]["playUrl"]在新版本TikTokApi中已失效,且API初始化时可能需要额外参数规避权限限制。
修正后的完整代码
import os import requests import asyncio from TikTokApi import TikTokApi async def get_sound_download_url(sound_id: str) -> str: """获取TikTok音频的下载URL""" # 初始化API,添加参数规避权限限制 api = TikTokApi(use_test_endpoints=True) # api.sound()返回Sound对象,无需await sound = api.sound(sound_id) # 直接从sound.music获取播放URL return sound.music.get("playUrl") def download_sound(download_url: str, output_path: str): """下载TikTok音频到指定路径""" response = requests.get(download_url) if response.status_code == 200: with open(output_path, "wb") as f: f.write(response.content) print(f"音频已保存到 {output_path}") else: print(f"下载失败,状态码: {response.status_code}") async def main(sound_id: str, output_path: str): """主函数:获取URL并下载""" download_url = await get_sound_download_url(sound_id) if download_url: download_sound(download_url, output_path) else: print("无法获取音频下载URL") if __name__ == "__main__": sound_id = "7210093783109651758" # 示例音频ID output_path = os.path.join(".", "sound.mp3") asyncio.run(main(sound_id, output_path))
关键修改说明
- 移除
await关键字:api.sound(sound_id)是同步方法,直接返回Sound实例,不需要用await等待,这是解决第一个错误的核心。 - 简化URL获取路径:新版本TikTokApi将音乐信息整合到
sound.music属性中,无需再访问多层嵌套字典,避免路径错误。 - API初始化参数:添加
use_test_endpoints=True可以绕过部分官方API的访问限制,解决sound_id无法正常传递的问题。 - 增加下载状态检查:通过响应状态码判断下载是否成功,方便排查问题。
内容的提问来源于stack exchange,提问作者Programman
相关产品推荐
相关产品推荐

