Remove youtube api key usage

fixes #616
This commit is contained in:
Eric Le Lay 2020-01-25 17:31:16 +01:00
parent 41a9361251
commit bffa6b9304
7 changed files with 0 additions and 164 deletions

43
bin/gpo
View File

@ -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:

View File

@ -199,45 +199,6 @@
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label_youtube_api_key">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">YouTube API key (v3):</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry_youtube_api_key">
<property name="visible">True</property>
<property name="hexpand">True</property>
<signal handler="on_youtube_api_key_changed" name="changed"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button_youtube_api_key">
<property name="visible">True</property>
<signal name="clicked" handler="on_button_youtube_api_key_clicked"/>
<child>
<object class="GtkImage" id="image_youtube_api_key">
<property name="stock">gtk-jump-to</property>
<property name="visible">True</property>
</object>
</child>
</object>
<packing>
<property name="top_attach">1</property>
<property name="left_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label_preferred_vimeo_format">
<property name="visible">True</property>

View File

@ -144,10 +144,6 @@
<attribute name="label" translatable="yes">Sync to device</attribute>
<attribute name="accel">&lt;Primary&gt;s</attribute>
</item>
<item>
<attribute name="action">win.updateYoutubeSubscriptions</attribute>
<attribute name="label" translatable="yes">Update YouTube subscriptions</attribute>
</item>
</submenu>
<submenu id="menuView">
<attribute name="label" translatable="yes">_View</attribute>

View File

@ -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': {

View File

@ -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()

View File

@ -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)

View File

@ -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