You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TikTokApi获取TikTok音频下载URL时遇await错误求助

解决TikTokApi获取音频下载URL的错误问题

错误原因分析

  1. TypeError: object Sound can't be used in 'await' expression:你错误地对api.sound(sound_id)使用了await,但该方法返回的是Sound对象,不是异步协程,不需要用await等待。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:16:30