source: titan/mediathek/localhoster/waaw.py @ 42882

Last change on this file since 42882 was 41174, checked in by obi, 6 years ago

fix

File size: 6.8 KB
Line 
1
2import re
3import sys
4from lib.net import Net
5
6import re, urllib, json
7from lib import helpers
8import lib.common as common
9
10class WaawResolver(object):
11    name = "waaw"
12    domains = ["waaw.tv", "hqq.watch", "netu.tv", "hqq.tv"]
13    pattern = "(?://|\.)((?:waaw|netu|hqq)\.(?:tv|watch))/(?:watch_video\.php\?v|.+?vid)=([a-zA-Z0-9]+)"
14
15    def __init__(self):
16#        self.net = Net()
17#        self.net = Net(cookie_file='/mnt/network/cookies', http_debug = True)
18        self.net = Net(cookie_file='/mnt/network/cookies', http_debug = False)
19 
20        url = str(sys.argv[1])
21        host = self.get_host_and_id(url)[0]
22        media_id = self.get_host_and_id(url)[1]
23 
24        return self.get_media_url(host, media_id)
25
26    def get_host_and_id(self, url):
27        r = re.search(self.pattern, url, re.I)
28        if r:
29            return r.groups()
30        else:
31            return False
32
33    def get_media_url1(self, host, media_id):
34        web_url = self.get_url(host, media_id)
35        link = self.net.http_GET(web_url).content
36        if 'FILE WAS DELETED' in link:
37            print 'File deleted.'
38        else:
39            video_link = str(re.compile('file[: ]*"(.+?)"').findall(link)[0])
40
41            if len(video_link) > 0:
42                print video_link
43            else:
44                print 'No playable video found.'
45
46    def get_media_url(self, host, media_id):
47        web_url = self.get_url(host, media_id)
48        headers = {'User-Agent': common.FF_USER_AGENT, 'Referer': 'https://waaw.tv/watch_video.php?v=%s&post=1' % media_id}
49        html = self.net.http_GET(web_url, headers=headers).content
50        ret = self.net.save_cookies('/mnt/network/cookies')     
51
52        if html:
53            try:
54                wise = re.search('(eval\s*\(function.*?)</script>', html, re.DOTALL | re.I).groups()[0]
55                data_unwise = self.jswise(wise).replace("\\", "")
56                try: at = re.search('var at\s*=\s*"([^"]+)"', data_unwise, re.I).groups()[0]
57                except: at = ""
58                try: http_referer = re.search('var http_referer\s*=\s*"([^"]+)"', data_unwise, re.I).groups()[0]
59                except: http_referer = ""
60
61                player_url = "http://hqq.watch/sec/player/embed_player.php?iss=&vid=%s&at=%s&autoplayed=yes&referer=on&http_referer=%s&pass=&embed_from=&need_captcha=0&hash_from=" % (media_id, at, http_referer)
62                headers.update({'Referer': web_url})
63                data_player = self.net.http_GET(player_url, headers=headers).content
64                data_unescape = re.findall('document.write\(unescape\("([^"]+)"', data_player)
65
66                data = ""
67                for d in data_unescape:
68                    data += urllib.unquote(d)
69
70                   
71                data_unwise_player = ""
72                wise = ""
73                wise = re.search('(eval\s*\(function.*?)</script>', data_player, re.DOTALL | re.I)
74                if wise:
75                    data_unwise_player = self.jswise(wise.group(1)).replace("\\", "")
76             
77                try: vars_data = re.search('/player/get_md5.php",\s*\{(.*?)\}', data, re.DOTALL | re.I).groups()[0]
78                except: vars_data = ""
79                matches = re.findall('\s*([^:]+):\s*([^,]*)[,"]', vars_data)
80                params = {}
81                for key, value in matches:
82                    if key == "adb":
83                        params[key] = "0/"
84                    elif '"' in value:
85                        params[key] = value.replace('"', '')
86                    else:
87                        try: value_var = re.search('var\s*%s\s*=\s*"([^"]+)"' % value, data, re.I).groups()[0]
88                        except: value_var = ""
89                        if not value_var and data_unwise_player:
90                            try: value_var = re.search('var\s*%s\s*=\s*"([^"]+)"' % value, data_unwise_player, re.I).groups()[0]
91                            except: value_var = ""
92                        params[key] = value_var
93             
94                params = urllib.urlencode(params)
95                headers.update({'X-Requested-With': 'XMLHttpRequest', 'Referer': player_url})
96                data= ""
97                data = self.net.http_GET("http://hqq.watch/player/get_md5.php?" + params, headers=headers).content
98                url_data = json.loads(data)
99                media_url = self.tb(url_data["html5_file"].replace("#", ""))
100                del headers["Referer"]
101#                del headers["X-Requested-With"]
102#                if media_url: return media_url + helpers.append_headers(headers)
103
104                if media_url: print media_url + helpers.append_headers(headers)
105#                headers = {'User-Agent': common.FF_USER_AGENT}
106#                if media_url: print media_url + helpers.append_headers(headers)
107
108
109               
110            except Exception as e:
111#                raise ResolverError(e)
112                 print "errormsg=Video not found 2"       
113#        raise ResolverError('Video not found')
114#        print "errormsg=Video not found"
115
116    def tb(self, b_m3u8_2):
117        j = 0
118        s2 = ""
119        while j < len(b_m3u8_2):
120            s2 += "\\u0" + b_m3u8_2[j:(j + 3)]
121            j += 3
122
123        return s2.decode('unicode-escape').encode('ASCII', 'ignore')
124
125    ## loop2unobfuscated
126    def jswise(self, wise):
127        while True:
128            wise = re.search("var\s.+?\('([^']+)','([^']+)','([^']+)','([^']+)'\)", wise, re.DOTALL)
129            if not wise: break
130            ret = wise = self.js_wise(wise.groups())
131           
132        return ret
133       
134    ## js2python
135    def js_wise(self, wise):
136        w, i, s, e = wise
137
138        v0 = 0;
139        v1 = 0;
140        v2 = 0
141        v3 = [];
142        v4 = []
143
144        while True:
145            if v0 < 5:
146                v4.append(w[v0])
147            elif v0 < len(w):
148                v3.append(w[v0])
149            v0 += 1
150            if v1 < 5:
151                v4.append(i[v1])
152            elif v1 < len(i):
153                v3.append(i[v1])
154            v1 += 1
155            if v2 < 5:
156                v4.append(s[v2])
157            elif v2 < len(s):
158                v3.append(s[v2])
159            v2 += 1
160            if len(w) + len(i) + len(s) + len(e) == len(v3) + len(v4) + len(e): break
161
162        v5 = "".join(v3);
163        v6 = "".join(v4)
164        v1 = 0
165        v7 = []
166
167        for v0 in range(0, len(v3), 2):
168            v8 = -1
169            if ord(v6[v1]) % 2: v8 = 1
170            v7.append(chr(int(v5[v0:v0 + 2], 36) - v8))
171            v1 += 1
172            if v1 >= len(v4): v1 = 0
173           
174        return "".join(v7)
175
176    def get_url2(self, host, media_id):
177        return 'http://vodlocker.com/embed-%s-640x400.html' % media_id
178
179    def get_url(self, host, media_id):
180#        return self._default_get_url(host, media_id, template='http://hqq.watch/player/embed_player.php?vid={media_id}&autoplay=no')
181        return 'http://hqq.watch/player/embed_player.php?vid=%s&autoplay=no' % media_id
182
183sys.stdout = WaawResolver()
Note: See TracBrowser for help on using the repository browser.