|
|
|
@ -13,11 +13,12 @@ from ..utils import (
|
|
|
|
|
js_to_json,
|
|
|
|
|
parse_age_limit,
|
|
|
|
|
parse_duration,
|
|
|
|
|
try_get,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ViewLiftBaseIE(InfoExtractor):
|
|
|
|
|
_DOMAINS_REGEX = r'(?:snagfilms|snagxtreme|funnyforfree|kiddovid|winnersview|(?:monumental|lax)sportsnetwork|vayafilm)\.com|hoichoi\.tv'
|
|
|
|
|
_DOMAINS_REGEX = r'(?:(?:main\.)?snagfilms|snagxtreme|funnyforfree|kiddovid|winnersview|(?:monumental|lax)sportsnetwork|vayafilm)\.com|hoichoi\.tv'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ViewLiftEmbedIE(ViewLiftBaseIE):
|
|
|
|
@ -113,7 +114,7 @@ class ViewLiftEmbedIE(ViewLiftBaseIE):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ViewLiftIE(ViewLiftBaseIE):
|
|
|
|
|
_VALID_URL = r'https?://(?:www\.)?(?P<domain>%s)/(?:films/title|show|(?:news/)?videos?)/(?P<id>[^?#]+)' % ViewLiftBaseIE._DOMAINS_REGEX
|
|
|
|
|
_VALID_URL = r'https?://(?:www\.)?(?P<domain>%s)(?:/(?:films/title|show|(?:news/)?videos?))?/(?P<id>[^?#]+)' % ViewLiftBaseIE._DOMAINS_REGEX
|
|
|
|
|
_TESTS = [{
|
|
|
|
|
'url': 'http://www.snagfilms.com/films/title/lost_for_life',
|
|
|
|
|
'md5': '19844f897b35af219773fd63bdec2942',
|
|
|
|
@ -128,7 +129,7 @@ class ViewLiftIE(ViewLiftBaseIE):
|
|
|
|
|
'categories': 'mincount:3',
|
|
|
|
|
'age_limit': 14,
|
|
|
|
|
'upload_date': '20150421',
|
|
|
|
|
'timestamp': 1429656819,
|
|
|
|
|
'timestamp': 1429656820,
|
|
|
|
|
}
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://www.snagfilms.com/show/the_world_cut_project/india',
|
|
|
|
@ -141,10 +142,26 @@ class ViewLiftIE(ViewLiftBaseIE):
|
|
|
|
|
'description': 'md5:5c168c5a8f4719c146aad2e0dfac6f5f',
|
|
|
|
|
'thumbnail': r're:^https?://.*\.jpg',
|
|
|
|
|
'duration': 979,
|
|
|
|
|
'categories': 'mincount:2',
|
|
|
|
|
'timestamp': 1399478279,
|
|
|
|
|
'upload_date': '20140507',
|
|
|
|
|
}
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://main.snagfilms.com/augie_alone/s_2_ep_12_love',
|
|
|
|
|
'info_dict': {
|
|
|
|
|
'id': '00000148-7b53-de26-a9fb-fbf306f70020',
|
|
|
|
|
'display_id': 'augie_alone/s_2_ep_12_love',
|
|
|
|
|
'ext': 'mp4',
|
|
|
|
|
'title': 'Augie, Alone:S. 2 Ep. 12 - Love',
|
|
|
|
|
'description': 'md5:db2a5c72d994f16a780c1eb353a8f403',
|
|
|
|
|
'thumbnail': r're:^https?://.*\.jpg',
|
|
|
|
|
'duration': 107,
|
|
|
|
|
},
|
|
|
|
|
'params': {
|
|
|
|
|
'skip_download': True,
|
|
|
|
|
},
|
|
|
|
|
}, {
|
|
|
|
|
'url': 'http://main.snagfilms.com/films/title/the_freebie',
|
|
|
|
|
'only_matching': True,
|
|
|
|
|
}, {
|
|
|
|
|
# Film is not playable in your area.
|
|
|
|
|
'url': 'http://www.snagfilms.com/films/title/inside_mecca',
|
|
|
|
@ -181,7 +198,21 @@ class ViewLiftIE(ViewLiftBaseIE):
|
|
|
|
|
gist = content_data['gist']
|
|
|
|
|
film_id = gist['id']
|
|
|
|
|
title = gist['title']
|
|
|
|
|
video_assets = content_data['streamingInfo']['videoAssets']
|
|
|
|
|
video_assets = try_get(
|
|
|
|
|
content_data, lambda x: x['streamingInfo']['videoAssets'], dict)
|
|
|
|
|
if not video_assets:
|
|
|
|
|
token = self._download_json(
|
|
|
|
|
'https://prod-api.viewlift.com/identity/anonymous-token',
|
|
|
|
|
film_id, 'Downloading authorization token',
|
|
|
|
|
query={'site': 'snagfilms'})['authorizationToken']
|
|
|
|
|
video_assets = self._download_json(
|
|
|
|
|
'https://prod-api.viewlift.com/entitlement/video/status',
|
|
|
|
|
film_id, headers={
|
|
|
|
|
'Authorization': token,
|
|
|
|
|
'Referer': url,
|
|
|
|
|
}, query={
|
|
|
|
|
'id': film_id
|
|
|
|
|
})['video']['streamingInfo']['videoAssets']
|
|
|
|
|
|
|
|
|
|
formats = []
|
|
|
|
|
mpeg_video_assets = video_assets.get('mpeg') or []
|
|
|
|
@ -241,8 +272,9 @@ class ViewLiftIE(ViewLiftBaseIE):
|
|
|
|
|
if category.get('title')]
|
|
|
|
|
break
|
|
|
|
|
else:
|
|
|
|
|
title = self._search_regex(
|
|
|
|
|
r'itemprop="title">([^<]+)<', webpage, 'title')
|
|
|
|
|
title = self._html_search_regex(
|
|
|
|
|
(r'itemprop="title">([^<]+)<',
|
|
|
|
|
r'(?s)itemprop="title">(.+?)<div'), webpage, 'title')
|
|
|
|
|
description = self._html_search_regex(
|
|
|
|
|
r'(?s)<div itemprop="description" class="film-synopsis-inner ">(.+?)</div>',
|
|
|
|
|
webpage, 'description', default=None) or self._og_search_description(webpage)
|
|
|
|
|