commit
c7a088a816
2 changed files with 50 additions and 0 deletions
@ -0,0 +1,49 @@ |
|||||||
|
# coding: utf-8 |
||||||
|
from __future__ import unicode_literals |
||||||
|
|
||||||
|
import calendar |
||||||
|
import datetime |
||||||
|
import re |
||||||
|
|
||||||
|
from .common import InfoExtractor |
||||||
|
|
||||||
|
# audios on fm4.orf.at are only available for 7 days, so we can't |
||||||
|
# add tests. |
||||||
|
|
||||||
|
|
||||||
|
class FM4IE(InfoExtractor): |
||||||
|
IE_DESC = 'fm4.orf.at' |
||||||
|
_VALID_URL = r'http://fm4\.orf\.at/7tage#(?P<date>[0-9]+)/(?P<show>[\w]+)' |
||||||
|
|
||||||
|
def _extract_entry_dict(self, info, title, subtitle): |
||||||
|
result = { |
||||||
|
'id': info['loopStreamId'].replace('.mp3', ''), |
||||||
|
'url': 'http://loopstream01.apa.at/?channel=fm4&id=%s' % info['loopStreamId'], |
||||||
|
'title': title, |
||||||
|
'description': subtitle, |
||||||
|
'duration': (info['end'] - info['start']) / 1000, |
||||||
|
'timestamp': info['start'] / 1000, |
||||||
|
'ext': 'mp3' |
||||||
|
} |
||||||
|
|
||||||
|
return result |
||||||
|
|
||||||
|
def _real_extract(self, url): |
||||||
|
mobj = re.match(self._VALID_URL, url) |
||||||
|
show_date = mobj.group('date') |
||||||
|
show_id = mobj.group('show') |
||||||
|
|
||||||
|
data = self._download_json( |
||||||
|
'http://audioapi.orf.at/fm4/json/2.0/broadcasts/%s/4%s' % (show_date, show_id), |
||||||
|
show_id |
||||||
|
) |
||||||
|
|
||||||
|
entries = [ self._extract_entry_dict(t, data['title'], data['subtitle']) for t in data['streams']] |
||||||
|
|
||||||
|
return { |
||||||
|
'_type': 'playlist', |
||||||
|
'id': show_id, |
||||||
|
'title': data['title'], |
||||||
|
'description': data['subtitle'], |
||||||
|
'entries': entries |
||||||
|
} |
Loading…
Reference in new issue