@ -1,3 +1,5 @@
from __future__ import unicode_literals
import re
import re
from . common import InfoExtractor
from . common import InfoExtractor
@ -11,13 +13,13 @@ class FlickrIE(InfoExtractor):
""" Information Extractor for Flickr videos """
""" Information Extractor for Flickr videos """
_VALID_URL = r ' (?:https?://)?(?:www \ .|secure \ .)?flickr \ .com/photos/(?P<uploader_id>[ \ w \ -_@]+)/(?P<id> \ d+).* '
_VALID_URL = r ' (?:https?://)?(?:www \ .|secure \ .)?flickr \ .com/photos/(?P<uploader_id>[ \ w \ -_@]+)/(?P<id> \ d+).* '
_TEST = {
_TEST = {
u ' url ' : u ' http://www.flickr.com/photos/forestwander-nature-pictures/5645318632/in/photostream/ ' ,
' url ' : ' http://www.flickr.com/photos/forestwander-nature-pictures/5645318632/in/photostream/ ' ,
u ' file ' : u ' 5645318632.mp4 ' ,
' file ' : ' 5645318632.mp4 ' ,
u ' md5 ' : u ' 6fdc01adbc89d72fc9c4f15b4a4ba87b ' ,
' md5 ' : ' 6fdc01adbc89d72fc9c4f15b4a4ba87b ' ,
u ' info_dict ' : {
' info_dict ' : {
u " description " : u " Waterfalls in the Springtime at Dark Hollow Waterfalls. These are located just off of Skyline Drive in Virginia. They are only about 6/10 of a mile hike but it is a pretty steep hill and a good climb back up. " ,
" description " : " Waterfalls in the Springtime at Dark Hollow Waterfalls. These are located just off of Skyline Drive in Virginia. They are only about 6/10 of a mile hike but it is a pretty steep hill and a good climb back up. " ,
u " uploader_id " : u " forestwander-nature-pictures " ,
" uploader_id " : " forestwander-nature-pictures " ,
u " title " : u " Dark Hollow Waterfalls "
" title " : " Dark Hollow Waterfalls "
}
}
}
}
@ -29,13 +31,13 @@ class FlickrIE(InfoExtractor):
webpage_url = ' http://www.flickr.com/photos/ ' + video_uploader_id + ' / ' + video_id
webpage_url = ' http://www.flickr.com/photos/ ' + video_uploader_id + ' / ' + video_id
webpage = self . _download_webpage ( webpage_url , video_id )
webpage = self . _download_webpage ( webpage_url , video_id )
secret = self . _search_regex ( r " photo_secret: ' ( \ w+) ' " , webpage , u ' secret ' )
secret = self . _search_regex ( r " photo_secret: ' ( \ w+) ' " , webpage , ' secret ' )
first_url = ' https://secure.flickr.com/apps/video/video_mtl_xml.gne?v=x&photo_id= ' + video_id + ' &secret= ' + secret + ' &bitrate=700&target=_self '
first_url = ' https://secure.flickr.com/apps/video/video_mtl_xml.gne?v=x&photo_id= ' + video_id + ' &secret= ' + secret + ' &bitrate=700&target=_self '
first_xml = self . _download_webpage ( first_url , video_id , ' Downloading first data webpage ' )
first_xml = self . _download_webpage ( first_url , video_id , ' Downloading first data webpage ' )
node_id = self . _html_search_regex ( r ' <Item id= " id " >( \ d+- \ d+)</Item> ' ,
node_id = self . _html_search_regex ( r ' <Item id= " id " >( \ d+- \ d+)</Item> ' ,
first_xml , u ' node_id ' )
first_xml , ' node_id ' )
second_url = ' https://secure.flickr.com/video_playlist.gne?node_id= ' + node_id + ' &tech=flash&mode=playlist&bitrate=700&secret= ' + secret + ' &rd=video.yahoo.com&noad=1 '
second_url = ' https://secure.flickr.com/video_playlist.gne?node_id= ' + node_id + ' &tech=flash&mode=playlist&bitrate=700&secret= ' + secret + ' &rd=video.yahoo.com&noad=1 '
second_xml = self . _download_webpage ( second_url , video_id , ' Downloading second data webpage ' )
second_xml = self . _download_webpage ( second_url , video_id , ' Downloading second data webpage ' )
@ -44,7 +46,7 @@ class FlickrIE(InfoExtractor):
mobj = re . search ( r ' <STREAM APP= " (.+?) " FULLPATH= " (.+?) " ' , second_xml )
mobj = re . search ( r ' <STREAM APP= " (.+?) " FULLPATH= " (.+?) " ' , second_xml )
if mobj is None :
if mobj is None :
raise ExtractorError ( u ' Unable to extract video url ' )
raise ExtractorError ( ' Unable to extract video url ' )
video_url = mobj . group ( 1 ) + unescapeHTML ( mobj . group ( 2 ) )
video_url = mobj . group ( 1 ) + unescapeHTML ( mobj . group ( 2 ) )
return [ {
return [ {