]>
 
 
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/flickr.py 
 
 
 
 
 
 
 
 
   1  from  __future__ 
import  unicode_literals
 
   3  from  . common 
import  InfoExtractor
 
   4  from  .. compat 
import  compat_urllib_parse
 
  12  class  FlickrIE ( InfoExtractor
):  
  13      _VALID_URL 
=  r
'https?://(?:www\.|secure\.)?flickr\.com/photos/[\w\-_@]+/(?P<id>\d+)'  
  15          'url' :  'http://www.flickr.com/photos/forestwander-nature-pictures/5645318632/in/photostream/' ,  
  16          'md5' :  '164fe3fa6c22e18d448d4d5af2330f31' ,  
  20              '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.' ,  
  21              'title' :  'Dark Hollow Waterfalls' ,  
  23              'timestamp' :  1303528740 ,  
  24              'upload_date' :  '20110423' ,  
  25              'uploader_id' :  '10922353@N03' ,  
  26              'uploader' :  'Forest Wander' ,  
  33      _API_BASE_URL 
=  'https://api.flickr.com/services/rest?'  
  35      def  _call_api ( self
,  method
,  video_id
,  api_key
,  note
,  secret
= None ):  
  38              'method' :  'flickr. %s '  %  method
,  
  44              query
[ 'secret' ] =  secret
 
  45          data 
=  self
._ download
_ json
( self
._ API
_ BASE
_U RL 
+  compat_urllib_parse
. urlencode ( query
),  video_id
,  note
)  
  46          if  data
[ 'stat' ] !=  'ok' :  
  47              raise  ExtractorError ( data
[ 'message' ])  
  50      def  _real_extract ( self
,  url
):  
  51          video_id 
=  self
._ match
_ id
( url
)  
  53          api_key 
=  self
._ download
_ json
(  
  54              'https://www.flickr.com/hermes_error_beacon.gne' ,  video_id
,  
  55              'Downloading api key' )[ 'site_key' ]  
  57          video_info 
=  self
._ call
_ api
(  
  58              'photos.getInfo' ,  video_id
,  api_key
,  'Downloading video info' )[ 'photo' ]  
  59          if  video_info
[ 'media' ] ==  'video' :  
  60              streams 
=  self
._ call
_ api
(  
  61                  'video.getStreamInfo' ,  video_id
,  api_key
,  
  62                  'Downloading streams info' ,  video_info
[ 'secret' ])[ 'streams' ]  
  64              preference 
=  qualities (  
  65                  [ '288p' ,  'iphone_wifi' ,  '100' ,  '300' ,  '700' ,  '360p' ,  'appletv' ,  '720p' ,  '1080p' ,  'orig' ])  
  68              for  stream 
in  streams
[ 'stream' ]:  
  69                  stream_type 
=  str ( stream
. get ( 'type' ))  
  71                      'format_id' :  stream_type
,  
  72                      'url' :  stream
[ '_content' ],  
  73                      'preference' :  preference ( stream_type
),  
  75              self
._ sort
_ formats
( formats
)  
  77              owner 
=  video_info
. get ( 'owner' , {})  
  81                  'title' :  video_info
[ 'title' ][ '_content' ],  
  82                  'description' :  video_info
. get ( 'description' , {}). get ( '_content' ),  
  84                  'timestamp' :  int_or_none ( video_info
. get ( 'dateuploaded' )),  
  85                  'duration' :  int_or_none ( video_info
. get ( 'video' , {}). get ( 'duration' )),  
  86                  'uploader_id' :  owner
. get ( 'nsid' ),  
  87                  'uploader' :  owner
. get ( 'realname' ),  
  88                  'comment_count' :  int_or_none ( video_info
. get ( 'comments' , {}). get ( '_content' )),  
  89                  'view_count' :  int_or_none ( video_info
. get ( 'views' )),  
  90                  'tags' : [ tag
. get ( '_content' )  for  tag 
in  video_info
. get ( 'tags' , {}). get ( 'tag' , [])]  
  93              raise  ExtractorError ( 'not a video' ,  expected
= True )