X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fvk.py;h=90557fa61d53f356dd430f698df028a842617e5d;hb=9f0ee2a3883ec6f6fdccba90085cb925aaa2f617;hp=93c5b18c9bb8b8c3c16c6fbf849f28bdbaf349c2;hpb=dc786d3db59a611cbcb716a476602719e74a34e5;p=youtube-dl
diff --git a/youtube_dl/extractor/vk.py b/youtube_dl/extractor/vk.py
index 93c5b18c9..90557fa61 100644
--- a/youtube_dl/extractor/vk.py
+++ b/youtube_dl/extractor/vk.py
@@ -8,19 +8,22 @@ from .common import InfoExtractor
from ..compat import (
compat_str,
compat_urllib_parse,
- compat_urllib_request,
)
from ..utils import (
ExtractorError,
orderedSet,
+ sanitized_Request,
str_to_int,
unescapeHTML,
unified_strdate,
)
+from .vimeo import VimeoIE
+from .pladform import PladformIE
class VKIE(InfoExtractor):
- IE_NAME = 'vk.com'
+ IE_NAME = 'vk'
+ IE_DESC = 'VK'
_VALID_URL = r'''(?x)
https?://
(?:
@@ -153,10 +156,20 @@ class VKIE(InfoExtractor):
'url': 'http://vk.com/feed?z=video-43215063_166094326%2Fbb50cacd3177146d7a',
'only_matching': True,
},
+ {
+ # age restricted video, requires vk account credentials
+ 'url': 'https://vk.com/video205387401_164765225',
+ 'only_matching': True,
+ },
{
# vk wrapper
'url': 'http://www.biqle.ru/watch/847655_160197695',
'only_matching': True,
+ },
+ {
+ # pladform embed
+ 'url': 'https://vk.com/video-76116461_171554880',
+ 'only_matching': True,
}
]
@@ -175,7 +188,7 @@ class VKIE(InfoExtractor):
'pass': password.encode('cp1251'),
})
- request = compat_urllib_request.Request(
+ request = sanitized_Request(
'https://login.vk.com/?act=login',
compat_urllib_parse.urlencode(login_form).encode('utf-8'))
login_page = self._download_webpage(
@@ -204,6 +217,12 @@ class VKIE(InfoExtractor):
info_page = self._download_webpage(info_url, video_id)
+ error_message = self._html_search_regex(
+ r'(?s)
]+class="video_layer_message"[^>]*>(.+?)
',
+ info_page, 'error message', default=None)
+ if error_message:
+ raise ExtractorError(error_message, expected=True)
+
if re.search(r'/login\.php\?.*\bact=security_check', info_page):
raise ExtractorError(
'You are trying to log in from an unusual location. You should confirm ownership at vk.com to log in with this IP.',
@@ -237,10 +256,17 @@ class VKIE(InfoExtractor):
if youtube_url:
return self.url_result(youtube_url, 'Youtube')
+ vimeo_url = VimeoIE._extract_vimeo_url(url, info_page)
+ if vimeo_url is not None:
+ return self.url_result(vimeo_url)
+
+ pladform_url = PladformIE._extract_url(info_page)
+ if pladform_url:
+ return self.url_result(pladform_url)
+
m_rutube = re.search(
r'\ssrc="((?:https?:)?//rutube\.ru\\?/video\\?/embed(?:.*?))\\?"', info_page)
if m_rutube is not None:
- self.to_screen('rutube video detected')
rutube_url = self._proto_relative_url(
m_rutube.group(1).replace('\\', ''))
return self.url_result(rutube_url)
@@ -264,9 +290,13 @@ class VKIE(InfoExtractor):
mobj.group(1) + ' ' + mobj.group(2)
upload_date = unified_strdate(mobj.group(1) + ' ' + mobj.group(2))
- view_count = str_to_int(self._search_regex(
- r'"mv_views_count_number"[^>]*>([\d,.]+) views<',
- info_page, 'view count', fatal=False))
+ view_count = None
+ views = self._html_search_regex(
+ r'"mv_views_count_number"[^>]*>(.+?\bviews?)<',
+ info_page, 'view count', fatal=False)
+ if views:
+ view_count = str_to_int(self._search_regex(
+ r'([\d,.]+)', views, 'view count', fatal=False))
formats = [{
'format_id': k,
@@ -289,8 +319,8 @@ class VKIE(InfoExtractor):
class VKUserVideosIE(InfoExtractor):
- IE_NAME = 'vk.com:user-videos'
- IE_DESC = 'vk.com:All of a user\'s videos'
+ IE_NAME = 'vk:uservideos'
+ IE_DESC = "VK - User's Videos"
_VALID_URL = r'https?://vk\.com/videos(?P-?[0-9]+)$'
_TEMPLATE_URL = 'https://vk.com/videos'
_TESTS = [{
@@ -313,7 +343,7 @@ class VKUserVideosIE(InfoExtractor):
entries = [
self.url_result(
'http://vk.com/video' + video_id, 'VK', video_id=video_id)
- for video_id in set(re.findall(r'href="/video(-?[0-9_]+)"', webpage))]
+ for video_id in orderedSet(re.findall(r'href="/video(-?[0-9_]+)"', webpage))]
title = unescapeHTML(self._search_regex(
r'\s*([^<]+?)\s+\|\s+\d+\s+videos',