From bffa6b93043a0f791496320d16f1b6c3916ae379 Mon Sep 17 00:00:00 2001 From: Eric Le Lay Date: Sat, 25 Jan 2020 17:31:16 +0100 Subject: [PATCH] Remove youtube api key usage fixes #616 --- bin/gpo | 43 ------------------ share/gpodder/ui/gtk/gpodderpreferences.ui | 39 ----------------- share/gpodder/ui/gtk/menus.ui | 4 -- src/gpodder/config.py | 1 - src/gpodder/gtkui/desktop/preferences.py | 7 --- src/gpodder/gtkui/main.py | 51 ---------------------- src/gpodder/youtube.py | 19 -------- 7 files changed, 164 deletions(-) diff --git a/bin/gpo b/bin/gpo index fc58a26d..87eb622d 100755 --- a/bin/gpo +++ b/bin/gpo @@ -65,7 +65,6 @@ - Other commands - youtube URL Resolve the YouTube URL to a download URL - youtubefix Migrate old YouTube subscriptions to new feeds rewrite OLDURL NEWURL Change the feed URL of [OLDURL] to [NEWURL] """ @@ -707,48 +706,6 @@ class gPodderCli(object): return True - def youtubefix(self): - if not self._config.youtube.api_key_v3: - self._error(_('Please register a YouTube API key and set it using %(command)s.') % { - 'command': 'set youtube.api_key_v3 KEY', - }) - return False - - reported_anything = False - for podcast in self._model.get_podcasts(): - url, user = youtube.for_each_feed_pattern(lambda url, channel: (url, channel), podcast.url, (None, None)) - if url is not None and user is not None: - try: - logger.info('Getting channels for YouTube user %s (%s)', user, url) - new_urls = youtube.get_channels_for_user(user, self._config.youtube.api_key_v3) - logger.debug('YouTube channels retrieved: %r', new_urls) - - if len(new_urls) != 1: - self._info('%s: %s' % (url, _('No unique URL found'))) - reported_anything = True - continue - - new_url = new_urls[0] - if new_url in set(x.url for x in self._model.get_podcasts()): - self._info('%s: %s' % (url, _('Already subscribed'))) - reported_anything = True - continue - - logger.info('New feed location: %s => %s', url, new_url) - - self._info(_('Changing: %(old_url)s => %(new_url)s') % {'old_url': url, 'new_url': new_url}) - reported_anything = True - podcast.url = new_url - podcast.save() - except Exception as e: - logger.error('Exception happened while updating download list.', exc_info=True) - self._error(_('Make sure the API key is correct. Error: %(message)s') % {'message': str(e)}) - return False - - if not reported_anything: - self._info(_('Nothing to fix')) - return True - def search(self, *terms): query = ' '.join(terms) if not query: diff --git a/share/gpodder/ui/gtk/gpodderpreferences.ui b/share/gpodder/ui/gtk/gpodderpreferences.ui index 0986795a..db437760 100644 --- a/share/gpodder/ui/gtk/gpodderpreferences.ui +++ b/share/gpodder/ui/gtk/gpodderpreferences.ui @@ -199,45 +199,6 @@ 0 - - - True - False - 0 - YouTube API key (v3): - - - 0 - 1 - - - - - True - True - - - - 1 - 1 - - - - - True - - - - gtk-jump-to - True - - - - - 1 - 2 - - True diff --git a/share/gpodder/ui/gtk/menus.ui b/share/gpodder/ui/gtk/menus.ui index 5e378d4a..11b12fc6 100644 --- a/share/gpodder/ui/gtk/menus.ui +++ b/share/gpodder/ui/gtk/menus.ui @@ -144,10 +144,6 @@ Sync to device <Primary>s - - win.updateYoutubeSubscriptions - Update YouTube subscriptions - _View diff --git a/src/gpodder/config.py b/src/gpodder/config.py index 23949b79..d60b82ce 100644 --- a/src/gpodder/config.py +++ b/src/gpodder/config.py @@ -202,7 +202,6 @@ defaults = { 'youtube': { 'preferred_fmt_id': 18, # default fmt_id (see fallbacks in youtube.py) 'preferred_fmt_ids': [], # for advanced uses (custom fallback sequence) - 'api_key_v3': '', # API key, register for one at https://developers.google.com/youtube/v3/ }, 'vimeo': { diff --git a/src/gpodder/gtkui/desktop/preferences.py b/src/gpodder/gtkui/desktop/preferences.py index 23efae11..fdf43593 100644 --- a/src/gpodder/gtkui/desktop/preferences.py +++ b/src/gpodder/gtkui/desktop/preferences.py @@ -280,7 +280,6 @@ class gPodderPreferences(BuilderWidget): self.entry_username.set_text(self._config.mygpo.username) self.entry_password.set_text(self._config.mygpo.password) self.entry_caption.set_text(self._config.mygpo.device.caption) - self.entry_youtube_api_key.set_text(self._config.youtube.api_key_v3) # Disable mygpo sync while the dialog is open self._config.mygpo.enabled = False @@ -543,12 +542,6 @@ class gPodderPreferences(BuilderWidget): # Only update indirectly (see on_dialog_destroy) self._enable_mygpo = widget.get_active() - def on_youtube_api_key_changed(self, widget): - self._config.youtube.api_key_v3 = widget.get_text() - - def on_button_youtube_api_key_clicked(self, widget): - util.open_website('http://wiki.gpodder.org/wiki/Youtube') - def on_server_changed(self, widget): self._config.mygpo.server = widget.get_text() diff --git a/src/gpodder/gtkui/main.py b/src/gpodder/gtkui/main.py index 63b33dc4..d3c3afa9 100644 --- a/src/gpodder/gtkui/main.py +++ b/src/gpodder/gtkui/main.py @@ -272,7 +272,6 @@ class gPodder(BuilderWidget, dbus.service.Object): ('toggleEpisodeLock', self.on_item_toggle_lock_activate), ('toggleShownotes', self.on_shownotes_selected_episodes), ('sync', self.on_sync_to_device_activate), - ('updateYoutubeSubscriptions', self.on_update_youtube_subscriptions_activate), ] for name, callback in action_defs: @@ -3602,56 +3601,6 @@ class gPodder(BuilderWidget, dbus.service.Object): self.sync_ui.on_synchronize_episodes(self.channels, episodes, force_played, self.enable_download_list_update) - def on_update_youtube_subscriptions_activate(self, action, param): - if not self.config.youtube.api_key_v3: - if self.show_confirmation('\n'.join((_('Please register a YouTube API key and set it in the preferences.'), - _('Would you like to set up an API key now?'))), _('API key required')): - self.application.on_itemPreferences_activate(self, None) - return - - failed_urls = [] - migrated_users = [] - for podcast in self.channels: - url, user = youtube.for_each_feed_pattern(lambda url, channel: (url, channel), podcast.url, (None, None)) - if url is not None and user is not None: - try: - logger.info('Getting channels for YouTube user %s (%s)', user, url) - new_urls = youtube.get_channels_for_user(user, self.config.youtube.api_key_v3) - logger.debug('YouTube channels retrieved: %r', new_urls) - - if len(new_urls) == 0 and youtube.get_youtube_id(url) is not None: - logger.info('No need to update %s', url) - continue - - if len(new_urls) != 1: - failed_urls.append((url, _('No unique URL found'))) - continue - - new_url = new_urls[0] - if new_url in set(x.url for x in self.model.get_podcasts()): - failed_urls.append((url, _('Already subscribed'))) - continue - - logger.info('New feed location: %s => %s', url, new_url) - podcast.url = new_url - podcast.save() - migrated_users.append(html.escape(user)) - except Exception as e: - logger.error('Exception happened while updating download list.', exc_info=True) - self.show_message( - _('Make sure the API key is correct. Error: %(message)s') % {'message': html.escape(str(e))}, - _('Error getting YouTube channels'), important=True) - - if migrated_users: - self.show_message('\n'.join(migrated_users), _('Successfully migrated subscriptions')) - elif not failed_urls: - self.show_message(_('Subscriptions are up to date')) - - if failed_urls: - self.show_message('\n'.join([_('These URLs failed:'), ''] + [html.escape('{0}: {1}'.format(url, message)) - for url, message in failed_urls]), - _('Could not migrate some subscriptions'), important=True) - def on_extension_enabled(self, extension): if getattr(extension, 'on_ui_object_available', None) is not None: extension.on_ui_object_available('gpodder-gtk', self) diff --git a/src/gpodder/youtube.py b/src/gpodder/youtube.py index ac7bc0a7..fd350c7b 100644 --- a/src/gpodder/youtube.py +++ b/src/gpodder/youtube.py @@ -365,25 +365,6 @@ def get_channel_desc(url): logger.warning('Could not retrieve YouTube channel description.', exc_info=True) -def get_channels_for_user(username, api_key_v3): - # already a channel ID: return videos.xml. - # Can't rely on automatic discovery, see #371 - if username.startswith('UC'): - try: - url = '{0}?channel_id={1}'.format(CHANNEL_VIDEOS_XML, username) - stream = util.urlopen(url) - return [url] - except urllib.error.HTTPError as e: - logger.debug("get_channels_for_user(%s) not a channel id (got %i response code)", username, e.code) - except: - logger.error("get_channels_for_user(%s) not a channel id (got unexpected exception)", username) - - # try username to channel ID conversion - stream = util.urlopen('{0}/channels?forUsername={1}&part=id&key={2}'.format(V3_API_ENDPOINT, username, api_key_v3)) - data = json.load(stream) - return ['{0}?channel_id={1}'.format(CHANNEL_VIDEOS_XML, item['id']) for item in data['items']] - - def parse_youtube_url(url): """ Youtube Channel Links are parsed into youtube feed links