]>
Raphaël G. Git Repositories - youtubedl/blob - youtube_dl/extractor/niconico.py
   2 from __future__ 
import unicode_literals
 
   6 from .common 
import InfoExtractor
 
  18 class NiconicoIE(InfoExtractor
): 
  23         'url': 'http://www.nicovideo.jp/watch/sm22312215', 
  24         'md5': 'd1a75c0823e2f629128c43e1212760f9', 
  28             'title': 'Big Buck Bunny', 
  29             'uploader': 'takuya0301', 
  30             'uploader_id': '2698420', 
  31             'upload_date': '20131123', 
  32             'description': '(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org', 
  35             'username': 'ydl.niconico@gmail.com', 
  36             'password': 'youtube-dl', 
  40     _VALID_URL 
= r
'^https?://(?:www\.|secure\.)?nicovideo\.jp/watch/([a-z][a-z][0-9]+)(?:.*)$' 
  41     _NETRC_MACHINE 
= 'niconico' 
  43     def _real_initialize(self
): 
  47         (username
, password
) = self
._get
_login
_info
() 
  50             raise ExtractorError('No login info available, needed for using %s.' % self
.IE_NAME
, expected
=True) 
  57         # Convert to UTF-8 *before* urlencode because Python 2.x's urlencode 
  59         login_form 
= dict((k
.encode('utf-8'), v
.encode('utf-8')) for k
, v 
in login_form_strs
.items()) 
  60         login_data 
= compat_urllib_parse
.urlencode(login_form
).encode('utf-8') 
  61         request 
= compat_urllib_request
.Request( 
  62             'https://secure.nicovideo.jp/secure/login', login_data
) 
  63         login_results 
= self
._download
_webpage
( 
  64             request
, None, note
='Logging in', errnote
='Unable to log in') 
  65         if re
.search(r
'(?i)<h1 class="mb8p4">Log in error</h1>', login_results
) is not None: 
  66             self
._downloader
.report_warning('unable to log in: bad username or password') 
  70     def _real_extract(self
, url
): 
  71         mobj 
= re
.match(self
._VALID
_URL
, url
) 
  72         video_id 
= mobj
.group(1) 
  74         # Get video webpage. We are not actually interested in it, but need 
  75         # the cookies in order to be able to download the info webpage 
  76         self
._download
_webpage
('http://www.nicovideo.jp/watch/' + video_id
, video_id
) 
  78         video_info 
= self
._download
_xml
( 
  79             'http://ext.nicovideo.jp/api/getthumbinfo/' + video_id
, video_id
, 
  80             note
='Downloading video info page') 
  83         flv_info_webpage 
= self
._download
_webpage
( 
  84             'http://flapi.nicovideo.jp/api/getflv?v=' + video_id
, 
  85             video_id
, 'Downloading flv info') 
  86         video_real_url 
= compat_urlparse
.parse_qs(flv_info_webpage
)['url'][0] 
  88         # Start extracting information 
  89         video_title 
= video_info
.find('.//title').text
 
  90         video_extension 
= video_info
.find('.//movie_type').text
 
  91         video_format 
= video_extension
.upper() 
  92         video_thumbnail 
= video_info
.find('.//thumbnail_url').text
 
  93         video_description 
= video_info
.find('.//description').text
 
  94         video_uploader_id 
= video_info
.find('.//user_id').text
 
  95         video_upload_date 
= unified_strdate(video_info
.find('.//first_retrieve').text
.split('+')[0]) 
  96         video_view_count 
= video_info
.find('.//view_counter').text
 
  97         video_webpage_url 
= video_info
.find('.//watch_url').text
 
 100         video_uploader 
= video_uploader_id
 
 101         url 
= 'http://seiga.nicovideo.jp/api/user/info?id=' + video_uploader_id
 
 103             user_info 
= self
._download
_xml
( 
 104                 url
, video_id
, note
='Downloading user information') 
 105             video_uploader 
= user_info
.find('.//nickname').text
 
 106         except ExtractorError 
as err
: 
 107             self
._downloader
.report_warning('Unable to download user info webpage: %s' % compat_str(err
)) 
 111             'url': video_real_url
, 
 112             'title': video_title
, 
 113             'ext': video_extension
, 
 114             'format': video_format
, 
 115             'thumbnail': video_thumbnail
, 
 116             'description': video_description
, 
 117             'uploader': video_uploader
, 
 118             'upload_date': video_upload_date
, 
 119             'uploader_id': video_uploader_id
, 
 120             'view_count': video_view_count
, 
 121             'webpage_url': video_webpage_url
,