]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/nowtv.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
   7 from ..compat 
import compat_str
 
  18 class NowTVBaseIE(InfoExtractor
): 
  20         'id', 'title', 'free', 'geoblocked', 'articleLong', 'articleShort', 
  21         'broadcastStartDate', 'seoUrl', 'duration', 'files', 
  22         'format.defaultImage169Format', 'format.defaultImage169Logo') 
  24     def _extract_video(self
, info
, display_id
=None): 
  25         video_id 
= compat_str(info
['id']) 
  29             if info
.get('geoblocked', False): 
  31                     'Video %s is not available from your location due to geo restriction' % video_id
, 
  33             if not info
.get('free', True): 
  35                     'Video %s is not available for free' % video_id
, expected
=True) 
  38         for item 
in files
['items']: 
  39             if determine_ext(item
['path']) != 'f4v': 
  41             app
, play_path 
= remove_start(item
['path'], '/').split('/', 1) 
  43                 'url': 'rtmpe://fms.rtl.de', 
  45                 'play_path': 'mp4:%s' % play_path
, 
  47                 'page_url': 'http://rtlnow.rtl.de', 
  48                 'player_url': 'http://cdn.static-fra.de/now/vodplayer.swf', 
  49                 'tbr': int_or_none(item
.get('bitrate')), 
  51         self
._sort
_formats
(formats
) 
  54         description 
= info
.get('articleLong') or info
.get('articleShort') 
  55         timestamp 
= parse_iso8601(info
.get('broadcastStartDate'), ' ') 
  56         duration 
= parse_duration(info
.get('duration')) 
  58         f 
= info
.get('format', {}) 
  59         thumbnail 
= f
.get('defaultImage169Format') or f
.get('defaultImage169Logo') 
  63             'display_id': display_id 
or info
.get('seoUrl'), 
  65             'description': description
, 
  66             'thumbnail': thumbnail
, 
  67             'timestamp': timestamp
, 
  73 class NowTVIE(NowTVBaseIE
): 
  75     _VALID_URL 
= r
'https?://(?:www\.)?nowtv\.(?:de|at|ch)/(?:rtl|rtl2|rtlnitro|superrtl|ntv|vox)/(?P<show_id>[^/]+)/(?:(?:list/[^/]+|jahr/\d{4}/\d{1,2})/)?(?P<id>[^/]+)/(?:player|preview)' 
  79         'url': 'http://www.nowtv.de/rtl/bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit/player', 
  82             'display_id': 'bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit', 
  84             'title': 'Inka Bause stellt die neuen Bauern vor', 
  85             'description': 'md5:e234e1ed6d63cf06be5c070442612e7e', 
  86             'thumbnail': 're:^https?://.*\.jpg$', 
  87             'timestamp': 1432580700, 
  88             'upload_date': '20150525', 
  93             'skip_download': True, 
  97         'url': 'http://www.nowtv.de/rtl2/berlin-tag-nacht/berlin-tag-nacht-folge-934/player', 
 100             'display_id': 'berlin-tag-nacht/berlin-tag-nacht-folge-934', 
 102             'title': 'Berlin - Tag & Nacht (Folge 934)', 
 103             'description': 'md5:c85e88c2e36c552dfe63433bc9506dd0', 
 104             'thumbnail': 're:^https?://.*\.jpg$', 
 105             'timestamp': 1432666800, 
 106             'upload_date': '20150526', 
 111             'skip_download': True, 
 115         'url': 'http://www.nowtv.de/rtlnitro/alarm-fuer-cobra-11-die-autobahnpolizei/hals-und-beinbruch-2014-08-23-21-10-00/player', 
 118             'display_id': 'alarm-fuer-cobra-11-die-autobahnpolizei/hals-und-beinbruch-2014-08-23-21-10-00', 
 120             'title': 'Hals- und Beinbruch', 
 121             'description': 'md5:b50d248efffe244e6f56737f0911ca57', 
 122             'thumbnail': 're:^https?://.*\.jpg$', 
 123             'timestamp': 1432415400, 
 124             'upload_date': '20150523', 
 129             'skip_download': True, 
 133         'url': 'http://www.nowtv.de/superrtl/medicopter-117/angst/player', 
 136             'display_id': 'medicopter-117/angst', 
 139             'description': 'md5:30cbc4c0b73ec98bcd73c9f2a8c17c4e', 
 140             'thumbnail': 're:^https?://.*\.jpg$', 
 141             'timestamp': 1222632900, 
 142             'upload_date': '20080928', 
 147             'skip_download': True, 
 151         'url': 'http://www.nowtv.de/ntv/ratgeber-geld/thema-ua-der-erste-blick-die-apple-watch/player', 
 154             'display_id': 'ratgeber-geld/thema-ua-der-erste-blick-die-apple-watch', 
 156             'title': 'Thema u.a.: Der erste Blick: Die Apple Watch', 
 157             'description': 'md5:4312b6c9d839ffe7d8caf03865a531af', 
 158             'thumbnail': 're:^https?://.*\.jpg$', 
 159             'timestamp': 1432751700, 
 160             'upload_date': '20150527', 
 165             'skip_download': True, 
 169         'url': 'http://www.nowtv.de/vox/der-hundeprofi/buero-fall-chihuahua-joel/player', 
 172             'display_id': 'der-hundeprofi/buero-fall-chihuahua-joel', 
 174             'title': "Büro-Fall / Chihuahua 'Joel'", 
 175             'description': 'md5:e62cb6bf7c3cc669179d4f1eb279ad8d', 
 176             'thumbnail': 're:^https?://.*\.jpg$', 
 177             'timestamp': 1432408200, 
 178             'upload_date': '20150523', 
 183             'skip_download': True, 
 186         'url': 'http://www.nowtv.de/rtl/bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit/preview', 
 187         'only_matching': True, 
 189         'url': 'http://www.nowtv.at/rtl/bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit/preview?return=/rtl/bauer-sucht-frau/die-neuen-bauern-und-eine-hochzeit', 
 190         'only_matching': True, 
 192         'url': 'http://www.nowtv.de/rtl2/echtzeit/list/aktuell/schnelles-geld-am-ende-der-welt/player', 
 193         'only_matching': True, 
 195         'url': 'http://www.nowtv.de/rtl2/zuhause-im-glueck/jahr/2015/11/eine-erschuetternde-diagnose/player', 
 196         'only_matching': True, 
 199     def _real_extract(self
, url
): 
 200         mobj 
