有没有一种方法可以检查主播是否在有或没有 api 的情况下在 twitch 上直播?

Is there a way of checking a streamer is live on twitch with or without an api?

我正在用 py 开发一个 discord 机器人。但我似乎无法弄清楚如何检查用户是否在 twitch 上直播。当我检查他们的流标题时。如果其中有单词流,我可以让机器人宣布流。但是机器人不断地检查它,一遍又一遍地打破频道。还有什么其他解决方案可以检查主播是否在直播?我不知道 api 是如何工作的

使用 python 请求库的常用方法,这将能够告诉您 IF 用户是否在线:

import requests

CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'

def is_user_live(username):
    endpoint = 'https://api.twitch.tv/helix/streams'
    my_headers = {
        'Client-ID': CLIENT_ID,
        'Authorization': f'Bearer {OAUTH_TOKEN}'
    }
    my_params = {'user_login': username}
    response = requests.get(endpoint, headers=my_headers, params=my_params)
    data = response.json()['data']
    if len(data) == 0:
        return False
    return data[0]['type'] == 'live'

我建议您在初始化机器人时订阅 events webhook。您将需要创建一个网络服务器来处理 Twitch 发送给您的 POST 请求,这将能够告诉您 WHEN用户上线。使用 Flask 的粗略示例:

import requests
import json
from flask import request

CLIENT_ID = 'my-twitch-client-id'
OAUTH_TOKEN = 'my-twitch-oauth-token'
MY_SECRET = 'an-arbitrary-secret'

app = your_flask_app()

@app.route('/my_webhook/<user_id>')
def my_webhook(user_id):
    check_secret(request) # sha256 of your secret and content-length
    data = request.get_json()['data']
    if len(data) > 0:
       your_bot.user_is_live(data)
    else:
       your_bot.user_is_offline(data)
    return 'OK'

def subscribe_to_webhook(user_id):
    endpoint = 'https://api.twitch.tv/helix/webhooks/hub'
    topic = 'https://api.twitch.tv/helix/streams'
    my_headers = {
        'Client-ID': CLIENT_ID,
        'Authorization': f'Bearer {OAUTH_TOKEN}'
    }
    payload = {
        'hub.callback': f'http://my_server.url/my_webhook/{user_id}',
        'hub.mode': 'subscribe',
        'hub.topic': f'{topic}?user_id={user_id}',
        'hub.lease_seconds': 864000,
        'hub.secret': MY_SECRET
    }
    response = requests.post(endpoint, headers=my_headers, data=json.dumps(payload))
    return response.ok