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

使用discord.py开发Discord机器人调用Tenor API遇401错误求助

解决Tenor API调用401未授权错误

401错误本质是API服务器拒绝了你的身份验证请求,结合你的代码和Tenor API的使用规则,常见原因和排查步骤如下:

常见原因及排查

1. 环境变量未正确加载API密钥

你的代码用os.getenv("API_KEY")获取密钥,但如果环境变量没配置到位,这个值会是None,直接导致401。

  • 排查:在get_gif函数开头加一行print(key),运行后看控制台输出是否是你的真实API密钥。
  • 修复:
    • 如果用.env文件,确保安装了python-dotenv,并且在代码开头调用load_dotenv()加载环境变量;
    • 直接在服务器/运行环境中手动设置API_KEY环境变量。

2. API密钥未启用Tenor API权限

在Google Cloud创建密钥后,需要手动启用Tenor API服务,否则密钥无法访问该API:

  • 打开Google Cloud控制台,搜索“Tenor API”,确认服务状态为「已启用」;
  • 如果是未启用状态,点击「启用」按钮,等待几分钟后重新测试。

3. API密钥设置了不符合当前环境的限制

如果你的密钥配置了IP白名单、HTTP引用限制等,而机器人的运行环境不符合这些限制,会被拒绝访问:

  • 进入Google Cloud的「API和服务」→「凭据」页面,找到你的API密钥;
  • 查看「密钥限制」部分,暂时移除所有限制(测试用),重新调用API,如果能成功,再根据实际运行环境配置合理的限制。

4. API端点或参数格式问题

虽然你的代码看起来参数格式没问题,但可以确认:

  • Tenor API的v1端点https://g.tenor.com/v1/search是有效的;
  • 参数key的拼写正确,没有写成api_key之类的错误名称。

额外代码优化建议

你的gif命令只能接收单个关键词,用户输入多词搜索会失效,可以改成用*args接收所有参数:

@commands.command(name="gif", aliases=["gf"])
async def gif(self, ctx, *args):
    search_query = " ".join(args)
    await ctx.send(await self.get_gif(search_query))

内容的提问来源于stack exchange,提问作者Keigratz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:53:12