Is There Any Way To Check if a Twitch Stream Is Li

2020-06-19 17:24发布

I'm just wondering if there is any way to write a python script to check to see if a twitch.tv stream is live? Any and all thoughts are appreciated!

EDIT: I'm not sure why my app engine tag was removed, but this would be using app engine.

5条回答
何必那么认真
2楼-- · 2020-06-19 18:05

It looks like Twitch provides an API (documentation here) that provides a way to get that info. A very simple example of getting the feed would be:

import urllib2

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

print contents.read()

This will dump all of the info, which you can then parse with a JSON library (XML looks to be available too). Looks like the value returns empty if the stream isn't live (haven't tested this much at all, nor have I read anything :) ). Hope this helps!

查看更多
Evening l夕情丶
3楼-- · 2020-06-19 18:07

Since all answers are actually outdated as of 2020-05-02, i'll give it a shot. You now are required to register a developer application (I believe), and now you must use an endpoint that requires a user-id instead of a username (as they can change).

See https://dev.twitch.tv/docs/v5/reference/users

and https://dev.twitch.tv/docs/v5/reference/streams

First you'll need to Register an application

From that you'll need to get your Client-ID.

The one in this example is not a real

TWITCH_STREAM_API_ENDPOINT_V5 = "https://api.twitch.tv/kraken/streams/{}"

API_HEADERS = {
    'Client-ID' : 'tqanfnani3tygk9a9esl8conhnaz6wj',
    'Accept' : 'application/vnd.twitchtv.v5+json',
}


def checkUser(user): #returns true if online, false if not
    url = TWITCH_STREAM_API_ENDPOINT_V5.format(userID)

    try:
        req = reqSession.get(url, headers=API_HEADERS)
        jsondata = req.json()
        if 'stream' in jsondata:
            if jsondata['stream'] is not None: #stream is online
                return True
            else:
                return False
    except Exception as e:
        print("Error checking user: ", e)
        return False
查看更多
混吃等死
4楼-- · 2020-06-19 18:13

RocketDonkey's fine answer seems to be outdated by now, so I'm posting an updated answer for people like me who stumble across this SO-question with google. You can check the status of the user EXAMPLEUSER by parsing

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

The entry "stream":null will tell you that the user if offline, if that user exists. Here is a small Python script which you can use on the commandline that will print 0 for user online, 1 for user offline and 2 for user not found.

#!/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
查看更多
够拽才男人
5楼-- · 2020-06-19 18:16

Use the twitch api with your client_id as a parameter, then parse the json:

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

Twitch Client Id is explained here: https://dev.twitch.tv/docs#client-id, you need to register a developer application: https://www.twitch.tv/kraken/oauth2/clients/new

Example:

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
查看更多
Ridiculous、
6楼-- · 2020-06-19 18:25

Yes. You can use Twitch API call https://api.twitch.tv/kraken/streams/YOUR_CHANNEL_NAME and parse result to check if it's live.

The below function returns a streamID if the channel is live, else returns -1.

import urllib2, json, sys
TwitchChannel = 'A_Channel_Name'
def IsTwitchLive(): # return the stream Id is streaming else returns -1
    url = str('https://api.twitch.tv/kraken/streams/'+TwitchChannel)
    streamID = -1
    respose = urllib2.urlopen(url)
    html = respose.read()
    data = json.loads(html)
    try:
       streamID = data['stream']['_id']
    except:
       streamID = -1
    return int(streamID)
查看更多
登录 后发表回答