All pastes #1804027 Raw Edit

rai26.py

public python v1 · immutable
#1804027 ·published 2010-02-20 20:56 UTC
rendered paste body
import sysimport reimport base64import randomimport subprocessimport httplib#USAGE python rai.py [-vlcdir=<dir>][-uagent=<user-agent>] [channel]##channel = RaiUno | RaiDue | RaiTre | RaiQuattro | RaiNews24 | RaiSport+ | RaiStoria | RaiEdu | RaiGulp#          RaiSatExtra | RaiSatPremium | RaiSatCinema | RaiSatYoyovlcdir	= ""stream	= "http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983"agent	= "Mozilla/5.0 (X11; U; Linux x86_64; it; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7"re_url	= "^http://(?P<host>[a-zA-Z0-9]*\.([a-zA-Z0-9]*\.)+[a-zA-Z0-9]*)(?P<path>/[\w\-\+\~\%\#\.\/]*)\?cont\=(?P<chanid>\d*)"re_date = "^(?P<day>\d*)-(?P<month>\d*)-(?P<year>\d*)\s(?P<hour>\d*):(?P<minutes>\d*):(?P<seconds>\d*)"urls = {	"RaiUno":			"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=983",	"RaiDue":			"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=984",	"RaiTre":			"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=986",	"RaiQuattro":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=75708",	"RaiNews24":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=1",	"RaiSport+":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4145",	"RaiStoria":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24269",	"RaiEdu":			"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=24268",	"RaiGulp":			"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=4119",	"RaiSatExtra":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72382",	"RaiSatPremium":	"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72383",	"RaiSatCinema":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72381",	"RaiSatYoyo":		"http://mediapolis.rai.it/relinker/relinkerServlet.htm?cont=72384",}def encode1(token):	rnd = random.randint(0,30)		encoded = ""	for ch in token:		encoded += chr(ord(ch)^rnd)	return encoded+";"+str(rnd)def encode2(token, key="errore di calcolo"):	i = 0	j = 0	encoded = ""	for ch in token:		encoded += chr(ord(token[i]) ^ ord(key[j]))		i += 1		j = (j+1)%17	return encoded	def encode3(token):	return base64.encodestring(str.encode(token)).decode()	for arg in sys.argv[1:]:	if( arg.startswith("-") ):		match_parm = re.match("^-(\w*)=(.*)", arg)		if type(match_parm).__name__ == "NoneType":			print("WARNING: "+arg+" is not a valid parms")			continue					if( match_parm.groups()[0] == "vlcdir" ):			vlcdir = match_parm.groups()[1]		elif match_parm.groups()[0] == "uagent":			agent = match_parm.groups()[1]		else:			print("WARNING: unknow argument ("+match_parm.groups()[0]+")")	else:		try:			stream = urls[arg]		except:			stream = urls["RaiUno"]		breakmatch_url = re.match(re_url, stream).groupdict()host = match_url["host"] path = match_url["path"]chan = match_url["chanid"]date_connection = httplib.HTTPConnection("videowall.rai.it")date_connection.putrequest("GET", "/cgi-bin/date")date_connection.putheader("User-Agent", agent)date_connection.endheaders()date_response = date_connection.getresponse().read()date_connection.close();date = bytes.decode(date_response[:len(date_response)-1])match_date = re.match(re_date, date).groupdict()day		= match_date["day"]month	= match_date["month"]year	= match_date["year"]hour	= match_date["hour"]minutes	= match_date["minutes"]seconds	= match_date["seconds"]rnd1 = str(random.randint(0, 1234))rnd2 = str(random.randint(0, 1234))token = year+";"+chan+";"+day+"-"+month+"-"+rnd1+"-"+hour+"-"+minutes+"-"+seconds+"-"+rnd2ttAuth = encode3(encode2(encode1(token)))print(ttAuth)asx_connection = httplib.HTTPConnection(host)asx_connection.putrequest("POST", path+"?cont="+chan)asx_connection.putheader("User-Agent", agent)asx_connection.putheader("Connection", "keep-alive")asx_connection.putheader("Keep-Alive", "300")asx_connection.putheader("viaurl", "www.rai.tv")asx_connection.putheader("ttAuth", ttAuth)asx_connection.putheader("Content-Length","0")asx_connection.putheader("Content-Type","application/x-www-form-urlencoded")asx_connection.endheaders()asx_response = asx_connection.getresponse().read()asx_connection.close()asx = bytes.decode(asx_response)asx = re.compile("\n").sub(" ", asx)mms = re.match("^(.*)(?P<mms>mms://.*)\"", asx).groupdict()["mms"]subprocess.call([vlcdir+"vlc", "--http-user-agent=\""+agent+"\"", mms])