Hey, i want to use Python to create a automatic generate m3u playlist from the website. To get the real playlist it need "cookies"
But with that form cannot build a m3u playlist.
That's why i need to insert into livestreamer with parameters in Python.
HTML Code:
#!/usr/bin/env python
import urllib, urllib2, httplib, sys, StringIO, cookielib, re, socket
from xml.etree import ElementTree
import json
import threading
import time
import os
import subprocess
from livestreamer import Livestreamer
HOST = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:19.0) Gecko/20121213 Firefox/19.0'
class Something:
def logCall(self, message):
print self.__class__.__name__ + ' ' + message
def getJsonFromExtendedAPI(self, url, post_data = None, save_cookie = False, load_cookie = False, cookieFile = None, jsonLoadsResult = False):
result_json = None
customOpeners = []
cj = cookielib.LWPCookieJar()
def urlOpen(req, customOpeners):
if len(customOpeners) > 0:
opener = urllib2.build_opener( *customOpeners )
response = opener.open(req, timeout = 4)
else:
response = urllib2.urlopen(req, timeout = 4)
return response
try:
if cookieFile is not None:
customOpeners.append( urllib2.HTTPCookieProcessor(cj) )
if load_cookie == True:
cj.load(cookieFile, ignore_discard = True)
headers = { 'User-Agent' : HOST }
data = urllib.urlencode(post_data)
reqUrl = urllib2.Request(url, data, headers)
failedCounter = 0
while failedCounter < 50:
try:
raw_json = urlOpen(reqUrl, customOpeners)
result_json = raw_json.read()
if jsonLoadsResult == True:
result_json = json.loads(result_json)
break
except (httplib.IncompleteRead, socket.timeout) as ex:
failedCounter = failedCounter + 1
self.logCall('getJsonFromExtendedAPI exception: %s - retrying failedCounter = %s' % (str(ex), failedCounter))
if xbmc.abortRequested:
break
time.sleep(.050)
if cookieFile is not None and save_cookie == True:
cj.save(cookieFile, ignore_discard = True)
except (urllib2.URLError, NameError, ValueError, httplib.BadStatusLine) as ex:
self.logCall('ShowList getJsonFromExtendedAPI exception: %s - aborting!' % str(ex))
return None
return result_json
def getCookieItem(self, cookiefile, item):
ret = ''
if os.path.isfile(cookiefile):
cj = cookielib.LWPCookieJar()
cj.load(cookiefile, ignore_discard = True)
for cookie in cj:
if cookie.name == item:
ret = cookie.value
return ret
sth = Something()
coockie = 'coockie.coock'
try:
id = sys.argv[1]
except:
id = raw_input()
if id == None or id == '':
print "Forgot about cId?"
quit()
print "cId: " + id
#id = 1
data = { 'cid': id}
output = sth.getJsonFromExtendedAPI('http://www.telewizjada.net/get_mainchannel.php', post_data = data, jsonLoadsResult = True)
data = { 'url': output['url'] }
sth.getJsonFromExtendedAPI('http://www.telewizjada.net/set_cookie.php', post_data = data, cookieFile = coockie, save_cookie = True)
data = { 'cid': id }
tmp_url = sth.getJsonFromExtendedAPI('http://www.telewizjada.net/get_channel_url.php', post_data = data, cookieFile = coockie, load_cookie = True, jsonLoadsResult = True)
tmp_url = tmp_url['url']
msec = sth.getCookieItem(coockie, 'msec')
sessid = sth.getCookieItem(coockie, 'sessid')
urlstream = tmp_url.split("?")[0]
subprocess.call(["livestreamer", "hls://hlsvariant://" + urlstream,"--stream-url --http-header Cookie=msec=" + msec + "; sessid=" + sessid])
print "Url: " + urlstream
print "msec: " + msec
print "sessid: " + sessid