diff --git a/nova3/engines/eztv.py b/nova3/engines/eztv.py index ea45d5d..b8e94fa 100644 --- a/nova3/engines/eztv.py +++ b/nova3/engines/eztv.py @@ -1,12 +1,62 @@ -#VERSION: 1.14 +#VERSION: 1.15 # AUTHORS: nindogo # CONTRIBUTORS: Diego de las Heras (ngosang@hotmail.es) from html.parser import HTMLParser -from novaprinter import prettyPrinter -from helpers import retrieve_url +import random +import http.cookiejar +import urllib.request +import urllib.parse +from novaprinter import prettyPrinter + +policy = http.cookiejar.DefaultCookiePolicy() +global_cookie_jar = http.cookiejar.CookieJar(policy) + +def random_user_agent(): + _USER_AGENT_TPL = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/%s Safari/537.36' + _CHROME_VERSIONS = ( + '90.0.4430.212', + '90.0.4430.24', + '90.0.4430.70', + '90.0.4430.72', + '90.0.4430.85', + '90.0.4430.93', + '91.0.4472.101', + '91.0.4472.106', + '91.0.4472.114', + '91.0.4472.124', + '91.0.4472.164', + '91.0.4472.19', + '91.0.4472.77', + '92.0.4515.107', + '92.0.4515.115', + '92.0.4515.131', + '92.0.4515.159', + '92.0.4515.43', + '93.0.4556.0', + '93.0.4577.15', + '93.0.4577.63', + '93.0.4577.82', + '94.0.4606.41', + '94.0.4606.54', + '94.0.4606.61', + '94.0.4606.71', + '94.0.4606.81', + '94.0.4606.85', + '95.0.4638.17', + '95.0.4638.50', + '95.0.4638.54', + '95.0.4638.69', + '95.0.4638.74', + '96.0.4664.18', + '96.0.4664.45', + '96.0.4664.55', + '96.0.4664.93', + '97.0.4692.20', + ) + return _USER_AGENT_TPL % random.choice(_CHROME_VERSIONS) class eztv(object): name = "EZTV" @@ -59,9 +109,28 @@ class eztv(object): prettyPrinter(self.current_item) self.in_table_row = False + def retrieve_url(self, url, data=None): + opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(global_cookie_jar)) + opener.addheaders = [('User-Agent', random_user_agent())] + if not data: + req = urllib.request.Request(url) + else: + req = urllib.request.Request(url, data=data) + + with opener.open(req) as response: + parsed = urllib.parse.urlparse(response.url) + self.url = parsed.scheme + "://" + parsed.hostname + return response.read().decode('utf-8') + def search(self, what, cat='all'): + + _ = self.retrieve_url(self.url) + + data = {'layout':'def_wlinks'} + data = urllib.parse.urlencode(data).encode('utf-8') + query = self.url + '/search/' + what.replace('%20', '-') - eztv_html = retrieve_url(query) + eztv_html = self.retrieve_url(query, data) eztv_parser = self.MyHtmlParser(self.url) eztv_parser.feed(eztv_html)