2014-01-07 03:04:48 -06:00
from __future__ import unicode_literals
2013-08-27 04:56:48 -05:00
import re
from . common import InfoExtractor
2016-08-28 10:43:15 -05:00
from . turner import TurnerBaseIE
from . . utils import url_basename
2013-08-27 04:56:48 -05:00
2013-08-27 17:14:19 -05:00
2016-08-28 10:43:15 -05:00
class CNNIE ( TurnerBaseIE ) :
2016-08-20 13:00:25 -05:00
_VALID_URL = r ''' (?x)https?://(?:(?P<sub_domain>edition|www|money) \ .)?cnn \ .com/(?:video/(?:data/.+?| \ ?)/)?videos?/
2015-05-23 13:04:02 -05:00
( ? P < path > . + ? / ( ? P < title > [ ^ / ] + ? ) ( ? : \. ( ? : [ a - z \- ] + ) | ( ? = & ) ) ) '''
2013-08-27 04:56:48 -05:00
2013-08-27 17:14:19 -05:00
_TESTS = [ {
2014-01-07 03:04:48 -06:00
' url ' : ' http://edition.cnn.com/video/?/video/sports/2013/06/09/nadal-1-on-1.cnn ' ,
' md5 ' : ' 3e6121ea48df7e2259fe73a0628605c4 ' ,
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' sports/2013/06/09/nadal-1-on-1.cnn ' ,
2014-11-04 15:25:08 -06:00
' ext ' : ' mp4 ' ,
2014-01-07 03:04:48 -06:00
' title ' : ' Nadal wins 8th French Open title ' ,
' description ' : ' World Sport \' s Amanda Davies chats with 2013 French Open champion Rafael Nadal. ' ,
' duration ' : 135 ,
' upload_date ' : ' 20130609 ' ,
2013-08-27 04:56:48 -05:00
} ,
2016-08-28 10:43:15 -05:00
' expected_warnings ' : [ ' Failed to download m3u8 information ' ] ,
2014-11-23 14:39:15 -06:00
} , {
2016-02-14 03:37:17 -06:00
' url ' : ' http://edition.cnn.com/video/?/video/us/2013/08/21/sot-student-gives-epic-speech.georgia-institute-of-technology&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed % 3A+rss %2F cnn_topstories+ % 28RSS % 3A+Top+Stories % 29 ' ,
' md5 ' : ' b5cc60c60a3477d185af8f19a2a26f4e ' ,
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' us/2013/08/21/sot-student-gives-epic-speech.georgia-institute-of-technology ' ,
2014-11-04 15:25:08 -06:00
' ext ' : ' mp4 ' ,
2016-02-14 03:37:17 -06:00
' title ' : " Student ' s epic speech stuns new freshmen " ,
' description ' : " A Georgia Tech student welcomes the incoming freshmen with an epic speech backed by music from \" 2001: A Space Odyssey. \" " ,
' upload_date ' : ' 20130821 ' ,
2016-08-28 10:43:15 -05:00
} ,
' expected_warnings ' : [ ' Failed to download m3u8 information ' ] ,
2014-12-29 13:50:28 -06:00
} , {
' url ' : ' http://www.cnn.com/video/data/2.0/video/living/2014/12/22/growing-america-nashville-salemtown-board-episode-1.hln.html ' ,
' md5 ' : ' f14d02ebd264df951feb2400e2c25a1b ' ,
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' living/2014/12/22/growing-america-nashville-salemtown-board-episode-1.hln ' ,
2014-12-29 13:50:28 -06:00
' ext ' : ' mp4 ' ,
' title ' : ' Nashville Ep. 1: Hand crafted skateboards ' ,
' description ' : ' md5:e7223a503315c9f150acac52e76de086 ' ,
' upload_date ' : ' 20141222 ' ,
2016-08-28 10:43:15 -05:00
} ,
' expected_warnings ' : [ ' Failed to download m3u8 information ' ] ,
2016-08-20 13:00:25 -05:00
} , {
' url ' : ' http://money.cnn.com/video/news/2016/08/19/netflix-stunning-stats.cnnmoney/index.html ' ,
' md5 ' : ' 52a515dc1b0f001cd82e4ceda32be9d1 ' ,
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' /video/news/2016/08/19/netflix-stunning-stats.cnnmoney ' ,
2016-08-20 13:00:25 -05:00
' ext ' : ' mp4 ' ,
' title ' : ' 5 stunning stats about Netflix ' ,
' description ' : ' Did you know that Netflix has more than 80 million members? Here are five facts about the online video distributor that you probably didn \' t know. ' ,
' upload_date ' : ' 20160819 ' ,
2016-08-28 10:43:15 -05:00
} ,
' params ' : {
# m3u8 download
' skip_download ' : True ,
} ,
2015-03-28 17:39:41 -05:00
} , {
' url ' : ' http://cnn.com/video/?/video/politics/2015/03/27/pkg-arizona-senator-church-attendance-mandatory.ktvk ' ,
' only_matching ' : True ,
2015-04-07 07:59:13 -05:00
} , {
' url ' : ' http://cnn.com/video/?/video/us/2015/04/06/dnt-baker-refuses-anti-gay-order.wkmg ' ,
' only_matching ' : True ,
2016-08-20 13:00:25 -05:00
} , {
' url ' : ' http://edition.cnn.com/videos/arts/2016/04/21/olympic-games-cultural-a-z-brazil.cnn ' ,
' only_matching ' : True ,
2013-08-27 17:14:19 -05:00
} ]
2013-08-27 04:56:48 -05:00
2016-08-20 13:00:25 -05:00
_CONFIG = {
# http://edition.cnn.com/.element/apps/cvp/3.0/cfg/spider/cnn/expansion/config.xml
' edition ' : {
' data_src ' : ' http://edition.cnn.com/video/data/3.0/video/ %s /index.xml ' ,
' media_src ' : ' http://pmd.cdn.turner.com/cnn/big ' ,
} ,
# http://money.cnn.com/.element/apps/cvp2/cfg/config.xml
' money ' : {
' data_src ' : ' http://money.cnn.com/video/data/4.0/video/ %s .xml ' ,
' media_src ' : ' http://ht3.cdn.turner.com/money/big ' ,
} ,
}
2016-08-29 13:26:53 -05:00
def _extract_timestamp ( self , video_data ) :
# TODO: fix timestamp extraction
return None
2013-08-27 04:56:48 -05:00
def _real_extract ( self , url ) :
2016-08-20 13:00:25 -05:00
sub_domain , path , page_title = re . match ( self . _VALID_URL , url ) . groups ( )
if sub_domain not in ( ' money ' , ' edition ' ) :
sub_domain = ' edition '
config = self . _CONFIG [ sub_domain ]
2016-08-28 10:43:15 -05:00
return self . _extract_cvp_info (
config [ ' data_src ' ] % path , page_title , {
' default ' : {
' media_src ' : config [ ' media_src ' ] ,
}
} )
2014-02-11 07:38:17 -06:00
class CNNBlogsIE ( InfoExtractor ) :
_VALID_URL = r ' https?://[^ \ .]+ \ .blogs \ .cnn \ .com/.+ '
_TEST = {
' url ' : ' http://reliablesources.blogs.cnn.com/2014/02/09/criminalizing-journalism/ ' ,
' md5 ' : ' 3e56f97b0b6ffb4b79f4ea0749551084 ' ,
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' bestoftv/2014/02/09/criminalizing-journalism.cnn ' ,
2014-02-11 07:38:17 -06:00
' ext ' : ' mp4 ' ,
' title ' : ' Criminalizing journalism? ' ,
' description ' : ' Glenn Greenwald responds to comments made this week on Capitol Hill that journalists could be criminal accessories. ' ,
' upload_date ' : ' 20140209 ' ,
} ,
2016-08-29 12:23:21 -05:00
' expected_warnings ' : [ ' Failed to download m3u8 information ' ] ,
2014-02-11 07:38:17 -06:00
' add_ie ' : [ ' CNN ' ] ,
}
def _real_extract ( self , url ) :
webpage = self . _download_webpage ( url , url_basename ( url ) )
cnn_url = self . _html_search_regex ( r ' data-url= " (.+?) " ' , webpage , ' cnn url ' )
2019-01-01 10:56:05 -06:00
return self . url_result ( cnn_url , CNNIE . ie_key ( ) )
2014-12-22 11:40:36 -06:00
class CNNArticleIE ( InfoExtractor ) :
2016-08-20 13:00:25 -05:00
_VALID_URL = r ' https?://(?:(?:edition|www) \ .)?cnn \ .com/(?!videos?/) '
2014-12-22 11:40:36 -06:00
_TEST = {
' url ' : ' http://www.cnn.com/2014/12/21/politics/obama-north-koreas-hack-not-war-but-cyber-vandalism/ ' ,
2015-01-21 03:27:18 -06:00
' md5 ' : ' 689034c2a3d9c6dc4aa72d65a81efd01 ' ,
2014-12-22 11:40:36 -06:00
' info_dict ' : {
2016-08-30 04:46:48 -05:00
' id ' : ' bestoftv/2014/12/21/ip-north-korea-obama.cnn ' ,
2014-12-22 11:40:36 -06:00
' ext ' : ' mp4 ' ,
2015-01-21 03:27:18 -06:00
' title ' : ' Obama: Cyberattack not an act of war ' ,
2016-08-29 12:23:21 -05:00
' description ' : ' md5:0a802a40d2376f60e6b04c8d5bcebc4b ' ,
2015-01-21 03:27:18 -06:00
' upload_date ' : ' 20141221 ' ,
2014-12-22 11:40:36 -06:00
} ,
2016-08-29 12:23:21 -05:00
' expected_warnings ' : [ ' Failed to download m3u8 information ' ] ,
2014-12-22 11:40:36 -06:00
' add_ie ' : [ ' CNN ' ] ,
}
def _real_extract ( self , url ) :
webpage = self . _download_webpage ( url , url_basename ( url ) )
cnn_url = self . _html_search_regex ( r " video: \ s* ' ([^ ' ]+) ' " , webpage , ' cnn url ' )
2019-01-01 10:56:05 -06:00
return self . url_result ( ' http://cnn.com/video/?/video/ ' + cnn_url , CNNIE . ie_key ( ) )