diff options
| author | Sergey M․ <dstftw@gmail.com> | 2015-07-05 06:29:36 +0600 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2015-07-05 06:29:36 +0600 | 
| commit | ede21449c8d87c2d000d16e5102ee85d87a9b14e (patch) | |
| tree | c0c2281b4e823d15269d704aa47350b1fc336179 | |
| parent | d7c9a3e976b00068e926e18d963e9fdb7c3cd678 (diff) | |
[crunchyroll] Fix extraction (Closes #5855, closes #5881)
| -rw-r--r-- | youtube_dl/extractor/crunchyroll.py | 31 | 
1 files changed, 24 insertions, 7 deletions
| diff --git a/youtube_dl/extractor/crunchyroll.py b/youtube_dl/extractor/crunchyroll.py index 41f0c736d..73f1e22ef 100644 --- a/youtube_dl/extractor/crunchyroll.py +++ b/youtube_dl/extractor/crunchyroll.py @@ -27,7 +27,7 @@ from ..aes import (  class CrunchyrollIE(InfoExtractor): -    _VALID_URL = r'https?://(?:(?P<prefix>www|m)\.)?(?P<url>crunchyroll\.(?:com|fr)/(?:[^/]*/[^/?&]*?|media/\?id=)(?P<video_id>[0-9]+))(?:[/?&]|$)' +    _VALID_URL = r'https?://(?:(?P<prefix>www|m)\.)?(?P<url>crunchyroll\.(?:com|fr)/(?:media(?:-|/\?id=)|[^/]*/[^/?&]*?)(?P<video_id>[0-9]+))(?:[/?&]|$)'      _NETRC_MACHINE = 'crunchyroll'      _TESTS = [{          'url': 'http://www.crunchyroll.com/wanna-be-the-strongest-in-the-world/episode-1-an-idol-wrestler-is-born-645513', @@ -46,6 +46,22 @@ class CrunchyrollIE(InfoExtractor):              'skip_download': True,          },      }, { +        'url': 'http://www.crunchyroll.com/media-589804/culture-japan-1', +        'info_dict': { +            'id': '589804', +            'ext': 'flv', +            'title': 'Culture Japan Episode 1 – Rebuilding Japan after the 3.11', +            'description': 'md5:fe2743efedb49d279552926d0bd0cd9e', +            'thumbnail': 're:^https?://.*\.jpg$', +            'uploader': 'Danny Choo Network', +            'upload_date': '20120213', +        }, +        'params': { +            # rtmp +            'skip_download': True, +        }, + +    }, {          'url': 'http://www.crunchyroll.fr/girl-friend-beta/episode-11-goodbye-la-mode-661697',          'only_matching': True,      }] @@ -251,16 +267,17 @@ Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text          for fmt in re.findall(r'showmedia\.([0-9]{3,4})p', webpage):              stream_quality, stream_format = self._FORMAT_IDS[fmt]              video_format = fmt + 'p' -            streamdata_req = compat_urllib_request.Request('http://www.crunchyroll.com/xml/') -            # urlencode doesn't work! -            streamdata_req.data = 'req=RpcApiVideoEncode%5FGetStreamInfo&video%5Fencode%5Fquality=' + stream_quality + '&media%5Fid=' + stream_id + '&video%5Fformat=' + stream_format +            streamdata_req = compat_urllib_request.Request( +                'http://www.crunchyroll.com/xml/?req=RpcApiVideoPlayer_GetStandardConfig&media_id=%s&video_format=%s&video_quality=%s' +                % (stream_id, stream_format, stream_quality), +                compat_urllib_parse.urlencode({'current_page': url}).encode('utf-8'))              streamdata_req.add_header('Content-Type', 'application/x-www-form-urlencoded') -            streamdata_req.add_header('Content-Length', str(len(streamdata_req.data)))              streamdata = self._download_xml(                  streamdata_req, video_id,                  note='Downloading media info for %s' % video_format) -            video_url = streamdata.find('./host').text -            video_play_path = streamdata.find('./file').text +            stream_info = streamdata.find('./{default}preload/stream_info') +            video_url = stream_info.find('./host').text +            video_play_path = stream_info.find('./file').text              formats.append({                  'url': video_url,                  'play_path': video_play_path, | 
