【问题标题】:Is there a way of checking a streamer is live on twitch with or without an api?有没有办法在有或没有 api 的情况下检查流媒体是否在 twitch 上直播?
【发布时间】:2020-10-23 12:23:02
【问题描述】:

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

【问题讨论】:

    标签: python bots discord discord.py twitch


    【解决方案1】:

    一种使用 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 请求,这将能够告诉您何时用户上线。使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 2020-02-01
      • 2018-11-10
      • 1970-01-01
      • 2022-07-13
      • 1970-01-01
      相关资源
      最近更新 更多