diff options
Diffstat (limited to 'youtube_dl/extractor/tudou.py')
| -rw-r--r-- | youtube_dl/extractor/tudou.py | 38 | 
1 files changed, 18 insertions, 20 deletions
| diff --git a/youtube_dl/extractor/tudou.py b/youtube_dl/extractor/tudou.py index 84fe71aef..5f7ac4b35 100644 --- a/youtube_dl/extractor/tudou.py +++ b/youtube_dl/extractor/tudou.py @@ -2,14 +2,12 @@  from __future__ import unicode_literals -import re -import json -  from .common import InfoExtractor +from ..compat import compat_str  class TudouIE(InfoExtractor): -    _VALID_URL = r'https?://(?:www\.)?tudou\.com/(?:listplay|programs(?:/view)?|albumplay)/.*?/(?P<id>[^/?#]+?)(?:\.html)?/?(?:$|[?#])' +    _VALID_URL = r'https?://(?:www\.)?tudou\.com/(?:listplay|programs(?:/view)?|albumplay)/([^/]+/)*(?P<id>[^/?#]+?)(?:\.html)?/?(?:$|[?#])'      _TESTS = [{          'url': 'http://www.tudou.com/listplay/zzdE77v6Mmo/2xN2duXMxmw.html',          'md5': '140a49ed444bd22f93330985d8475fcb', @@ -27,41 +25,41 @@ class TudouIE(InfoExtractor):              'title': 'La Sylphide-Bolshoi-Ekaterina Krysanova & Vyacheslav Lopatin 2012',              'thumbnail': 're:^https?://.*\.jpg$',          } +    }, { +        'url': 'http://www.tudou.com/albumplay/cJAHGih4yYg.html', +        'only_matching': True,      }]      _PLAYER_URL = 'http://js.tudouui.com/bin/lingtong/PortalPlayer_177.swf' -    def _url_for_id(self, id, quality=None): -        info_url = "http://v2.tudou.com/f?id=" + str(id) +    def _url_for_id(self, video_id, quality=None): +        info_url = 'http://v2.tudou.com/f?id=' + compat_str(video_id)          if quality:              info_url += '&hd' + quality -        webpage = self._download_webpage(info_url, id, "Opening the info webpage") -        final_url = self._html_search_regex('>(.+?)</f>', webpage, 'video url') +        xml_data = self._download_xml(info_url, video_id, "Opening the info XML page") +        final_url = xml_data.text          return final_url      def _real_extract(self, url):          video_id = self._match_id(url)          webpage = self._download_webpage(url, video_id) -        m = re.search(r'vcode:\s*[\'"](.+?)[\'"]', webpage) -        if m and m.group(1): -            return { -                '_type': 'url', -                'url': 'youku:' + m.group(1), -                'ie_key': 'Youku' -            } +        youku_vcode = self._search_regex( +            r'vcode\s*:\s*[\'"]([^\'"]*)[\'"]', webpage, 'youku vcode', default=None) +        if youku_vcode: +            return self.url_result('youku:' + youku_vcode, ie='Youku')          title = self._search_regex( -            r",kw:\s*['\"](.+?)[\"']", webpage, 'title') +            r',kw\s*:\s*[\'"]([^\'"]+)[\'"]', webpage, 'title')          thumbnail_url = self._search_regex( -            r",pic:\s*[\"'](.+?)[\"']", webpage, 'thumbnail URL', fatal=False) +            r',pic\s*:\s*[\'"]([^\'"]+)[\'"]', webpage, 'thumbnail URL', fatal=False)          player_url = self._search_regex( -            r"playerUrl\s*:\s*['\"](.+?\.swf)[\"']", +            r'playerUrl\s*:\s*[\'"]([^\'"]+\.swf)[\'"]',              webpage, 'player URL', default=self._PLAYER_URL) -        segs_json = self._search_regex(r'segs: \'(.*)\'', webpage, 'segments') -        segments = json.loads(segs_json) +        segments = self._parse_json(self._search_regex( +            r'segs: \'([^\']+)\'', webpage, 'segments'), video_id)          # It looks like the keys are the arguments that have to be passed as          # the hd field in the request url, we pick the higher          # Also, filter non-number qualities (see issue #3643). | 
