diff options
| author | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-07-24 22:13:39 +0200 | 
|---|---|---|
| committer | Jaime Marquínez Ferrándiz <jaime.marquinez.ferrandiz@gmail.com> | 2013-07-24 22:13:39 +0200 | 
| commit | 43ba5456b1a072c964a2161f08bae9d4032dc6f7 (patch) | |
| tree | bd6bb85e9cb5b101d2bd4f49c1fc0eb709acc7d2 | |
| parent | 156d5ad6daa38699186e68e2a42a6dad441ef037 (diff) | |
[youtube] add an extractor for the "Watch Later" list
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/youtube.py | 16 | 
2 files changed, 15 insertions, 2 deletions
| diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 40dc1c1e4..ad144286c 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -93,6 +93,7 @@ from .youtube import (      YoutubeShowIE,      YoutubeSubscriptionsIE,      YoutubeRecommendedIE, +    YoutubeWatchLaterIE,      YoutubeFavouritesIE,  )  from .zdf import ZDFIE diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py index 02f215605..f11402efa 100644 --- a/youtube_dl/extractor/youtube.py +++ b/youtube_dl/extractor/youtube.py @@ -920,10 +920,15 @@ class YoutubeFeedsInfoExtractor(YoutubeBaseInfoExtractor):      """      _LOGIN_REQUIRED = True      _PAGING_STEP = 30 +    # use action_load_personal_feed instead of action_load_system_feed +    _PERSONAL_FEED = False      @property      def _FEED_TEMPLATE(self): -        return 'http://www.youtube.com/feed_ajax?action_load_system_feed=1&feed_name=%s&paging=%%s' % self._FEED_NAME +        action = 'action_load_system_feed' +        if self._PERSONAL_FEED: +            action = 'action_load_personal_feed' +        return 'http://www.youtube.com/feed_ajax?%s=1&feed_name=%s&paging=%%s' % (action, self._FEED_NAME)      @property      def IE_NAME(self): @@ -942,7 +947,7 @@ class YoutubeFeedsInfoExtractor(YoutubeBaseInfoExtractor):                                            u'Downloading page %s' % i)              info = json.loads(info)              feed_html = info['feed_html'] -            m_ids = re.finditer(r'"/watch\?v=(.*?)"', feed_html) +            m_ids = re.finditer(r'"/watch\?v=(.*?)["&]', feed_html)              ids = orderedSet(m.group(1) for m in m_ids)              feed_entries.extend(self.url_result(id, 'Youtube') for id in ids)              if info['paging'] is None: @@ -961,6 +966,13 @@ class YoutubeRecommendedIE(YoutubeFeedsInfoExtractor):      _FEED_NAME = 'recommended'      _PLAYLIST_TITLE = u'Youtube Recommended videos' +class YoutubeWatchLaterIE(YoutubeFeedsInfoExtractor): +    IE_DESC = u'Youtube watch later list, "ytwatchlater" keyword (requires authentication)' +    _VALID_URL = r'https?://www\.youtube\.com/feed/watch_later|:ytwatchlater' +    _FEED_NAME = 'watch_later' +    _PLAYLIST_TITLE = u'Youtube Watch Later' +    _PAGING_STEP = 100 +    _PERSONAL_FEED = True  class YoutubeFavouritesIE(YoutubeBaseInfoExtractor):      IE_NAME = u'youtube:favorites' | 
