diff options
| author | phaer <phaer@phaer.org> | 2017-01-08 15:49:54 +0100 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2017-05-14 04:31:14 +0700 | 
| commit | efe9316703efa5dc1561dc1c5159a77c838f5ab0 (patch) | |
| tree | 013ce6b2a2c205ee6f21775b2b4023b6e7a9ea4d | |
| parent | 851a01aed6c8fd2d7fa0bccb9f7fca7b95f99f16 (diff) | |
[orf:radio] Fix extraction
Since oe1.orf.at has been updated, both ORF radios supported by youtube_dl
use the same API. This commit honors this fact by merging both extractors
into one.
| -rw-r--r-- | youtube_dl/extractor/extractors.py | 2 | ||||
| -rw-r--r-- | youtube_dl/extractor/orf.py | 113 | 
2 files changed, 53 insertions, 62 deletions
| diff --git a/youtube_dl/extractor/extractors.py b/youtube_dl/extractor/extractors.py index 811519925..dc4f9f24b 100644 --- a/youtube_dl/extractor/extractors.py +++ b/youtube_dl/extractor/extractors.py @@ -736,8 +736,8 @@ from .openload import OpenloadIE  from .ora import OraTVIE  from .orf import (      ORFTVthekIE, -    ORFOE1IE,      ORFFM4IE, +    ORFOE1IE,      ORFIPTVIE,  )  from .packtpub import ( diff --git a/youtube_dl/extractor/orf.py b/youtube_dl/extractor/orf.py index 1e2c54e68..10e4a2e1c 100644 --- a/youtube_dl/extractor/orf.py +++ b/youtube_dl/extractor/orf.py @@ -2,8 +2,6 @@  from __future__ import unicode_literals  import re -import calendar -import datetime  from .common import InfoExtractor  from ..compat import compat_str @@ -144,77 +142,25 @@ class ORFTVthekIE(InfoExtractor):          } -class ORFOE1IE(InfoExtractor): -    IE_NAME = 'orf:oe1' -    IE_DESC = 'Radio Österreich 1' -    _VALID_URL = r'https?://oe1\.orf\.at/(?:programm/|konsole\?.*?\btrack_id=)(?P<id>[0-9]+)' - -    # Audios on ORF radio are only available for 7 days, so we can't add tests. -    _TESTS = [{ -        'url': 'http://oe1.orf.at/konsole?show=on_demand#?track_id=394211', -        'only_matching': True, -    }, { -        'url': 'http://oe1.orf.at/konsole?show=ondemand&track_id=443608&load_day=/programm/konsole/tag/20160726', -        'only_matching': True, -    }] - -    def _real_extract(self, url): -        show_id = self._match_id(url) -        data = self._download_json( -            'http://oe1.orf.at/programm/%s/konsole' % show_id, -            show_id -        ) - -        timestamp = datetime.datetime.strptime('%s %s' % ( -            data['item']['day_label'], -            data['item']['time'] -        ), '%d.%m.%Y %H:%M') -        unix_timestamp = calendar.timegm(timestamp.utctimetuple()) - -        return { -            'id': show_id, -            'title': data['item']['title'], -            'url': data['item']['url_stream'], -            'ext': 'mp3', -            'description': data['item'].get('info'), -            'timestamp': unix_timestamp -        } - - -class ORFFM4IE(InfoExtractor): -    IE_NAME = 'orf:fm4' -    IE_DESC = 'radio FM4' -    _VALID_URL = r'https?://fm4\.orf\.at/(?:7tage/?#|player/)(?P<date>[0-9]+)/(?P<show>\w+)' - -    _TEST = { -        'url': 'http://fm4.orf.at/player/20160110/IS/', -        'md5': '01e736e8f1cef7e13246e880a59ad298', -        'info_dict': { -            'id': '2016-01-10_2100_tl_54_7DaysSun13_11244', -            'ext': 'mp3', -            'title': 'Im Sumpf', -            'description': 'md5:384c543f866c4e422a55f66a62d669cd', -            'duration': 7173, -            'timestamp': 1452456073, -            'upload_date': '20160110', -        }, -        'skip': 'Live streams on FM4 got deleted soon', -    } - +class ORFRadioIE(InfoExtractor):      def _real_extract(self, url):          mobj = re.match(self._VALID_URL, url) +        station = mobj.group('station')          show_date = mobj.group('date')          show_id = mobj.group('show') +        if station == 'fm4': +            show_id = '4%s' % show_id +          data = self._download_json( -            'http://audioapi.orf.at/fm4/json/2.0/broadcasts/%s/4%s' % (show_date, show_id), +            'http://audioapi.orf.at/%s/api/json/current/broadcast/%s/%s' % (station, show_id, show_date),              show_id          )          def extract_entry_dict(info, title, subtitle):              return {                  'id': info['loopStreamId'].replace('.mp3', ''), -                'url': 'http://loopstream01.apa.at/?channel=fm4&id=%s' % info['loopStreamId'], +                'url': 'http://loopstream01.apa.at/?channel=%s&id=%s' % (station, info['loopStreamId']),                  'title': title,                  'description': subtitle,                  'duration': (info['end'] - info['start']) / 1000, @@ -233,6 +179,51 @@ class ORFFM4IE(InfoExtractor):          } +class ORFFM4IE(ORFRadioIE): +    IE_NAME = 'orf:fm4' +    IE_DESC = 'radio FM4' +    _VALID_URL = r'https?://(?P<station>fm4)\.orf\.at/(?:7tage/?#|player/)(?P<date>[0-9]+)/(?P<show>\w+)' + +    _TESTS = [ +        { +            'url': 'http://fm4.orf.at/player/20170107/CC', +            'md5': '2b0be47375432a7ef104453432a19212', +            'info_dict': { +                'id': '2017-01-07_2100_tl_54_7DaysSat18_31295', +                'ext': 'mp3', +                'title': 'Solid Steel Radioshow', +                'description': 'Die Mixshow von Coldcut und Ninja Tune.', +                'duration': 3599, +                'timestamp': 1483819257, +                'upload_date': '20170107', +            }, +            'skip': 'Shows from ORF radios are only available for 7 days.' +        } +    ] + + +class ORFOE1IE(ORFRadioIE): +    IE_NAME = 'orf:oe1' +    IE_DESC = 'Radio Österreich 1' +    _VALID_URL = r'https?://(?P<station>oe1)\.orf\.at/(?:7tage/?#|player/)(?P<date>[0-9]+)/(?P<show>\w+)' + +    _TESTS = [ +       { +            'url': 'http://oe1.orf.at/player/20170108/456544', +            'md5': '34d8a6e67ea888293741c86a099b745b', +            'info_dict': { +                'id': '2017-01-08_0759_tl_51_7DaysSun6_256141', +                'ext': 'mp3', +                'title': 'Morgenjournal', +                'duration': 609, +                'timestamp': 1483858796, +                'upload_date': '20170108', +            }, +            'skip': 'Shows from ORF radios are only available for 7 days.' +        } +    ] + +  class ORFIPTVIE(InfoExtractor):      IE_NAME = 'orf:iptv'      IE_DESC = 'iptv.ORF.at' | 
