Is There Any Way To Check if a Twitch Stream Is Live Using Python?

后端 未结 7 480
被撕碎了的回忆
被撕碎了的回忆 2021-02-04 18:44

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?

I\'m not sure why my app engine tag was removed, but this

7条回答
  •  傲寒
    傲寒 (楼主)
    2021-02-04 19:40

    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
    

提交回复
热议问题