2013-10-05 09:37:11 +02:00
# encoding: utf-8
2014-02-24 14:44:29 +01:00
from __future__ import unicode_literals
2014-05-28 14:38:44 +02:00
2015-08-16 15:53:14 +02:00
import re
2013-10-05 09:37:11 +02:00
from . common import InfoExtractor
from . . utils import (
2014-05-28 14:38:44 +02:00
int_or_none ,
2014-12-12 02:11:58 +01:00
unified_strdate ,
2015-07-22 13:34:42 +02:00
js_to_json ,
2013-10-05 09:37:11 +02:00
)
2014-12-07 11:52:03 +01:00
2014-12-12 02:11:58 +01:00
class ScreenwaveMediaIE ( InfoExtractor ) :
2016-04-25 17:49:12 +02:00
_VALID_URL = r ' (?:https?:)?//player \ d? \ .screenwavemedia \ .com/(?:play/)?[a-zA-Z]+ \ .php \ ?.* \ bid=(?P<id>[A-Za-z0-9-]+) '
2015-08-29 14:57:44 +02:00
EMBED_PATTERN = r ' src=([ " \' ])(?P<url>(?:https?:)?//player \ d? \ .screenwavemedia \ .com/(?:play/)?[a-zA-Z]+ \ .php \ ?.* \ bid=.+?) \ 1 '
2014-12-12 02:11:58 +01:00
_TESTS = [ {
' url ' : ' http://player.screenwavemedia.com/play/play.php?playerdiv=videoarea&companiondiv=squareAd&id=Cinemassacre-19911 ' ,
' only_matching ' : True ,
} ]
2014-12-07 11:51:02 +01:00
2014-12-12 02:11:58 +01:00
def _real_extract ( self , url ) :
video_id = self . _match_id ( url )
2015-05-14 12:39:35 +02:00
playerdata = self . _download_webpage (
2015-07-22 13:34:42 +02:00
' http://player.screenwavemedia.com/player.php?id= %s ' % video_id ,
2015-05-14 12:39:35 +02:00
video_id , ' Downloading player webpage ' )
2014-12-07 11:51:02 +01:00
vidtitle = self . _search_regex (
2014-12-12 02:11:58 +01:00
r ' \' vidtitle \' \ s*: \ s* " ([^ " ]+) " ' , playerdata , ' vidtitle ' ) . replace ( ' \\ / ' , ' / ' )
2015-07-22 13:34:42 +02:00
playerconfig = self . _download_webpage (
' http://player.screenwavemedia.com/player.js ' ,
video_id , ' Downloading playerconfig webpage ' )
2015-08-29 08:00:25 +02:00
videoserver = self . _search_regex ( r ' SWMServer \ s*= \ s* " ([ \ d \ .]+) " ' , playerdata , ' videoserver ' )
2015-07-22 13:34:42 +02:00
sources = self . _parse_json (
js_to_json (
2015-08-16 15:53:14 +02:00
re . sub (
r ' (?s)/ \ *.*? \ */ ' , ' ' ,
self . _search_regex (
2016-02-14 10:37:17 +01:00
r ' sources \ s*: \ s*( \ [[^ \ ]]+? \ ]) ' , playerconfig ,
2015-08-16 15:53:14 +02:00
' sources ' ,
) . replace (
" ' + thisObj.options.videoserver + ' " ,
videoserver
) . replace (
" ' + playerVidId + ' " ,
video_id
)
2015-07-22 13:34:42 +02:00
)
) ,
2015-08-16 16:18:15 +02:00
video_id , fatal = False
2015-07-22 13:34:42 +02:00
)
2015-08-16 16:18:15 +02:00
# Fallback to hardcoded sources if JS changes again
if not sources :
2015-08-29 08:01:10 +02:00
self . report_warning ( ' Falling back to a hardcoded list of streams ' )
2015-08-16 16:18:15 +02:00
sources = [ {
' file ' : ' http:// %s /vod/ %s _ %s .mp4 ' % ( videoserver , video_id , format_id ) ,
' type ' : ' mp4 ' ,
' label ' : format_label ,
} for format_id , format_label in (
( ' low ' , ' 144p Low ' ) , ( ' med ' , ' 160p Med ' ) , ( ' high ' , ' 360p High ' ) , ( ' hd1 ' , ' 720p HD1 ' ) ) ]
sources . append ( {
' file ' : ' http:// %s /vod/smil: %s .smil/playlist.m3u8 ' % ( videoserver , video_id ) ,
' type ' : ' hls ' ,
} )
2015-07-22 13:34:42 +02:00
formats = [ ]
for source in sources :
2016-02-28 15:05:58 +01:00
file_ = source . get ( ' file ' )
if not file_ :
continue
if source . get ( ' type ' ) == ' hls ' :
formats . extend ( self . _extract_m3u8_formats ( file_ , video_id , ext = ' mp4 ' ) )
2015-07-22 13:34:42 +02:00
else :
2015-08-16 16:18:15 +02:00
format_id = self . _search_regex (
r ' _(.+?) \ .[^.]+$ ' , file_ , ' format id ' , default = None )
2016-02-28 16:46:36 +01:00
if not self . _is_valid_url ( file_ , video_id , format_id or ' video ' ) :
continue
format_label = source . get ( ' label ' )
2015-07-22 13:34:42 +02:00
height = int_or_none ( self . _search_regex (
r ' ^( \ d+)[pP] ' , format_label , ' height ' , default = None ) )
formats . append ( {
2016-02-28 15:05:58 +01:00
' url ' : file_ ,
2015-08-16 16:18:15 +02:00
' format_id ' : format_id ,
2015-07-22 13:34:42 +02:00
' format ' : format_label ,
' ext ' : source . get ( ' type ' ) ,
' height ' : height ,
} )
2016-02-28 15:16:31 +01:00
self . _sort_formats ( formats , field_preference = ( ' height ' , ' width ' , ' tbr ' , ' format_id ' ) )
2013-10-05 09:37:11 +02:00
2013-10-23 20:21:25 +02:00
return {
2013-10-11 20:36:50 +02:00
' id ' : video_id ,
2014-12-07 11:51:02 +01:00
' title ' : vidtitle ,
2013-10-11 20:36:50 +02:00
' formats ' : formats ,
}
2014-12-07 11:51:02 +01:00
2014-12-12 02:11:58 +01:00
class TeamFourIE ( InfoExtractor ) :
_VALID_URL = r ' https?://(?:www \ .)?teamfourstar \ .com/video/(?P<id>[a-z0-9 \ -]+)/? '
_TEST = {
' url ' : ' http://teamfourstar.com/video/a-moment-with-tfs-episode-4/ ' ,
' info_dict ' : {
' id ' : ' TeamFourStar-5292a02f20bfa ' ,
' ext ' : ' mp4 ' ,
' upload_date ' : ' 20130401 ' ,
' description ' : ' Check out this and more on our website: http://teamfourstar.com \n TFS Store: http://sharkrobot.com/team-four-star \n Follow on Twitter: http://twitter.com/teamfourstar \n Like on FB: http://facebook.com/teamfourstar ' ,
' title ' : ' A Moment With TFS Episode 4 ' ,
2016-01-30 20:38:20 +01:00
} ,
' params ' : {
# m3u8 download
' skip_download ' : True ,
} ,
2014-12-12 02:11:58 +01:00
}
2014-12-07 11:51:02 +01:00
2014-12-12 02:11:58 +01:00
def _real_extract ( self , url ) :
display_id = self . _match_id ( url )
webpage = self . _download_webpage ( url , display_id )
playerdata_url = self . _search_regex (
2015-05-14 12:39:35 +02:00
r ' src= " (http://player \ d? \ .screenwavemedia \ .com/(?:play/)?[a-zA-Z]+ \ .php \ ?[^ " ]* \ bid=.+?) " ' ,
2014-12-12 02:11:58 +01:00
webpage , ' player data URL ' )
video_title = self . _html_search_regex (
r ' <div class= " heroheadingtitle " >(?P<title>.+?)</div> ' ,
webpage , ' title ' )
video_date = unified_strdate ( self . _html_search_regex (
r ' <div class= " heroheadingdate " >(?P<date>.+?)</div> ' ,
webpage , ' date ' , fatal = False ) )
video_description = self . _html_search_regex (
r ' ( ?s)<div class= " postcontent " >(?P<description>.+?)</div> ' ,
webpage , ' description ' , fatal = False )
video_thumbnail = self . _og_search_thumbnail ( webpage )
2014-12-07 11:51:02 +01:00
2014-12-12 02:11:58 +01:00
return {
' _type ' : ' url_transparent ' ,
' display_id ' : display_id ,
' title ' : video_title ,
' description ' : video_description ,
' upload_date ' : video_date ,
' thumbnail ' : video_thumbnail ,
' url ' : playerdata_url ,
}