Browse Source

Merge pull request #3431 from sehaas/fm4

[fm4] Add new extractor
totalwebcasting
Sergey M. 11 years ago
parent
commit
c7a088a816
2 changed files with 50 additions and 0 deletions
  1. +1
    -0
      youtube_dl/extractor/__init__.py
  2. +49
    -0
      youtube_dl/extractor/fm4.py

+ 1
- 0
youtube_dl/extractor/__init__.py View File

@ -96,6 +96,7 @@ from .fktv import (
FKTVPosteckeIE, FKTVPosteckeIE,
) )
from .flickr import FlickrIE from .flickr import FlickrIE
from .fm4 import FM4IE
from .fourtube import FourTubeIE from .fourtube import FourTubeIE
from .franceculture import FranceCultureIE from .franceculture import FranceCultureIE
from .franceinter import FranceInterIE from .franceinter import FranceInterIE


+ 49
- 0
youtube_dl/extractor/fm4.py View File

@ -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…
Cancel
Save