[dbtv] Add new extractor

This commit is contained in:
Magnus Kolstad 2014-09-05 11:24:30 +02:00
parent ee90ddab94
commit f063a04f07
2 changed files with 77 additions and 0 deletions

View file

@ -62,6 +62,7 @@ from .dailymotion import (
DailymotionUserIE, DailymotionUserIE,
) )
from .daum import DaumIE from .daum import DaumIE
from .dbtv import DBTVIE
from .dotsub import DotsubIE from .dotsub import DotsubIE
from .dreisat import DreiSatIE from .dreisat import DreiSatIE
from .drtv import DRTVIE from .drtv import DRTVIE

View file

@ -0,0 +1,76 @@
# coding: utf-8
from __future__ import unicode_literals
import re
from .common import InfoExtractor
from ..utils import (
ExtractorError
)
class DBTVIE(InfoExtractor):
_VALID_URL = r'http://dbtv.no/(?P<id>[0-9]+)/?(?P<slug>.*)$'
_TEST = {
'url': 'http://dbtv.no/3649835190001#Skulle_teste_ut_fornøyelsespark,_men_kollegaen_var_bare_opptatt_av_bikinikroppen',
'md5': 'b89953ed25dacb6edb3ef6c6f430f8bc',
'info_dict': {
'id': '3649835190001',
'ext': 'mp4',
'title': 'Skulle teste ut fornøyelsespark, men kollegaen var bare opptatt av bikinikroppen',
'description': 'md5:d681bf2bb7dd3503892cedb9c2d0e6f2',
'thumbnail': 'http://gfx.dbtv.no/thumbs/still/33100.jpg',
'timestamp': 1404039863,
'upload_date': '20140629',
'duration': 69544,
}
}
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('id')
# Download JSON file containing video info.
data = self._download_json('http://api.dbtv.no/discovery/%s' % video_id, video_id, 'Downloading media JSON')
# We only want the first video in the JSON API file.
video = data['playlist'][0]
# Check for full HD video, else use the standard video URL
for i in range(0, len(video['renditions'])):
if int(video['renditions'][i]['width']) == 1280:
video_url = video['renditions'][i]['URL']
break
else:
video_url = video['URL']
# Add access token to image or it will fail.
thumbnail = video['splash']
# Duration int.
duration = int(video['length'])
# Timestamp is given in milliseconds.
timestamp = float(str(video['publishedAt'])[0:-3])
formats = []
# Video URL.
if video['URL'] is not None:
formats.append({
'url': video_url,
'format_id': 'mp4',
'ext': 'mp4'
})
else:
raise ExtractorError('No download URL found for video: %s.' % video_id, expected=True)
return {
'id': video_id,
'title': video['title'],
'description': video['desc'],
'thumbnail': thumbnail,
'timestamp': timestamp,
'duration': duration,
'view_count': video['views'],
'formats': formats,
}