From f8db6c31e2f3dac2e842cf8730c508aab5003026 Mon Sep 17 00:00:00 2001 From: ngosang Date: Sat, 21 Sep 2019 14:09:11 +0200 Subject: [PATCH] Fix Subdivx provider, new webpage --- libs/subliminal_patch/providers/subdivx.py | 29 ++++++++++++++++------ 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/libs/subliminal_patch/providers/subdivx.py b/libs/subliminal_patch/providers/subdivx.py index 87f9ce1e9..c3ac4b1f7 100644 --- a/libs/subliminal_patch/providers/subdivx.py +++ b/libs/subliminal_patch/providers/subdivx.py @@ -22,16 +22,15 @@ class SubdivxSubtitle(Subtitle): provider_name = 'subdivx' hash_verifiable = False - def __init__(self, language, page_link, download_link, description, title): + def __init__(self, language, page_link, description, title): super(SubdivxSubtitle, self).__init__(language, hearing_impaired=False, page_link=page_link) - self.download_link = download_link self.description = description.lower() self.title = title @property def id(self): - return self.download_link + return self.page_link def get_matches(self, video): matches = set() @@ -142,10 +141,8 @@ class SubdivxSubtitlesProvider(Provider): # body description = body_soup.find("div", {'id': 'buscador_detalle_sub'}).text - download_link = body_soup.find("div", {'id': 'buscador_detalle_sub_datos'} - ).find("a", {'target': 'new'})["href"].replace('http://', 'https://') - subtitle = self.subtitle_class(language, page_link, download_link, description, title) + subtitle = self.subtitle_class(language, page_link, description, title) logger.debug('Found subtitle %r', subtitle) subtitles.append(subtitle) @@ -178,12 +175,28 @@ class SubdivxSubtitlesProvider(Provider): return subtitles + def get_download_link(self, subtitle): + r = self.session.get(subtitle.page_link, timeout=10) + r.raise_for_status() + + if r.content: + page_soup = ParserBeautifulSoup(r.content.decode('iso-8859-1', 'ignore'), ['lxml', 'html.parser']) + links_soup = page_soup.find_all("a", {'class': 'detalle_link'}) + for link_soup in links_soup: + if link_soup['href'].startswith('bajar'): + return self.server_url + link_soup['href'] + + logger.debug('No data returned from provider') + return None + def download_subtitle(self, subtitle): if isinstance(subtitle, SubdivxSubtitle): # download the subtitle logger.info('Downloading subtitle %r', subtitle) - r = self.session.get(subtitle.download_link, headers={'Referer': subtitle.page_link}, - timeout=30) + + # get download link + download_link = self.get_download_link(subtitle) + r = self.session.get(download_link, headers={'Referer': subtitle.page_link}, timeout=30) r.raise_for_status() if not r.content: