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