# -*- coding: utf-8 -*- ''' Genesis Add-on Copyright (C) 2015 lambda -Mofidied by The Crew -Copyright (C) 2019 The Crew This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ''' import cookielib import os import re import sys import time import traceback import urllib import urllib2 import xbmc import xbmcaddon import xbmcgui from resources.lib.modules import client, control profile = functions_dir = xbmc.translatePath(xbmcaddon.Addon().getAddonInfo('profile').decode('utf-8')) try: from sqlite3 import dbapi2 as database except Exception: from pysqlite2 import dbapi2 as database def fetch(regex): try: cacheFile = os.path.join(control.dataPath, 'regex.db') dbcon = database.connect(cacheFile) dbcur = dbcon.cursor() dbcur.execute("SELECT * FROM regex WHERE regex = '%s'" % regex) regex = dbcur.fetchone()[1] return regex except Exception: return def insert(data): try: control.makeFile(control.dataPath) cacheFile = os.path.join(control.dataPath, 'regex.db') dbcon = database.connect(cacheFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS regex (""regex TEXT, ""response TEXT, ""UNIQUE(regex)"");") for i in data: try: dbcur.execute("INSERT INTO regex Values (?, ?)", (i['regex'], i['response'])) except Exception: pass dbcon.commit() except Exception: return def clear(): try: cacheFile = os.path.join(control.dataPath, 'regex.db') dbcon = database.connect(cacheFile) dbcur = dbcon.cursor() dbcur.execute("DROP TABLE IF EXISTS regex") dbcur.execute("VACUUM") dbcon.commit() except Exception: pass def resolve(regex): try: vanilla = re.compile('(.+)', re.MULTILINE | re.DOTALL).findall(regex)[0] cddata = re.compile('<\!\[CDATA\[(.+?)\]\]>', re.MULTILINE | re.DOTALL).findall(regex) for i in cddata: regex = regex.replace('', urllib.quote_plus(i)) regexs = re.compile('(.+)', re.MULTILINE | re.DOTALL).findall(regex)[0] regexs = re.compile('(.+?)', re.MULTILINE | re.DOTALL).findall(regexs) regexs = [re.compile('<(.+?)>(.*?)', re.MULTILINE | re.DOTALL).findall(i) for i in regexs] regexs = [dict([(client.replaceHTMLCodes(x[0]), client.replaceHTMLCodes(urllib.unquote_plus(x[1]))) for x in i]) for i in regexs] regexs = [(i['name'], i) for i in regexs] regexs = dict(regexs) url = regex.split('', 1)[0].strip() url = client.replaceHTMLCodes(url) url = url.encode('utf-8') r = getRegexParsed(regexs, url) try: ln = '' ret = r[1] listrepeat = r[2]['listrepeat'] regexname = r[2]['name'] for obj in ret: try: item = listrepeat for i in range(len(obj)+1): item = item.replace('[%s.param%s]' % (regexname, str(i)), obj[i-1]) item2 = vanilla for i in range(len(obj)+1): item2 = item2.replace('[%s.param%s]' % (regexname, str(i)), obj[i-1]) item2 = re.compile('(.+?)', re.MULTILINE | re.DOTALL).findall(item2) item2 = [x for x in item2 if not '%s' % regexname in x] item2 = ''.join(item2) ln += '\n%s\n%s\n' % (item, item2) except Exception: pass return ln except Exception: pass if r[1] is True: return r[0] except Exception: return #TC 2/01/19 started class NoRedirection(urllib2.HTTPErrorProcessor): def http_response(self, request, response): return response https_response = http_response # 0,1,2 = URL, regexOnly, CookieJarOnly def getRegexParsed( regexs, url, cookieJar=None, forCookieJarOnly=False, recursiveCall=False, cachedPages={}, rawPost=False, cookie_jar_file=None): # cachedPages = {} # print 'url',url doRegexs = re.compile('\$doregex\[([^\]]*)\]').findall(url) setresolved = True for k in doRegexs: if k in regexs: # print 'processing ' ,k m = regexs[k] # print m cookieJarParam = False if 'cookiejar' in m: # so either create or reuse existing jar # print 'cookiejar exists',m['cookiejar'] cookieJarParam = m['cookiejar'] if '$doregex' in cookieJarParam: cookieJar = getRegexParsed(regexs, m['cookiejar'], cookieJar, True, True, cachedPages) cookieJarParam = True else: cookieJarParam = True # print 'm[cookiejar]',m['cookiejar'],cookieJar if cookieJarParam: if cookieJar is None: # print 'create cookie jar' cookie_jar_file = None if 'open[' in m['cookiejar']: cookie_jar_file = m['cookiejar'].split('open[')[1].split(']')[0] cookieJar = getCookieJar(cookie_jar_file) if cookie_jar_file: saveCookieJar(cookieJar, cookie_jar_file) elif 'save[' in m['cookiejar']: cookie_jar_file = m['cookiejar'].split('save[')[1].split(']')[0] saveCookieJar(cookieJar, cookie_jar_file) if m['page'] and '$doregex' in m['page']: pg = getRegexParsed(regexs, m['page'], cookieJar, recursiveCall=True, cachedPages=cachedPages) if len(pg) == 0: pg = 'http://regexfailed' m['page'] = pg if 'setcookie' in m and m['setcookie'] and '$doregex' in m['setcookie']: m['setcookie'] = getRegexParsed(regexs, m['setcookie'], cookieJar, recursiveCall=True, cachedPages=cachedPages) if 'appendcookie' in m and m['appendcookie'] and '$doregex' in m['appendcookie']: m['appendcookie'] = getRegexParsed(regexs, m['appendcookie'], cookieJar, recursiveCall=True, cachedPages=cachedPages) if 'post' in m and '$doregex' in m['post']: m['post'] = getRegexParsed(regexs, m['post'], cookieJar, recursiveCall=True, cachedPages=cachedPages) if 'rawpost' in m and '$doregex' in m['rawpost']: m['rawpost'] = getRegexParsed(regexs, m['rawpost'], cookieJar, recursiveCall=True, cachedPages=cachedPages, rawPost=True) # print 'rawpost is now',m['rawpost'] if 'rawpost' in m and '$epoctime$' in m['rawpost']: m['rawpost'] = m['rawpost'].replace('$epoctime$', getEpocTime()) if 'rawpost' in m and '$epoctime2$' in m['rawpost']: m['rawpost'] = m['rawpost'].replace('$epoctime2$', getEpocTime2()) link = '' if m['page'] and m['page'] in cachedPages and 'ignorecache' not in m and forCookieJarOnly is False: # print 'using cache page',m['page'] link = cachedPages[m['page']] else: if m['page'] and not m['page'] == '' and m['page'].startswith('http'): if '$epoctime$' in m['page']: m['page'] = m['page'].replace('$epoctime$', getEpocTime()) if '$epoctime2$' in m['page']: m['page'] = m['page'].replace('$epoctime2$', getEpocTime2()) # print 'Ingoring Cache',m['page'] page_split = m['page'].split('|') pageUrl = page_split[0] header_in_page = None if len(page_split) > 1: header_in_page = page_split[1] current_proxies = urllib2.ProxyHandler(urllib2.getproxies()) # print 'getting pageUrl',pageUrl req = urllib2.Request(pageUrl) if 'proxy' in m: proxytouse = m['proxy'] if pageUrl[:5] == "https": proxy = urllib2.ProxyHandler({'https': proxytouse}) else: proxy = urllib2.ProxyHandler({'http': proxytouse}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1') proxytouse = None if 'referer' in m: req.add_header('Referer', m['referer']) if 'accept' in m: req.add_header('Accept', m['accept']) if 'agent' in m: req.add_header('User-agent', m['agent']) if 'x-req' in m: req.add_header('X-Requested-With', m['x-req']) if 'x-addr' in m: req.add_header('x-addr', m['x-addr']) if 'x-forward' in m: req.add_header('X-Forwarded-For', m['x-forward']) if 'setcookie' in m: # print 'adding cookie',m['setcookie'] req.add_header('Cookie', m['setcookie']) if 'appendcookie' in m: # print 'appending cookie to cookiejar',m['appendcookie'] cookiestoApend = m['appendcookie'] cookiestoApend = cookiestoApend.split(';') for h in cookiestoApend: n, v = h.split('=') w, n = n.split(':') ck = cookielib.Cookie( version=0, name=n, value=v, port=None, port_specified=False, domain=w, domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) cookieJar.set_cookie(ck) if 'origin' in m: req.add_header('Origin', m['origin']) if header_in_page: header_in_page = header_in_page.split('&') for h in header_in_page: n, v = h.split('=') req.add_header(n, v) if cookieJar is not None: # print 'cookieJarVal',cookieJar cookie_handler = urllib2.HTTPCookieProcessor(cookieJar) opener = urllib2.build_opener( cookie_handler, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) urllib2.install_opener(opener) # print 'noredirect','noredirect' in m if 'noredirect' in m: opener = urllib2.build_opener( cookie_handler, NoRedirection, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) urllib2.install_opener(opener) elif 'noredirect' in m: opener = urllib2.build_opener( NoRedirection, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) urllib2.install_opener(opener) if 'connection' in m: # print '..........................connection//////.',m['connection'] from keepalive import HTTPHandler keepalive_handler = HTTPHandler() opener = urllib2.build_opener(keepalive_handler) urllib2.install_opener(opener) # print 'after cookie jar' post = None if 'post' in m: postData = m['post'] # if '$LiveStreamRecaptcha' in postData: # (captcha_challenge,catpcha_word,idfield)=processRecaptcha(m['page'],cookieJar) # if captcha_challenge: # postData=postData.replace('$LiveStreamRecaptcha','manual_recaptcha_challenge_field:'+captcha_challenge+',recaptcha_response_field:'+catpcha_word+',id:'+idfield) splitpost = postData.split(',') post = {} for p in splitpost: n = p.split(':')[0] v = p.split(':')[1] post[n] = v post = urllib.urlencode(post) if 'rawpost' in m: post = m['rawpost'] link = '' try: if post: response = urllib2.urlopen(req, post) else: response = urllib2.urlopen(req) if response.info().get('Content-Encoding') == 'gzip': from StringIO import StringIO import gzip buf = StringIO(response.read()) f = gzip.GzipFile(fileobj=buf) link = f.read() else: link = response.read() if 'proxy' in m and current_proxies is not None: urllib2.install_opener(urllib2.build_opener(current_proxies)) link = javascriptUnEscape(link) # print repr(link) # print link This just print whole webpage in LOG if 'includeheaders' in m: # link+=str(response.headers.get('Set-Cookie')) link += '$$HEADERS_START$$:' for b in response.headers: link += b+':'+response.headers.get(b)+'\n' link += '$$HEADERS_END$$:' # print link response.close() except Exception: pass cachedPages[m['page']] = link # print link # print 'store link for',m['page'],forCookieJarOnly if forCookieJarOnly: return cookieJar # do nothing elif m['page'] and not m['page'].startswith('http'): if m['page'].startswith('$pyFunction:'): val = doEval(m['page'].split('$pyFunction:')[1], '', cookieJar, m) if forCookieJarOnly: return cookieJar # do nothing link = val link = javascriptUnEscape(link) else: link = m['page'] if '$doregex' in m['expres']: m['expres'] = getRegexParsed(regexs, m['expres'], cookieJar, recursiveCall=True, cachedPages=cachedPages) if not m['expres'] == '': # print 'doing it ',m['expres'] if '$LiveStreamCaptcha' in m['expres']: val = askCaptcha(m, link, cookieJar) # print 'url and val',url,val url = url.replace("$doregex[" + k + "]", val) elif m['expres'].startswith('$pyFunction:') or '#$pyFunction' in m['expres']: # print 'expeeeeeeeeeeeeeeeeeee',m['expres'] val = '' if m['expres'].startswith('$pyFunction:'): val = doEval(m['expres'].split('$pyFunction:')[1], link, cookieJar, m) else: val = doEvalFunction(m['expres'], link, cookieJar, m) if 'ActivateWindow' in m['expres']: return if forCookieJarOnly: return cookieJar # do nothing if 'listrepeat' in m: listrepeat = m['listrepeat'] return listrepeat, eval(val), m, regexs, cookieJar try: url = url.replace(u"$doregex[" + k + "]", val) except Exception: url = url.replace("$doregex[" + k + "]", val.decode("utf-8")) else: if 'listrepeat' in m: listrepeat = m['listrepeat'] ret = re.findall(m['expres'], link) return listrepeat, ret, m, regexs val = '' if not link == '': # print 'link',link reg = re.compile(m['expres']).search(link) try: val = reg.group(1).strip() except Exception: traceback.print_exc() elif m['page'] == '' or m['page'] is None: val = m['expres'] if rawPost: # print 'rawpost' val = urllib.quote_plus(val) if 'htmlunescape' in m: # val=urllib.unquote_plus(val) import HTMLParser val = HTMLParser.HTMLParser().unescape(val) try: url = url.replace("$doregex[" + k + "]", val) except Exception: url = url.replace("$doregex[" + k + "]", val.decode("utf-8")) # print 'ur',url # return val else: url = url.replace("$doregex[" + k + "]", '') if '$epoctime$' in url: url = url.replace('$epoctime$', getEpocTime()) if '$epoctime2$' in url: url = url.replace('$epoctime2$', getEpocTime2()) if '$GUID$' in url: import uuid url = url.replace('$GUID$', str(uuid.uuid1()).upper()) if '$get_cookies$' in url: url = url.replace('$get_cookies$', getCookiesString(cookieJar)) if recursiveCall: return url # print 'final url',repr(url) if url == "": return else: return url, setresolved iid = 0 def askCaptcha(m, html_page, cookieJar): global iid iid += 1 expre = m['expre'] page_url = m['page'] captcha_regex = re.compile('\$LiveStreamCaptcha\[([^\]]*)\]').findall(expre)[0] captcha_url = re.compile(captcha_regex).findall(html_page)[0] print expre, captcha_regex, captcha_url if not captcha_url.startswith("http"): page_ = 'http://'+"".join(page_url.split('/')[2:3]) if captcha_url.startswith("/"): captcha_url = page_+captcha_url else: captcha_url = page_+'/'+captcha_url local_captcha = os.path.join(profile, str(iid)+"captcha.jpg") localFile = open(local_captcha, "wb") print(' c capurl', captcha_url) req = urllib2.Request(captcha_url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1') if 'refer' in m: req.add_header('Referer', m['refer']) if 'agent' in m: req.add_header('User-agent', m['agent']) if 'setcookie' in m: print('adding cookie', m['setcookie']) req.add_header('Cookie', m['setcookie']) # cookie_handler = urllib2.HTTPCookieProcessor(cookieJar) # opener = urllib2.build_opener(cookie_handler, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) # opener = urllib2.install_opener(opener) urllib2.urlopen(req) response = urllib2.urlopen(req) localFile.write(response.read()) response.close() localFile.close() solver = InputWindow(captcha=local_captcha) solution = solver.get() return solution class InputWindow(xbmcgui.WindowDialog): def __init__(self, *args, **kwargs): self.cptloc = kwargs.get('captcha') self.img = xbmcgui.ControlImage(335, 30, 624, 60, self.cptloc) self.addControl(self.img) self.kbd = xbmc.Keyboard() def get(self): self.show() time.sleep(2) self.kbd.doModal() if (self.kbd.isConfirmed()): text = self.kbd.getText() self.close() return text self.close() return False def get_unwise(str_eval): page_value = "" try: ss = "w,i,s,e=("+str_eval+')' exec (ss) page_value = unwise_func(w, i, s, e) except Exception: traceback.print_exc(file=sys.stdout) # print 'unpacked',page_value return page_value def unwise_func(w, i, s, e): lIll = 0 ll1I = 0 Il1l = 0 ll1l = [] l1lI = [] while True: if (lIll < 5): l1lI.append(w[lIll]) elif (lIll < len(w)): ll1l.append(w[lIll]) lIll += 1 if (ll1I < 5): l1lI.append(i[ll1I]) elif (ll1I < len(i)): ll1l.append(i[ll1I]) ll1I += 1 if (Il1l < 5): l1lI.append(s[Il1l]) elif (Il1l < len(s)): ll1l.append(s[Il1l]) Il1l += 1 if (len(w) + len(i) + len(s) + len(e) == len(ll1l) + len(l1lI) + len(e)): break lI1l = ''.join(ll1l) # .join(''); I1lI = ''.join(l1lI) # .join(''); ll1I = 0 l1ll = [] for lIll in range(0, len(ll1l), 2): # print 'array i',lIll,len(ll1l) ll11 = -1 if (ord(I1lI[ll1I]) % 2): ll11 = 1 # print 'val is ', lI1l[lIll: lIll+2] l1ll.append(chr(int(lI1l[lIll: lIll+2], 36) - ll11)) ll1I += 1 if (ll1I >= len(l1lI)): ll1I = 0 ret = ''.join(l1ll) if 'eval(function(w,i,s,e)' in ret: # print 'STILL GOing' ret = re.compile('eval\(function\(w,i,s,e\).*}\((.*?)\)').findall(ret)[0] return get_unwise(ret) else: # print 'FINISHED' return ret def get_unpacked(page_value, regex_for_text='', iterations=1, total_iteration=1): try: if page_value.startswith("http"): page_value = getUrl(page_value) if regex_for_text and len(regex_for_text) > 0: try: page_value = re.compile(regex_for_text).findall(page_value)[0] # get the js variable except Exception: return 'NOTPACKED' page_value = unpack(page_value, iterations, total_iteration) except Exception: page_value = 'UNPACKEDFAILED' traceback.print_exc(file=sys.stdout) if 'sav1live.tv' in page_value: page_value = page_value.replace('sav1live.tv', 'sawlive.tv') # quick fix some bug somewhere return page_value def unpack(sJavascript, iteration=1, totaliterations=2): if sJavascript.startswith('var _0xcb8a='): aSplit = sJavascript.split('var _0xcb8a=') ss = "myarray="+aSplit[1].split("eval(")[0] exec(ss) a1 = 62 c1 = int(aSplit[1].split(",62,")[1].split(',')[0]) p1 = myarray[0] k1 = myarray[3] with open('temp file'+str(iteration)+'.js', "wb") as filewriter: filewriter.write(str(k1)) # aa=1/0 else: if "rn p}('" in sJavascript: aSplit = sJavascript.split("rn p}('") else: aSplit = sJavascript.split("rn A}('") p1, a1, c1, k1 = ('', '0', '0', '') ss = "p1,a1,c1,k1=('"+aSplit[1].split(".spli")[0]+')' exec(ss) k1 = k1.split('|') aSplit = aSplit[1].split("))'") e = '' d = '' # 32823 sUnpacked1 = str(__unpack(p1, a1, c1, k1, e, d, iteration)) if iteration >= totaliterations: return sUnpacked1 # .replace('\\\\', '\\') else: return unpack(sUnpacked1, iteration+1) def __unpack(p, a, c, k, e, d, iteration, v=1): # with open('before file'+str(iteration)+'.js', "wb") as filewriter: # filewriter.write(str(p)) while (c >= 1): c = c - 1 if (k[c]): aa = str(__itoaNew(c, a)) if v == 1: p = re.sub('\\b' + aa + '\\b', k[c], p) # THIS IS Bloody slow! else: p = findAndReplaceWord(p, aa, k[c]) # p=findAndReplaceWord(p,aa,k[c]) # with open('after file'+str(iteration)+'.js', "wb") as filewriter: # filewriter.write(str(p)) return p def __itoa(num, radix): # print 'num red',num, radix result = "" if num == 0: return '0' while num > 0: result = "0123456789abcdefghijklmnopqrstuvwxyz"[num % radix] + result num /= radix return result def __itoaNew(cc, a): aa = "" if cc < a else __itoaNew(int(cc / a), a) cc = (cc % a) bb = chr(cc + 29) if cc > 35 else str(__itoa(cc, 36)) return aa+bb def findAndReplaceWord(source_str, word_to_find, replace_with): splits = None splits = source_str.split(word_to_find) if len(splits) > 1: new_string = [] current_index = 0 for current_split in splits: # print 'here',i new_string.append(current_split) val = word_to_find # by default assume it was wrong to split # if its first one and item is blank then check next item is valid or not if current_index == len(splits)-1: val = '' # last one nothing to append normally else: if len(current_split) == 0: # if blank check next one with current split value if (len(splits[current_index+1]) == 0 and word_to_find[0].lower() not in 'abcdefghijklmnopqrstuvwxyz1234567890_') or (len(splits[current_index+1]) > 0 and splits[current_index+1][0].lower() not in 'abcdefghijklmnopqrstuvwxyz1234567890_'): # first just just check next val = replace_with # not blank, then check current endvalue and next first value else: if (splits[current_index][-1].lower() not in 'abcdefghijklmnopqrstuvwxyz1234567890_') and ((len(splits[current_index+1]) == 0 and word_to_find[0].lower() not in 'abcdefghijklmnopqrstuvwxyz1234567890_') or (len(splits[current_index+1]) > 0 and splits[current_index+1][0].lower() not in 'abcdefghijklmnopqrstuvwxyz1234567890_')): # first just just check next val = replace_with new_string.append(val) current_index += 1 # aaaa=1/0 source_str = ''.join(new_string) return source_str def re_me(data, re_patten): match = '' m = re.search(re_patten, data) if m is not None: match = m.group(1) else: match = '' return match def getCookiesString(cookieJar): try: cookieString = "" for index, cookie in enumerate(cookieJar): cookieString += cookie.name + "=" + cookie.value + ";" except Exception: pass # print 'cookieString',cookieString return cookieString def saveCookieJar(cookieJar, COOKIEFILE): try: complete_path = os.path.join(profile, COOKIEFILE) cookieJar.save(complete_path, ignore_discard=True) except Exception: pass def getCookieJar(COOKIEFILE): cookieJar = None if COOKIEFILE: try: complete_path = os.path.join(profile, COOKIEFILE) cookieJar = cookielib.LWPCookieJar() cookieJar.load(complete_path, ignore_discard=True) except Exception: cookieJar = None if not cookieJar: cookieJar = cookielib.LWPCookieJar() return cookieJar def doEval(fun_call, page_data, Cookie_Jar, m): ret_val = '' # print fun_call if functions_dir not in sys.path: sys.path.append(functions_dir) # print fun_call try: py_file = 'import '+fun_call.split('.')[0] # print py_file,sys.path exec(py_file) # print 'done' except Exception: # print 'error in import' traceback.print_exc(file=sys.stdout) # print 'ret_val='+fun_call exec ('ret_val='+fun_call) # print ret_val # exec('ret_val=1+1') try: return str(ret_val) except Exception: return ret_val def doEvalFunction(fun_call, page_data, Cookie_Jar, m): # print 'doEvalFunction' ret_val = '' if functions_dir not in sys.path: sys.path.append(functions_dir) f = open(functions_dir+"/LSProdynamicCode.py", "w") f.write(fun_call) f.close() import LSProdynamicCode ret_val = LSProdynamicCode.GetLSProData(page_data, Cookie_Jar, m) try: return str(ret_val) except Exception: return ret_val def getUrl(url, cookieJar=None, post=None, timeout=20, headers=None, noredir=False): cookie_handler = urllib2.HTTPCookieProcessor(cookieJar) if noredir: opener = urllib2.build_opener( NoRedirection, cookie_handler, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) else: opener = urllib2.build_opener(cookie_handler, urllib2.HTTPBasicAuthHandler(), urllib2.HTTPHandler()) # opener = urllib2.install_opener(opener) req = urllib2.Request(url) req.add_header( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36') if headers: for h, hv in headers: req.add_header(h, hv) response = opener.open(req, post, timeout=timeout) link = response.read() response.close() return link def get_decode(str, reg=None): if reg: str = re.findall(reg, str)[0] s1 = urllib.unquote(str[0: len(str)-1]) t = '' for i in range(len(s1)): t += chr(ord(s1[i]) - s1[len(s1)-1]) t = urllib.unquote(t) # print t return t def javascriptUnEscape(str): js = re.findall('unescape\(\'(.*?)\'', str) # print 'js',js if (js is not None) and len(js) > 0: for j in js: # print urllib.unquote(j) str = str.replace(j, urllib.unquote(j)) return str def getEpocTime(): import time return str(int(time.time()*1000)) def getEpocTime2(): import time return str(int(time.time()))