如何通过Telebot从URL发送音频?空文件问题求助
问题分析与解决方案
问题根源
- 代码中
DataAudio变量未定义,直接作为文件参数传入导致发送空文件。 - 你使用的YouTube音频链接是临时有效期链接(链接中的
expire参数显示有效期为1663630447,已过期),且未正确利用Telegram API的URL直接上传能力。
解决方案
方案1:直接传入有效音频URL发送
Telegram的sendAudio接口支持直接传入公网可访问的音频URL,无需本地文件上传,修改代码如下:
import requests audio_url = "你的有效YouTube音频链接" bot_token = "你的Bot令牌" chat_id = "1395609507" payload = { 'chat_id': chat_id, 'title': "jj", 'performer': 'YouTube', 'audio': audio_url # 直接传入音频URL } resp = requests.post( f"https://api.telegram.org/bot{bot_token}/sendAudio", data=payload ).json() print(resp)
方案2:下载音频后再上传
如果需要处理音频或链接有效期短,可先下载音频内容再上传:
import requests audio_url = "你的有效YouTube音频链接" bot_token = "你的Bot令牌" chat_id = "1395609507" # 下载音频内容 audio_res = requests.get(audio_url) audio_data = audio_res.content # 构造文件参数(指定文件名、内容、MIME类型) files = {'audio': ('audio.webm', audio_data, 'audio/webm')} payload = { 'chat_id': chat_id, 'title': "jj", 'performer': 'YouTube' } resp = requests.post( f"https://api.telegram.org/bot{bot_token}/sendAudio", data=payload, files=files ).json() print(resp)
注意事项
- YouTube的临时播放链接有严格有效期,过期后需重新获取有效链接。
- 若使用
sendVoice接口,需确保音频为OGG格式+Opus编码,否则无法正常播放。
内容的提问来源于stack exchange,提问作者muntazir halim
相关产品推荐
相关产品推荐

