9

twitch.tv ストリームがライブであるかどうかを確認するための Python スクリプトを作成する方法があるかどうか疑問に思っています。

アプリ エンジン タグが削除された理由はわかりませんが、これはアプリ エンジンを使用している可能性があります。

4

11 に答える 11

6

RocketDonkey の素晴らしい回答は今では古くなっているようです。そのため、Google でこの SO の質問に出くわした私のような人々のために、更新された回答を投稿しています。解析することで、ユーザー EXAMPLEUSER のステータスを確認できます。

https://api.twitch.tv/kraken/streams/EXAMPLEUSER

エントリ "stream":null は、そのユーザーが存在する場合、ユーザーがオフラインであることを示します。コマンドラインで使用できる小さな Python スクリプトを次に示します。これは、ユーザーがオンラインの場合は 0、ユーザーがオフラインの場合は 1、ユーザーが見つからない場合は 2 を出力します。

#!/usr/bin/env python3

# checks whether a twitch.tv userstream is live

import argparse
from urllib.request import urlopen
from urllib.error import URLError
import json

def parse_args():
    """ parses commandline, returns args namespace object """
    desc = ('Check online status of twitch.tv user.\n'
            'Exit prints are 0: online, 1: offline, 2: not found, 3: error.')
    parser = argparse.ArgumentParser(description = desc,
             formatter_class = argparse.RawTextHelpFormatter)
    parser.add_argument('USER', nargs = 1, help = 'twitch.tv username')
    args = parser.parse_args()
    return args

def check_user(user):
    """ returns 0: online, 1: offline, 2: not found, 3: error """
    url = 'https://api.twitch.tv/kraken/streams/' + user
    try:
        info = json.loads(urlopen(url, timeout = 15).read().decode('utf-8'))
        if info['stream'] == None:
            status = 1
        else:
            status = 0
    except URLError as e:
        if e.reason == 'Not Found' or e.reason == 'Unprocessable Entity':
            status = 2
        else:
            status = 3
    return status

# main
try:
    user = parse_args().USER[0]
    print(check_user(user))
except KeyboardInterrupt:
    pass
于 2014-05-13T01:42:41.537 に答える
5

Twitch は、その情報を取得する方法を提供する API (ドキュメントはこちら) を提供しているようです。フィードを取得する非常に簡単な例は次のとおりです。

import urllib2

url = 'http://api.justin.tv/api/stream/list.json?channel=FollowGrubby'
contents = urllib2.urlopen(url)

print contents.read()

これにより、すべての情報がダンプされ、JSON ライブラリで解析できます(XML も利用できるようです)。ストリームがライブでない場合、値は空を返すように見えます (これほどテストしていないか、何も読んでいません:))。お役に立てれば!

于 2012-08-21T22:57:09.053 に答える
2

client_id をパラメータとして twitch API を使用し、json を解析します。

https://api.twitch.tv/kraken/streams/massansc?client_id=XXXXXXX

Twitch クライアント ID はこちらで説明されています: https://dev.twitch.tv/docs#client-id、開発者アプリケーションを登録する必要があります: https://www.twitch.tv/kraken/oauth2/clients/new

例:

import requests
import json

def is_live_stream(streamer_name, client_id):

    twitch_api_stream_url = "https://api.twitch.tv/kraken/streams/" \
                    + streamer_name + "?client_id=" + client_id

    streamer_html = requests.get(twitch_api_stream_url)
    streamer = json.loads(streamer_html.content)

    return streamer["stream"] is not None
于 2016-11-24T23:36:33.447 に答える
2

これは、Twitch API (helix) の最新バージョンを使用した最新の回答です。(kraken は非推奨であり、サードパーティの使用について文書化されていないため、GQL を使用しないでください)。

動作しますが、スクリプトを実行するたびに新しいトークンを生成するのではなく、トークンを保存して再利用する必要があります。


import requests

client_id = ''
client_secret = ''
streamer_name = ''

body = {
    'client_id': client_id,
    'client_secret': client_secret,
    "grant_type": 'client_credentials'
}
r = requests.post('https://id.twitch.tv/oauth2/token', body)

#data output
keys = r.json();

print(keys)

headers = {
    'Client-ID': client_id,
    'Authorization': 'Bearer ' + keys['access_token']
}

print(headers)

stream = requests.get('https://api.twitch.tv/helix/streams?user_login=' + streamer_name, headers=headers)

stream_data = stream.json();

print(stream_data);

if len(stream_data['data']) == 1:
    print(streamer_name + ' is live: ' + stream_data['data'][0]['title'] + ' playing ' + stream_data['data'][0]['game_name']);
else:
    print(streamer_name + ' is not live');
于 2021-03-08T20:02:09.947 に答える
1

このソリューションでは、アプリケーションを登録する必要はありません

import requests

HEADERS = { 'client-id' : 'kimne78kx3ncx6brgo4mv6wki5h1ko' }
GQL_QUERY = """
query($login: String) {
    user(login: $login) {
        stream {
            id
        }
    }
}
"""

def isLive(username):
    QUERY = {
        'query': GQL_QUERY,
        'variables': {
            'login': username
        }
    }

    response = requests.post('https://gql.twitch.tv/gql',
                             json=QUERY, headers=HEADERS)
    dict_response = response.json()
    return True if dict_response['data']['user']['stream'] is not None else False


if __name__ == '__main__':
    USERS = ['forsen', 'offineandy', 'dyrus']
    for user in USERS:
        IS_LIVE = isLive(user)
        print(f'User {user} live: {IS_LIVE}')
于 2020-11-23T19:52:03.830 に答える