= re
.match(self
._VALID
_URL
, url
) 
 201         display_id 
= '%s/%s' % (mobj
.group('show_id'), mobj
.group('id')) 
 203         info 
= self
._download
_json
( 
 204             'https://api.nowtv.de/v3/movies/%s?fields=%s' 
 205             % (display_id
, ','.join(self
._VIDEO
_FIELDS
)), display_id
) 
 207         return self
._extract
_video
(info
, display_id
) 
 210 class NowTVListIE(NowTVBaseIE
): 
 211     _VALID_URL 
= r
'https?://(?:www\.)?nowtv\.(?:de|at|ch)/(?:rtl|rtl2|rtlnitro|superrtl|ntv|vox)/(?P<show_id>[^/]+)/list/(?P<id>[^?/#&]+)$' 
 213     _SHOW_FIELDS 
= ('title', ) 
 214     _SEASON_FIELDS 
= ('id', 'headline', 'seoheadline', ) 
 217         'url': 'http://www.nowtv.at/rtl/stern-tv/list/aktuell', 
 220             'title': 'stern TV - Aktuell', 
 224         'url': 'http://www.nowtv.at/rtl/das-supertalent/list/free-staffel-8', 
 227             'title': 'Das Supertalent - FREE Staffel 8', 
 229         'playlist_count': 14, 
 232     def _real_extract(self
, url
): 
 233         mobj 
= re
.match(self
._VALID
_URL
, url
) 
 234         show_id 
= mobj
.group('show_id') 
 235         season_id 
= mobj
.group('id') 
 238         fields
.extend(self
._SHOW
_FIELDS
) 
 239         fields
.extend('formatTabs.%s' % field 
for field 
in self
._SEASON
_FIELDS
) 
 241             'formatTabs.formatTabPages.container.movies.%s' % field
 
 242             for field 
in self
._VIDEO
_FIELDS
) 
 244         list_info 
= self
._download
_json
( 
 245             'https://api.nowtv.de/v3/formats/seo?fields=%s&name=%s.php' 
 246             % (','.join(fields
), show_id
), 
 250             season 
for season 
in list_info
['formatTabs']['items'] 
 251             if season
.get('seoheadline') == season_id
) 
 253         title 
= '%s - %s' % (list_info
['title'], season
['headline']) 
 256         for container 
in season
['formatTabPages']['items']: 
 257             for info 
in ((container
.get('container') or {}).get('movies') or {}).get('items') or []: 
 258                 entries
.append(self
._extract
_video
(info
)) 
 260         return self
.playlist_result( 
 261             entries
, compat_str(season
.get('id') or season_id
), title
)