Merge remote-tracking branch 'origin/master'

This commit is contained in:
lm 2017-01-15 16:28:07 +01:00
commit f574879233
2 changed files with 18 additions and 30 deletions

View File

@ -1,3 +1,8 @@
version <unreleased>
Extractors
+ [niconico] Support login via cookies (#7968)
version 2017.01.14 version 2017.01.14
Core Core

View File

@ -7,7 +7,6 @@ import datetime
from .common import InfoExtractor from .common import InfoExtractor
from ..compat import ( from ..compat import (
compat_urllib_parse_urlencode,
compat_urlparse, compat_urlparse,
) )
from ..utils import ( from ..utils import (
@ -40,6 +39,7 @@ class NiconicoIE(InfoExtractor):
'description': '(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org', 'description': '(c) copyright 2008, Blender Foundation / www.bigbuckbunny.org',
'duration': 33, 'duration': 33,
}, },
'skip': 'Requires an account',
}, { }, {
# File downloaded with and without credentials are different, so omit # File downloaded with and without credentials are different, so omit
# the md5 field # the md5 field
@ -55,6 +55,7 @@ class NiconicoIE(InfoExtractor):
'timestamp': 1304065916, 'timestamp': 1304065916,
'duration': 209, 'duration': 209,
}, },
'skip': 'Requires an account',
}, { }, {
# 'video exists but is marked as "deleted" # 'video exists but is marked as "deleted"
# md5 is unstable # md5 is unstable
@ -65,9 +66,10 @@ class NiconicoIE(InfoExtractor):
'description': 'deleted', 'description': 'deleted',
'title': 'ドラえもんエターナル第3話「決戦第3新東京市」前編', 'title': 'ドラえもんエターナル第3話「決戦第3新東京市」前編',
'upload_date': '20071224', 'upload_date': '20071224',
'timestamp': 1198527840, # timestamp field has different value if logged in 'timestamp': int, # timestamp field has different value if logged in
'duration': 304, 'duration': 304,
}, },
'skip': 'Requires an account',
}, { }, {
'url': 'http://www.nicovideo.jp/watch/so22543406', 'url': 'http://www.nicovideo.jp/watch/so22543406',
'info_dict': { 'info_dict': {
@ -79,13 +81,12 @@ class NiconicoIE(InfoExtractor):
'upload_date': '20140104', 'upload_date': '20140104',
'uploader': 'アニメロチャンネル', 'uploader': 'アニメロチャンネル',
'uploader_id': '312', 'uploader_id': '312',
} },
'skip': 'The viewing period of the video you were searching for has expired.',
}] }]
_VALID_URL = r'https?://(?:www\.|secure\.)?nicovideo\.jp/watch/(?P<id>(?:[a-z]{2})?[0-9]+)' _VALID_URL = r'https?://(?:www\.|secure\.)?nicovideo\.jp/watch/(?P<id>(?:[a-z]{2})?[0-9]+)'
_NETRC_MACHINE = 'niconico' _NETRC_MACHINE = 'niconico'
# Determine whether the downloader used authentication to download video
_AUTHENTICATED = False
def _real_initialize(self): def _real_initialize(self):
self._login() self._login()
@ -109,8 +110,6 @@ class NiconicoIE(InfoExtractor):
if re.search(r'(?i)<h1 class="mb8p4">Log in error</h1>', login_results) is not None: if re.search(r'(?i)<h1 class="mb8p4">Log in error</h1>', login_results) is not None:
self._downloader.report_warning('unable to log in: bad username or password') self._downloader.report_warning('unable to log in: bad username or password')
return False return False
# Successful login
self._AUTHENTICATED = True
return True return True
def _real_extract(self, url): def _real_extract(self, url):
@ -128,35 +127,19 @@ class NiconicoIE(InfoExtractor):
'http://ext.nicovideo.jp/api/getthumbinfo/' + video_id, video_id, 'http://ext.nicovideo.jp/api/getthumbinfo/' + video_id, video_id,
note='Downloading video info page') note='Downloading video info page')
if self._AUTHENTICATED:
# Get flv info # Get flv info
flv_info_webpage = self._download_webpage( flv_info_webpage = self._download_webpage(
'http://flapi.nicovideo.jp/api/getflv/' + video_id + '?as3=1', 'http://flapi.nicovideo.jp/api/getflv/' + video_id + '?as3=1',
video_id, 'Downloading flv info') video_id, 'Downloading flv info')
else:
# Get external player info
ext_player_info = self._download_webpage(
'http://ext.nicovideo.jp/thumb_watch/' + video_id, video_id)
thumb_play_key = self._search_regex(
r'\'thumbPlayKey\'\s*:\s*\'(.*?)\'', ext_player_info, 'thumbPlayKey')
# Get flv info
flv_info_data = compat_urllib_parse_urlencode({
'k': thumb_play_key,
'v': video_id
})
flv_info_request = sanitized_Request(
'http://ext.nicovideo.jp/thumb_watch', flv_info_data,
{'Content-Type': 'application/x-www-form-urlencoded'})
flv_info_webpage = self._download_webpage(
flv_info_request, video_id,
note='Downloading flv info', errnote='Unable to download flv info')
flv_info = compat_urlparse.parse_qs(flv_info_webpage) flv_info = compat_urlparse.parse_qs(flv_info_webpage)
if 'url' not in flv_info: if 'url' not in flv_info:
if 'deleted' in flv_info: if 'deleted' in flv_info:
raise ExtractorError('The video has been deleted.', raise ExtractorError('The video has been deleted.',
expected=True) expected=True)
elif 'closed' in flv_info:
raise ExtractorError('Niconico videos now require logging in',
expected=True)
else: else:
raise ExtractorError('Unable to find video URL') raise ExtractorError('Unable to find video URL')