]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/aenetworks.py
   1 from __future__ 
import unicode_literals
 
   5 from .theplatform 
import ThePlatformIE
 
  11     get_element_by_attribute
, 
  13 from ..compat 
import ( 
  18 class AENetworksBaseIE(ThePlatformIE
): 
  19     _THEPLATFORM_KEY 
= 'crazyjava' 
  20     _THEPLATFORM_SECRET 
= 's3cr3t' 
  23 class AENetworksIE(AENetworksBaseIE
): 
  24     IE_NAME 
= 'aenetworks' 
  25     IE_DESC 
= 'A+E Networks: A&E, Lifetime, History.com, FYI Network' 
  26     _VALID_URL 
= r
'https?://(?:www\.)?(?P<domain>(?:history|aetv|mylifetime|lifetimemovieclub)\.com|fyi\.tv)/(?:shows/(?P<show_path>[^/]+(?:/[^/]+){0,2})|movies/(?P<movie_display_id>[^/]+)(?:/full-movie)?)' 
  28         'url': 'http://www.history.com/shows/mountain-men/season-1/episode-1', 
  29         'md5': 'a97a65f7e823ae10e9244bc5433d5fe6', 
  33             'title': 'Winter Is Coming', 
  34             'description': 'md5:641f424b7a19d8e24f26dea22cf59d74', 
  35             'timestamp': 1338306241, 
  36             'upload_date': '20120529', 
  37             'uploader': 'AENE-NEW', 
  39         'add_ie': ['ThePlatform'], 
  41         'url': 'http://www.history.com/shows/ancient-aliens/season-1', 
  45         'playlist_mincount': 5, 
  47         'url': 'http://www.mylifetime.com/shows/atlanta-plastic', 
  50             'title': 'Atlanta Plastic', 
  52         'playlist_mincount': 2, 
  54         'url': 'http://www.aetv.com/shows/duck-dynasty/season-9/episode-1', 
  57         'url': 'http://www.fyi.tv/shows/tiny-house-nation/season-1/episode-8', 
  60         'url': 'http://www.mylifetime.com/shows/project-runway-junior/season-1/episode-6', 
  63         'url': 'http://www.mylifetime.com/movies/center-stage-on-pointe/full-movie', 
  66         'url': 'https://www.lifetimemovieclub.com/movies/a-killer-among-us', 
  69     _DOMAIN_TO_REQUESTOR_ID 
= { 
  70         'history.com': 'HISTORY', 
  72         'mylifetime.com': 'LIFETIME', 
  73         'lifetimemovieclub.com': 'LIFETIMEMOVIECLUB', 
  77     def _real_extract(self
, url
): 
  78         domain
, show_path
, movie_display_id 
= re
.match(self
._VALID
_URL
, url
).groups() 
  79         display_id 
= show_path 
or movie_display_id
 
  80         webpage 
= self
._download
_webpage
(url
, display_id
) 
  82             url_parts 
= show_path
.split('/') 
  83             url_parts_len 
= len(url_parts
) 
  84             if url_parts_len 
== 1: 
  86                 for season_url_path 
in re
.findall(r
'(?s)<li[^>]+data-href="(/shows/%s/season-\d+)"' % url_parts
[0], webpage
): 
  87                     entries
.append(self
.url_result( 
  88                         compat_urlparse
.urljoin(url
, season_url_path
), 'AENetworks')) 
  89                 return self
.playlist_result( 
  90                     entries
, self
._html
_search
_meta
('aetn:SeriesId', webpage
), 
  91                     self
._html
_search
_meta
('aetn:SeriesTitle', webpage
)) 
  92             elif url_parts_len 
== 2: 
  94                 for episode_item 
in re
.findall(r
'(?s)<[^>]+class="[^"]*(?:episode|program)-item[^"]*"[^>]*>', webpage
): 
  95                     episode_attributes 
= extract_attributes(episode_item
) 
  96                     episode_url 
= compat_urlparse
.urljoin( 
  97                         url
, episode_attributes
['data-canonical']) 
  98                     entries
.append(self
.url_result( 
  99                         episode_url
, 'AENetworks', 
 100                         episode_attributes
['data-videoid'])) 
 101                 return self
.playlist_result( 
 102                     entries
, self
._html
_search
_meta
('aetn:SeasonId', webpage
)) 
 106             'assetTypes': 'high_video_s3' 
 108         video_id 
= self
._html
_search
_meta
('aetn:VideoID', webpage
) 
 109         media_url 
= self
._search
_regex
( 
 110             r
"media_url\s*=\s*'([^']+)'", webpage
, 'video url') 
 111         theplatform_metadata 
= self
._download
_theplatform
_metadata
(self
._search
_regex
( 
 112             r
'https?://link.theplatform.com/s/([^?]+)', media_url
, 'theplatform_path'), video_id
) 
 113         info 
= self
._parse
_theplatform
_metadata
(theplatform_metadata
) 
 114         if theplatform_metadata
.get('AETN$isBehindWall'): 
 115             requestor_id 
= self
._DOMAIN
_TO
_REQUESTOR
_ID
[domain
] 
 116             resource 
= self
._get
_mvpd
_resource
( 
 117                 requestor_id
, theplatform_metadata
['title'], 
 118                 theplatform_metadata
.get('AETN$PPL_pplProgramId') or theplatform_metadata
.get('AETN$PPL_pplProgramId_OLD'), 
 119                 theplatform_metadata
['ratings'][0]['rating']) 
 120             query
['auth'] = self
._extract
_mvpd
_auth
( 
 121                 url
, video_id
, requestor_id
, resource
) 
 122         info
.update(self
._search
_json
_ld
(webpage
, video_id
, fatal
=False)) 
 123         media_url 
= update_url_query(media_url
, query
) 
 124         media_url 
= self
._sign
_url
(media_url
, self
._THEPLATFORM
_KEY
, self
._THEPLATFORM
_SECRET
) 
 125         formats
, subtitles 
= self
._extract
_theplatform
_smil
(media_url
, video_id
) 
 126         self
._sort
_formats
(formats
) 
 130             'subtitles': subtitles
, 
 135 class HistoryTopicIE(AENetworksBaseIE
): 
 136     IE_NAME 
= 'history:topic' 
 137     IE_DESC 
= 'History.com Topic' 
 138     _VALID_URL 
= r
'https?://(?:www\.)?history\.com/topics/(?:[^/]+/)?(?P<topic_id>[^/]+)(?:/[^/]+(?:/(?P<video_display_id>[^/?#]+))?)?' 
 140         'url': 'http://www.history.com/topics/valentines-day/history-of-valentines-day/videos/bet-you-didnt-know-valentines-day?m=528e394da93ae&s=undefined&f=1&free=false', 
 144             'title': "Bet You Didn't Know: Valentine's Day", 
 145             'description': 'md5:7b57ea4829b391995b405fa60bd7b5f7', 
 146             'timestamp': 1375819729, 
 147             'upload_date': '20130806', 
 148             'uploader': 'AENE-NEW', 
 152             'skip_download': True, 
 154         'add_ie': ['ThePlatform'], 
 156         'url': 'http://www.history.com/topics/world-war-i/world-war-i-history/videos', 
 159             'id': 'world-war-i-history', 
 160             'title': 'World War I History', 
 162         'playlist_mincount': 23, 
 164         'url': 'http://www.history.com/topics/world-war-i-history/videos', 
 165         'only_matching': True, 
 167         'url': 'http://www.history.com/topics/world-war-i/world-war-i-history', 
 168         'only_matching': True, 
 170         'url': 'http://www.history.com/topics/world-war-i/world-war-i-history/speeches', 
 171         'only_matching': True, 
 174     def theplatform_url_result(self
, theplatform_url
, video_id
, query
): 
 176             '_type': 'url_transparent', 
 179                 update_url_query(theplatform_url
, query
), 
 182                         'key': self
._THEPLATFORM
_KEY
, 
 183                         'secret': self
._THEPLATFORM
_SECRET
, 
 185                     'force_smil_url': True 
 187             'ie_key': 'ThePlatform', 
 190     def _real_extract(self
, url
): 
 191         topic_id
, video_display_id 
= re
.match(self
._VALID
_URL
, url
).groups() 
 193             webpage 
= self
._download
_webpage
(url
, video_display_id
) 
 194             release_url
, video_id 
= re
.search(r
"_videoPlayer.play\('([^']+)'\s*,\s*'[^']+'\s*,\s*'(\d+)'\)", webpage
).groups() 
 195             release_url 
= unescapeHTML(release_url
) 
 197             return self
.theplatform_url_result( 
 198                 release_url
, video_id
, { 
 201                     'assetTypes': 'high_video_ak', 
 204             webpage 
= self
._download
_webpage
(url
, topic_id
) 
 206             for episode_item 
in re
.findall(r
'<a.+?data-release-url="[^"]+"[^>]*>', webpage
): 
 207                 video_attributes 
= extract_attributes(episode_item
) 
 208                 entries
.append(self
.theplatform_url_result( 
 209                     video_attributes
['data-release-url'], video_attributes
['data-id'], { 
 212                         'assetTypes': 'high_video_ak', 
 214             return self
.playlist_result(entries
, topic_id
, get_element_by_attribute('class', 'show-title', webpage
))