Esempio n. 1
0
 def query(self, filepath, languages, keywords, series, season, episode):
     request_series = series.lower().replace(' ', '_')
     if isinstance(request_series, unicode):
         request_series = unicodedata.normalize('NFKD', request_series).encode('ascii', 'ignore')
     self.logger.debug(u'Getting subtitles for %s season %d episode %d with languages %r' % (series, season, episode, languages))
     r = self.session.get('%s/%s/%sx%.2d' % (self.server_url, urllib.quote(request_series), season, episode))
     if r.status_code == 404:
         self.logger.debug(u'Could not find subtitles for %s season %d episode %d with languages %r' % (series, season, episode, languages))
         return []
     if r.status_code != 200:
         self.logger.error(u'Request %s returned status code %d' % (r.url, r.status_code))
         return []
     soup = BeautifulSoup.BeautifulSoup(r.content)
     subtitles = []
     for sub in soup('div', {'id': 'version'}):
         sub_keywords = split_keyword(self.release_pattern.search(sub.find('p', {'class': 'title-sub'}).contents[1]).group(1).lower())
         if not keywords & sub_keywords:
             self.logger.debug(u'None of subtitle keywords %r in %r' % (sub_keywords, keywords))
             continue
         for html_language in sub.findAllNext('ul', {'class': 'sslist'}):
             language = self.getRevertLanguage(html_language.findNext('li', {'class': 'li-idioma'}).find('strong').contents[0].string.strip())
             if not language in languages:
                 self.logger.debug(u'Language %r not in wanted languages %r' % (language, languages))
                 continue
             html_status = html_language.findNext('li', {'class': 'li-estado green'})
             status = html_status.contents[0].string.strip()
             if status != 'Completado':
                 self.logger.debug(u'Wrong subtitle status %s' % status)
                 continue
             path = get_subtitle_path(filepath, language, self.config.multi)
             subtitle = ResultSubtitle(path, language, self.__class__.__name__, html_status.findNext('span', {'class': 'descargar green'}).find('a')['href'], keywords=sub_keywords)
             subtitles.append(subtitle)
     return subtitles
Esempio n. 2
0
 def query(self, filepath, languages, moviehash=None, size=None, imdbid=None, query=None):
     searches = []
     if moviehash and size:
         searches.append({'moviehash': moviehash, 'moviebytesize': size})
     if imdbid:
         searches.append({'imdbid': imdbid})
     if query:
         searches.append({'query': query})
     if not searches:
         raise PluginError('One or more parameter missing')
     for search in searches:
         search['sublanguageid'] = ','.join([self.getLanguage(l) for l in languages])
     self.logger.debug(u'Getting subtitles %r with token %s' % (searches, self.token))
     results = self.server.SearchSubtitles(self.token, searches)
     if not results['data']:
         self.logger.debug(u'Could not find subtitles for %r with token %s' % (searches, self.token))
         return []
     subtitles = []
     for result in results['data']:
         language = self.getRevertLanguage(result['SubLanguageID'])
         path = get_subtitle_path(filepath, language, self.config.multi)
         confidence = 1 - float(self.confidence_order.index(result['MatchedBy'])) / float(len(self.confidence_order))
         subtitle = ResultSubtitle(path, language, self.__class__.__name__, result['SubDownloadLink'], result['SubFileName'], confidence)
         subtitles.append(subtitle)
     return subtitles
