diff options
Diffstat (limited to 'youtube_dl/extractor/animeondemand.py')
| -rw-r--r-- | youtube_dl/extractor/animeondemand.py | 62 | 
1 files changed, 42 insertions, 20 deletions
| diff --git a/youtube_dl/extractor/animeondemand.py b/youtube_dl/extractor/animeondemand.py index 9e28f2579..69d363311 100644 --- a/youtube_dl/extractor/animeondemand.py +++ b/youtube_dl/extractor/animeondemand.py @@ -3,16 +3,13 @@ from __future__ import unicode_literals  import re  from .common import InfoExtractor -from ..compat import ( -    compat_urlparse, -    compat_str, -) +from ..compat import compat_str  from ..utils import (      determine_ext,      extract_attributes,      ExtractorError, -    sanitized_Request,      urlencode_postdata, +    urljoin,  ) @@ -21,6 +18,8 @@ class AnimeOnDemandIE(InfoExtractor):      _LOGIN_URL = 'https://www.anime-on-demand.de/users/sign_in'      _APPLY_HTML5_URL = 'https://www.anime-on-demand.de/html5apply'      _NETRC_MACHINE = 'animeondemand' +    # German-speaking countries of Europe +    _GEO_COUNTRIES = ['AT', 'CH', 'DE', 'LI', 'LU']      _TESTS = [{          # jap, OmU          'url': 'https://www.anime-on-demand.de/anime/161', @@ -46,6 +45,10 @@ class AnimeOnDemandIE(InfoExtractor):          # Full length film, non-series, ger/jap, Dub/OmU, account required          'url': 'https://www.anime-on-demand.de/anime/185',          'only_matching': True, +    }, { +        # Flash videos +        'url': 'https://www.anime-on-demand.de/anime/12', +        'only_matching': True,      }]      def _login(self): @@ -72,14 +75,13 @@ class AnimeOnDemandIE(InfoExtractor):              'post url', default=self._LOGIN_URL, group='url')          if not post_url.startswith('http'): -            post_url = compat_urlparse.urljoin(self._LOGIN_URL, post_url) - -        request = sanitized_Request( -            post_url, urlencode_postdata(login_form)) -        request.add_header('Referer', self._LOGIN_URL) +            post_url = urljoin(self._LOGIN_URL, post_url)          response = self._download_webpage( -            request, None, 'Logging in as %s' % username) +            post_url, None, 'Logging in as %s' % username, +            data=urlencode_postdata(login_form), headers={ +                'Referer': self._LOGIN_URL, +            })          if all(p not in response for p in ('>Logout<', 'href="/users/sign_out"')):              error = self._search_regex( @@ -120,10 +122,11 @@ class AnimeOnDemandIE(InfoExtractor):              formats = []              for input_ in re.findall( -                    r'<input[^>]+class=["\'].*?streamstarter_html5[^>]+>', html): +                    r'<input[^>]+class=["\'].*?streamstarter[^>]+>', html):                  attributes = extract_attributes(input_) +                title = attributes.get('data-dialog-header')                  playlist_urls = [] -                for playlist_key in ('data-playlist', 'data-otherplaylist'): +                for playlist_key in ('data-playlist', 'data-otherplaylist', 'data-stream'):                      playlist_url = attributes.get(playlist_key)                      if isinstance(playlist_url, compat_str) and re.match(                              r'/?[\da-zA-Z]+', playlist_url): @@ -147,19 +150,38 @@ class AnimeOnDemandIE(InfoExtractor):                          format_id_list.append(compat_str(num))                      format_id = '-'.join(format_id_list)                      format_note = ', '.join(filter(None, (kind, lang_note))) -                    request = sanitized_Request( -                        compat_urlparse.urljoin(url, playlist_url), +                    item_id_list = [] +                    if format_id: +                        item_id_list.append(format_id) +                    item_id_list.append('videomaterial') +                    playlist = self._download_json( +                        urljoin(url, playlist_url), video_id, +                        'Downloading %s JSON' % ' '.join(item_id_list),                          headers={                              'X-Requested-With': 'XMLHttpRequest',                              'X-CSRF-Token': csrf_token,                              'Referer': url,                              'Accept': 'application/json, text/javascript, */*; q=0.01', -                        }) -                    playlist = self._download_json( -                        request, video_id, 'Downloading %s playlist JSON' % format_id, -                        fatal=False) +                        }, fatal=False)                      if not playlist:                          continue +                    stream_url = playlist.get('streamurl') +                    if stream_url: +                        rtmp = re.search( +                            r'^(?P<url>rtmpe?://(?P<host>[^/]+)/(?P<app>.+/))(?P<playpath>mp[34]:.+)', +                            stream_url) +                        if rtmp: +                            formats.append({ +                                'url': rtmp.group('url'), +                                'app': rtmp.group('app'), +                                'play_path': rtmp.group('playpath'), +                                'page_url': url, +                                'player_url': 'https://www.anime-on-demand.de/assets/jwplayer.flash-55abfb34080700304d49125ce9ffb4a6.swf', +                                'rtmp_real_time': True, +                                'format_id': 'rtmp', +                                'ext': 'flv', +                            }) +                            continue                      start_video = playlist.get('startvideo', 0)                      playlist = playlist.get('playlist')                      if not playlist or not isinstance(playlist, list): @@ -222,7 +244,7 @@ class AnimeOnDemandIE(InfoExtractor):                      f.update({                          'id': '%s-%s' % (f['id'], m.group('kind').lower()),                          'title': m.group('title'), -                        'url': compat_urlparse.urljoin(url, m.group('href')), +                        'url': urljoin(url, m.group('href')),                      })                      entries.append(f) | 
