def get_cover(self, filename, cover_url, feed_url, title, username=None, password=None, download=False): # Detection of "all episodes" podcast if filename == self.ALL_EPISODES_ID: return self.get_cover_all_episodes() # Return already existing files for extension in self.EXTENSIONS: if os.path.exists(filename + extension): return filename + extension # If allowed to download files, do so here if download: # YouTube-specific cover art image resolver youtube_cover_url = youtube.get_real_cover(feed_url) if youtube_cover_url is not None: cover_url = youtube_cover_url if not cover_url: return self._fallback_filename(title) # We have to add username/password, because password-protected # feeds might keep their cover art also protected (bug 1521) if username is not None and password is not None: cover_url = util.url_add_authentication( cover_url, username, password) try: logger.info('Downloading cover art: %s', cover_url) data = util.urlopen(cover_url, timeout=self.TIMEOUT).read() except Exception, e: logger.warn('Cover art download failed: %s', e) return self._fallback_filename(title) try: extension = None for filetype, check in self.SUPPORTED_EXTENSIONS.items(): if check(data): extension = filetype break if extension is None: msg = 'Unknown file type: %s (%r)' % (cover_url, data[:6]) raise ValueError(msg) # Successfully downloaded the cover art - save it! fp = open(filename + extension, 'wb') fp.write(data) fp.close() return filename + extension except Exception, e: logger.warn('Cannot save cover art', exc_info=True)
def get_cover(self, filename, cover_url, feed_url, title, username=None, password=None, download=False): # Detection of "all episodes" podcast if filename == self.ALL_EPISODES_ID: return self.get_cover_all_episodes() # Return already existing files for extension in self.EXTENSIONS: if os.path.exists(filename + extension): return filename + extension # If allowed to download files, do so here if download: # YouTube-specific cover art image resolver youtube_cover_url = youtube.get_cover(feed_url) if youtube_cover_url is not None: cover_url = youtube_cover_url if not cover_url: return self._fallback_filename(title) # We have to add username/password, because password-protected # feeds might keep their cover art also protected (bug 1521) if username is not None and password is not None: cover_url = util.url_add_authentication(cover_url, username, password) try: logger.info('Downloading cover art: %s', cover_url) data = util.urlopen(cover_url, timeout=self.TIMEOUT).read() except Exception as e: logger.warn('Cover art download failed: %s', e) return self._fallback_filename(title) try: extension = None for filetype, check in list(self.SUPPORTED_EXTENSIONS.items()): if check(data): extension = filetype break if extension is None: msg = 'Unknown file type: %s (%r)' % (cover_url, data[:6]) raise ValueError(msg) # Successfully downloaded the cover art - save it! fp = open(filename + extension, 'wb') fp.write(data) fp.close() return filename + extension except Exception as e: logger.warn('Cannot save cover art', exc_info=True) # Fallback to cover art based on the podcast title return self._fallback_filename(title)
def get_cover(self, podcast, download=False): filename = podcast.cover_file cover_url = podcast.cover_url # Return already existing files for extension in self.EXTENSIONS: if os.path.exists(filename + extension): return filename + extension # If allowed to download files, do so here if download: # YouTube-specific cover art image resolver youtube_cover_url = youtube.get_real_cover(podcast.url) if youtube_cover_url is not None: cover_url = youtube_cover_url if not cover_url: return None # We have to add username/password, because password-protected # feeds might keep their cover art also protected (bug 1521) cover_url = util.url_add_authentication(cover_url, podcast.auth_username, podcast.auth_password) try: logger.info('Downloading cover art: %s', cover_url) data = util.urlopen(cover_url, timeout=self.TIMEOUT).read() except Exception as e: logger.warn('Cover art download failed: %s', e) return None try: extension = None for filetype, check in list(self.SUPPORTED_EXTENSIONS.items()): if check(data): extension = filetype break if extension is None: msg = 'Unknown file type: %s (%r)' % (cover_url, data[:6]) raise ValueError(msg) # Successfully downloaded the cover art - save it! fp = open(filename + extension, 'wb') fp.write(data) fp.close() return filename + extension except Exception as e: logger.warn('Cannot save cover art', exc_info=True) return None
def get_cover(self, podcast, download=False): filename = podcast.cover_file cover_url = podcast.cover_url # Return already existing files for extension in self.EXTENSIONS: if os.path.exists(filename + extension): return filename + extension # If allowed to download files, do so here if download: cover_url = registry.cover_art.resolve(podcast, cover_url) if not cover_url: return None # We have to add username/password, because password-protected # feeds might keep their cover art also protected (bug 1521) cover_url = util.url_add_authentication(cover_url, podcast.auth_username, podcast.auth_password) try: logger.info('Downloading cover art: %s', cover_url) data = util.urlopen(cover_url, timeout=self.TIMEOUT).read() except Exception as e: logger.warn('Cover art download failed: %s', e) return None try: extension = None for filetype, check in list(self.SUPPORTED_EXTENSIONS.items()): if check(data): extension = filetype break if extension is None: msg = 'Unknown file type: %s (%r)' % (cover_url, data[:6]) raise ValueError(msg) # Successfully downloaded the cover art - save it! with util.update_file_safely(filename + extension) as temp_filename: with open(temp_filename, 'wb') as fp: fp.write(data) return filename + extension except Exception as e: logger.warn('Cannot save cover art', exc_info=True) return None
def request(self, url, data=None): headers = {'Content-Type': 'application/json'} if url == self.OAUTH_TOKEN_URL: # Inject username and password into the request URL url = util.url_add_authentication(url, self.KEY, self.SECRET) elif self._config.token: headers['Authorization'] = 'Bearer ' + self._config.token if data is not None: data = json.dumps(data) try: response = util.urlopen(url, headers, data) except urllib2.HTTPError, error: return {'_gpodder_statuscode': error.getcode()}
def authenticate_url(self, url): return util.url_add_authentication(url, self.auth_username, self.auth_password)
def get_download_user_subscriptions_url(self): OPML_URL = self._client.locator.subscriptions_uri() url = util.url_add_authentication(OPML_URL, self._config.mygpo.username, self._config.mygpo.password) return url