Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2014
727
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.83 KB | None | 0 0
  1. import argparse
  2. import shelve
  3. import json
  4.  
  5. try:
  6.     from urllib.request import urlopen
  7.     from urllib.parse import urlencode
  8. except ImportError:
  9.     from urllib2 import urlopen
  10.     from urllib import urlencode
  11.  
  12. DATAFILE = '.data'
  13.  
  14.  
  15. def parse_streams(count, **params):
  16.     streams = []
  17.     url = 'https://api.twitch.tv/kraken/streams?%s'%urlencode(params)
  18.     count_pages = count // 100
  19.     while True:
  20.         data = urlopen(url).read()
  21.         data = data.decode('utf-8')
  22.         info = json.loads(data)
  23.         streams += info['streams']
  24.         if len(info['streams']) == 0 or info['streams'][len(info['streams']) - 1]['viewers'] == 0 or count_pages == 0:
  25.             break
  26.         url = info['_links']['next']
  27.         count_pages -= 1
  28.  
  29.     for i in range(len(streams)):
  30.         if streams[-1]['viewers'] == 0:
  31.             del streams[-1]
  32.     if len(streams) > count:
  33.         streams = streams[0:count]
  34.     return streams
  35.  
  36.  
  37. def get_by_favs(favs):
  38.     favorites = ([], [])
  39.     url = 'https://api.twitch.tv/kraken/streams/'
  40.     for fav in favs:
  41.         data = urlopen(url + fav).read()
  42.         data = data.decode('utf-8')
  43.         info = json.loads(data)['stream']
  44.         if info != None:
  45.             favorites[0].append(info)
  46.         else:
  47.             favorites[1].append(fav)
  48.     return favorites
  49.  
  50.  
  51. def store_favs(favs, data):
  52.     if data.get('favs') == None:
  53.         data['favs'] = []
  54.     if favs != None:
  55.         for fav in favs:
  56.             streamer = fav.replace(
  57.                 'http://www.twitch.tv/', '').replace('/', '')
  58.             if streamer not in data['favs']:
  59.                 data['favs'] = data['favs'] + [streamer]
  60.  
  61.  
  62. def del_favs(favs, data):
  63.     if favs != None:
  64.         for fav in favs:
  65.             if fav in data['favs']:
  66.                 delIndex = data['favs'].index(fav)
  67.                 data['favs'] = data['favs'][
  68.                     0:delIndex] + data['favs'][-1:delIndex:-1]
  69.  
  70.  
  71. def table_streams(streams, game=None):
  72.     max_name = 0
  73.     max_viewers = 0
  74.     table_streams = []
  75.     for stream in streams:
  76.         max_name = max(max_name, len(stream['channel']['display_name']))
  77.     if game != None:
  78.         table_streams.append([('{:>%d}'%max_name).format(game), ''])
  79.     for stream in streams:
  80.         table_streams.append(
  81.             [('{:<%d} ' % (max_name)).format(stream['channel']['display_name']),
  82.              '{}'.format(stream['viewers'])])
  83.     return table_streams
  84.  
  85.  
  86. def main():
  87.     parser = argparse.ArgumentParser()
  88.     parser.add_argument(
  89.         '-a', '--add', action='append', help='Add ur favorite player')
  90.     parser.add_argument(
  91.         '-d', '--delete', action='append', help='Delete ur unloved player')
  92.     parser.add_argument(
  93.         '-g', '--game', action='store', help='Sorted streams by game')
  94.     parser.add_argument(
  95.         '-f', '--favs', action='store_true', help='Sorted streams by game')
  96.     parser.add_argument('-c', '--count', type=int, action='store')
  97.  
  98.     args = parser.parse_args()
  99.  
  100.     data = shelve.open(DATAFILE)
  101.     store_favs(args.add, data)
  102.     del_favs(args.delete, data)
  103.  
  104.     if args.count == None:
  105.         args.count = -1
  106.  
  107.     if args.game != None:
  108.         streams = parse_streams(args.count, game=args.game, limit=100)
  109.         buf_streams = table_streams(streams, args.game)
  110.         for stream in buf_streams:
  111.             print(stream[0] + stream[1])
  112.     if args.favs == True:
  113.         favorites = get_by_favs(data['favs'])
  114.         buf_streams = table_streams(favorites[0])
  115.         if buf_streams == 0:
  116.             print(
  117.                 'zZZzzz... Ugh, noone of ur favorites streaming right now :(')
  118.         for stream in buf_streams:
  119.             print(stream[0] + stream[1])
  120.         for stream in favorites[1]:
  121.             print('%s .. Offline' % stream)
  122.  
  123.     data.close()
  124.  
  125. if __name__ == '__main__':
  126.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement