Python 从Twitch&x27获取信息;s API,用于检查discord bot的拖缆是否联机

Python 从Twitch&x27获取信息;s API,用于检查discord bot的拖缆是否联机,python,discord.py,twitch,Python,Discord.py,Twitch,我正在尝试制作一个Discord机器人,在您键入“$live”时检查Twitch上的拖缆是否在线,但我无法让它工作。我正在使用Discord.py。我的主要问题是使用头调用API来提供授权。另外,使用我目前编写的代码,它会发送此错误。我的主要问题是,如何提供授权密钥,使其既不会给出下面的错误,也不会说需要OAuth。蒂亚 忽略on_消息中的异常 回溯(最近一次呼叫最后一次): 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/disc

我正在尝试制作一个Discord机器人,在您键入“$live”时检查Twitch上的拖缆是否在线,但我无法让它工作。我正在使用Discord.py。我的主要问题是使用头调用API来提供授权。另外,使用我目前编写的代码,它会发送此错误。我的主要问题是,如何提供授权密钥,使其既不会给出下面的错误,也不会说需要OAuth。蒂亚

忽略on_消息中的异常 回溯(最近一次呼叫最后一次): 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/discord/client.py”,第343行,在运行事件中 等待coro(*args,**kwargs) on_消息中第19行的文件“main.py” response=requests.get(url,headers=headers) 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/api.py”,第76行,在get中 返回请求('get',url,params=params,**kwargs) 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/api.py”,请求中的第61行 return session.request(method=method,url=url,**kwargs) 请求中的文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/sessions.py”,第528行 准备=自我准备请求(req) 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/sessions.py”,第456行,在prepare\u请求中 p、 预备( 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/models.py”,第317行,在prepare中 自我准备_标题(标题) 文件“/opt/virtualenvs/python3/lib/python3.8/site packages/requests/models.py”,第449行,在prepare_标题中 对于headers.items()中的header: AttributeError:“set”对象没有属性“items”

代码如下

import discord 
import os
import requests

client = discord.Client()
url = 'https://api.twitch.tv/helix/search/channels?query=whyoscar'
headers = {'client_id:' '*******************', 'Authorization:' 'Bearer **********************'}

@client.event
async def  on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event 
async def on_message(message):
  if message.author == client.user:
    return
  
  if message.content.startswith('$live'):
    response = requests.get(url, headers=headers)
    details = response.json()
    await message.channel.send(details)

client.run(os.getenv('TOKEN'))
根据Twitch论坛上的消息,您需要的是用户令牌,而不是应用令牌

TwitchAPI文档说

需要OAuth或应用程序访问令牌

…但它没有指定令牌必须是用户令牌


无论如何,转到,选择Bot Chat Token,使用您的Twitch信息登录,它应该可以工作。

如果您使用OAuth访问Twitch API,那么流程应该是以下内容:

authURL = 'https://id.twitch.tv/oauth2/token'
client_ID = 'xxx'
secret = 'xxx'

AutParams = {'client_id': client_ID,
             'client_secret': secret,
             'grant_type': 'client_credentials'
             }

AutCall = requests.post(url=authURL, params=AutParams)
access_token = AutCall.json()['access_token']

head = {
    'Client-ID' : client_ID,
    'Authorization' :  "Bearer " + access_token
    }

答案是,您希望像这样定义您的头:
url=https://api.twitch.tv/helix/search/channels?query=&first=1'headers={“client id”:os.getenv('client_id_TOKEN'),'Authorization:os.getenv('ACCESS_TOKEN')}
然后将它们放入
response=requests.get(url,headers=headers)
,然后获取JSON响应,并检查
的响应是否为_live=true
。仅此而已!

好的,我这样做了,并修复了导致我原始错误的格式问题,现在它显示“{'error':'Unauthorized','status':401,'message':'Client ID和OAuth令牌不匹配'”为什么?我今天也犯了同样的错误。但是在晚上早些时候,一切都很好。我不确定问题出在哪里,但您的实现似乎是正确的。