Esempio n. 3
0
 def query(self, filepath, languages, keywords=None, series=None, season=None, episode=None, movie=None, year=None):
     if series and season and episode:
         request_series = series.lower().replace(' ', '_')
         if isinstance(request_series, unicode):
             request_series = request_series.encode('utf-8')
         self.logger.debug(u'Getting subtitles for %s season %d episode %d with languages %r' % (series, season, episode, languages))
         r = self.session.get('%s/serie/%s/%s/%s/' % (self.server_url, urllib.quote(request_series), season, episode))
         if r.status_code == 404:
             self.logger.debug(u'Could not find subtitles for %s season %d episode %d with languages %r' % (series, season, episode, languages))
             return []
     elif movie and year:
         request_movie = movie.title().replace(' ', '_')
         if isinstance(request_movie, unicode):
             request_movie = request_movie.encode('utf-8')
         self.logger.debug(u'Getting subtitles for %s (%d) with languages %r' % (movie, year, languages))
         r = self.session.get('%s/film/%s_(%d)' % (self.server_url, urllib.quote(request_movie), year))
         if r.status_code == 404:
             self.logger.debug(u'Could not find subtitles for %s (%d) with languages %r' % (movie, year, languages))
             return []
     else:
         raise PluginError('One or more parameter missing')
     if r.status_code != 200:
         self.logger.error(u'Request %s returned status code %d' % (r.url, r.status_code))
         return []
     soup = BeautifulSoup.BeautifulSoup(r.content)
     subtitles = []
     for sub in soup('td', {'class': 'NewsTitle'}):
         sub_keywords = split_keyword(self.release_pattern.search(sub.contents[1]).group(1).lower())
         if not keywords & sub_keywords:
             self.logger.debug(u'None of subtitle keywords %r in %r' % (sub_keywords, keywords))
             continue
         for html_language in sub.parent.parent.findAll('td', {'class': 'language'}):
             language = self.getRevertLanguage(html_language.string.strip())
             if not language in languages:
                 self.logger.debug(u'Language %r not in wanted languages %r' % (language, languages))
                 continue
             html_status = html_language.findNextSibling('td')
             status = html_status.find('strong').string.strip()
             if status != 'Completed':
                 self.logger.debug(u'Wrong subtitle status %s' % status)
                 continue
             path = get_subtitle_path(filepath, language, self.config.multi)
             subtitle = ResultSubtitle(path, language, self.__class__.__name__, '%s%s' % (self.server_url, html_status.findNext('td').find('a')['href']))
             subtitles.append(subtitle)
     return subtitles
Esempio n. 4
0
 def query(self, season, episode, languages, filepath, tvdbid=None, series=None):
     self.initCache()
     self.loadFromCache()
     if series:
         if series.lower() in self.showids:  # from cache
             request_id = self.showids[series.lower()]
             self.logger.debug(u'Retreived showid %d for %s from cache' % (request_id, series))
         else:  # query to get showid
             self.logger.debug(u'Getting showid from show name %s...' % series)
             r = self.session.get('%sGetShowByName/%s' % (self.server_url, urllib.quote(series.lower())))
             if r.status_code != 200:
                 self.logger.error(u'Request %s returned status code %d' % (r.url, r.status_code))
                 return []
             soup = BeautifulSoup.BeautifulStoneSoup(r.content)
             if soup.status.contents[0] == 'false':
                 self.logger.debug(u'Could not find show %s' % series)
                 return []
             request_id = int(soup.showid.contents[0])
             self.showids[series.lower()] = request_id
             self.saveToCache()
         request_source = 'showid'
         request_is_tvdbid = 'false'
     elif tvdbid:
         request_id = tvdbid
         request_source = 'tvdbid'
         request_is_tvdbid = 'true'
     else:
         raise PluginError('One or more parameter missing')
     subtitles = []
     for language in languages:
         self.logger.debug(u'Getting subtitles for %s %d season %d episode %d with language %s' % (request_source, request_id, season, episode, language))
         r = self.session.get('%sGetAllSubsFor/%s/%s/%s/%s/%s' % (self.server_url, request_id, season, episode, language, request_is_tvdbid))
         if r.status_code != 200:
             self.logger.error(u'Request %s returned status code %d' % (r.url, r.status_code))
             return []
         soup = BeautifulSoup.BeautifulStoneSoup(r.content)
         if soup.status.contents[0] == 'false':
             self.logger.debug(u'Could not find subtitles for %s %d season %d episode %d with language %s' % (request_source, request_id, season, episode, language))
             continue
         path = get_subtitle_path(filepath, language, self.config.multi)
         for result in soup.results('result'):
             subtitle = ResultSubtitle(path, language, self.__class__.__name__, result.downloadlink.contents[0], result.filename.contents[0])
             subtitles.append(subtitle)
     return subtitles
Esempio n. 5
0
 def query(self, filepath, moviehash, languages):
     r = self.session.get(self.server_url, params={'action': 'search', 'hash': moviehash})
     if r.status_code == 404:
         self.logger.debug(u'Could not find subtitles for hash %s' % moviehash)
         return []
     if r.status_code != 200:
         self.logger.error(u'Request %s returned status code %d' % (r.url, r.status_code))
         return []
     available_languages = set([self.getRevertLanguage(l) for l in r.content.split(',')])
     filtered_languages = languages & available_languages
     if not filtered_languages:
         self.logger.debug(u'Could not find subtitles for hash %s with languages %r (only %r available)' % (moviehash, languages, available_languages))
         return []
     subtitles = []
     for language in filtered_languages:
         path = get_subtitle_path(filepath, language, self.config.multi)
         subtitle = ResultSubtitle(path, language, self.__class__.__name__, '%s?action=download&hash=%s&language=%s' % (self.server_url, moviehash, self.getLanguage(language)))
         subtitles.append(subtitle)
     return subtitles