Skip to content

Instantly share code, notes, and snippets.

@sms151
Forked from Xeroday/Twitch.py
Last active January 28, 2017 17:30
Show Gist options
  • Save sms151/8366976 to your computer and use it in GitHub Desktop.
Save sms151/8366976 to your computer and use it in GitHub Desktop.
import requests
import subprocess
import json
import sys
import threading
import time
from Queue import Queue
numberOfViewers = int(sys.argv[1])
builderThreads = int(sys.argv[2])
startTime = time.time()
numberOfSockets = 0
concurrent = 25
urls = []
urlsUsed = []
def getURL():
output = subprocess.Popen(["livestreamer", "twitch.tv/TheClawPaw", "-j"], stdout=subprocess.PIPE).communicate()[0]
return json.loads(output)['streams']['worst']['url']
def build():
global numberOfSockets
global numberOfViewers
while True:
if numberOfSockets < numberOfViewers:
numberOfSockets += 1
print "Building viewers " + str(numberOfSockets) + "/" + str(numberOfViewers)
urls.append(getURL())
def view():
global numberOfSockets
while True:
url=q.get()
requests.head(url)
if (url in urlsUsed):
urls.remove(url)
urlsUsed.remove(url)
numberOfSockets -= 1
else:
urlsUsed.append(url)
q.task_done()
if __name__ == '__main__':
for i in range(0, builderThreads):
threading.Thread(target = build).start()
while True:
while (numberOfViewers != numberOfSockets):
time.sleep(1)
q=Queue(concurrent*2)
for i in range(concurrent):
try:
t=threading.Thread(target=view)
t.daemon=True
t.start()
except:
print 'thread error'
try:
for url in urls:
print url
q.put(url.strip())
q.join()
except KeyboardInterrupt:
sys.exit(1)
@lfaoro
Copy link

lfaoro commented Jan 24, 2014

Did you manage to get this to work? I ended up with the error: ValueError: No JSON object could be decoded

@HEROTERRALTD
Copy link

Ifaoro did you installed the livestreamer binary ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment