diff options
Diffstat (limited to 'youtube_dl/extractor/arte.py')
| -rw-r--r-- | youtube_dl/extractor/arte.py | 37 | 
1 files changed, 26 insertions, 11 deletions
diff --git a/youtube_dl/extractor/arte.py b/youtube_dl/extractor/arte.py index 9591bad8a..957d35979 100644 --- a/youtube_dl/extractor/arte.py +++ b/youtube_dl/extractor/arte.py @@ -78,7 +78,8 @@ class ArteTVPlus7IE(InfoExtractor):      def _extract_from_webpage(self, webpage, video_id, lang):          json_url = self._html_search_regex( -            r'arte_vp_url="(.*?)"', webpage, 'json vp url') +            [r'arte_vp_url=["\'](.*?)["\']', r'data-url=["\']([^"]+)["\']'], +            webpage, 'json vp url')          return self._extract_from_json_url(json_url, video_id, lang)      def _extract_from_json_url(self, json_url, video_id, lang): @@ -109,15 +110,19 @@ class ArteTVPlus7IE(InfoExtractor):              regexes = [r'VO?%s' % l, r'VO?.-ST%s' % l]              return any(re.match(r, f['versionCode']) for r in regexes)          # Some formats may not be in the same language as the url +        # TODO: Might want not to drop videos that does not match requested language +        # but to process those formats with lower precedence          formats = filter(_match_lang, all_formats) -        formats = list(formats) # in python3 filter returns an iterator +        formats = list(formats)  # in python3 filter returns an iterator          if not formats:              # Some videos are only available in the 'Originalversion'              # they aren't tagged as being in French or German -            if all(f['versionCode'] == 'VO' or f['versionCode'] == 'VA' for f in all_formats): -                formats = all_formats -            else: -                raise ExtractorError(u'The formats list is empty') +            # Sometimes there are neither videos of requested lang code +            # nor original version videos available +            # For such cases we just take all_formats as is +            formats = all_formats +            if not formats: +                raise ExtractorError('The formats list is empty')          if re.match(r'[A-Z]Q', formats[0]['quality']) is not None:              def sort_key(f): @@ -173,16 +178,26 @@ class ArteTVPlus7IE(InfoExtractor):  # It also uses the arte_vp_url url from the webpage to extract the information  class ArteTVCreativeIE(ArteTVPlus7IE):      IE_NAME = 'arte.tv:creative' -    _VALID_URL = r'https?://creative\.arte\.tv/(?P<lang>fr|de)/magazine?/(?P<id>.+)' +    _VALID_URL = r'https?://creative\.arte\.tv/(?P<lang>fr|de)/(?:magazine?/)?(?P<id>[^?#]+)' -    _TEST = { +    _TESTS = [{          'url': 'http://creative.arte.tv/de/magazin/agentur-amateur-corporate-design',          'info_dict': { -            'id': '050489-002', +            'id': '72176',              'ext': 'mp4', -            'title': 'Agentur Amateur / Agence Amateur #2 : Corporate Design', +            'title': 'Folge 2 - Corporate Design', +            'upload_date': '20131004',          }, -    } +    }, { +        'url': 'http://creative.arte.tv/fr/Monty-Python-Reunion', +        'info_dict': { +            'id': '160676', +            'ext': 'mp4', +            'title': 'Monty Python live (mostly)', +            'description': 'Événement ! Quarante-cinq ans après leurs premiers succès, les légendaires Monty Python remontent sur scène.\n', +            'upload_date': '20140805', +        } +    }]  class ArteTVFutureIE(ArteTVPlus7IE):  | 
