Ejemplo n.º 1
0
    def query(self, name, season, episode, keywords, filepath, languages):
        sublinks = []
        # get the show id
        show_name = name.lower()
        if show_name in self.exceptions:  # get it from exceptions
            show_id = self.exceptions[show_name]
        elif show_name in self.showids:  # get it from cache
            show_id = self.showids[show_name]
        else:  # retrieve it
            show_name_encoded = show_name
            if isinstance(show_name_encoded, unicode):
                show_name_encoded = show_name_encoded.encode('utf-8')
            show_id_url = '%sGetShowByName/%s' % (self.server_url, urllib2.quote(show_name_encoded))
            self.logger.debug(u'Retrieving show id from web at %s' % show_id_url)
            page = urllib2.urlopen(show_id_url)
            dom = minidom.parse(page)
            if not dom or len(dom.getElementsByTagName('showid')) == 0:  # no proper result
                page.close()
                return []
            show_id = dom.getElementsByTagName('showid')[0].firstChild.data
            self.showids[show_name] = show_id
            with self.lock:
                f = open(self.showid_cache, 'w')
                self.logger.debug(u'Writing showid %s to cache file' % show_id)
                pickle.dump(self.showids, f)
                f.close()
            page.close()

        # get the subs for the show id we have
        for language in languages:
            subs_url = '%sGetAllSubsFor/%s/%s/%s/%s' % (self.server_url, show_id, season, episode, language)
            self.logger.debug(u'Getting subtitles at %s' % subs_url)
            page = urllib2.urlopen(subs_url)
            dom = minidom.parse(page)
            page.close()
            for sub in dom.getElementsByTagName('result'):
                sub_filename = sub.getElementsByTagName('filename')[0].firstChild.data
                if not sub_filename.endswith(tuple(EXTENSIONS)):
                    sub_filename = sub_filename + EXTENSIONS[0]
                subtitle = Subtitle.factory(sub_filename)
                subtitle.link = sub.getElementsByTagName('downloadlink')[0].firstChild.data
                subtitle.path = self.getSubtitlePath(filepath, language)
                subtitle.plugin = self.__class__.__name__
                subtitle.language = language
                sublinks.append(subtitle)
        sublinks.sort(self._cmpReleaseGroup)
        return sublinks