mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-02 19:36:45 +00:00
parent
069c6ccf02
commit
d984a98def
|
@ -12,6 +12,7 @@
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
float_or_none,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
qualities,
|
qualities,
|
||||||
|
@ -96,6 +97,14 @@ class OdnoklassnikiIE(InfoExtractor):
|
||||||
'skip_download': True,
|
'skip_download': True,
|
||||||
},
|
},
|
||||||
'skip': 'Video has not been found',
|
'skip': 'Video has not been found',
|
||||||
|
}, {
|
||||||
|
'note': 'Only available in mobile webpage',
|
||||||
|
'url': 'https://m.ok.ru/video/2361249957145',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '2361249957145',
|
||||||
|
'title': 'Быковское крещение',
|
||||||
|
'duration': 3038.181,
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://ok.ru/web-api/video/moviePlayer/20079905452',
|
'url': 'http://ok.ru/web-api/video/moviePlayer/20079905452',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
|
@ -131,13 +140,24 @@ def _extract_url(webpage):
|
||||||
return mobj.group('url')
|
return mobj.group('url')
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
try:
|
||||||
|
return self._extract_desktop(url)
|
||||||
|
except ExtractorError as e:
|
||||||
|
try:
|
||||||
|
return self._extract_mobile(url)
|
||||||
|
except ExtractorError:
|
||||||
|
# error message of desktop webpage is in English
|
||||||
|
raise e
|
||||||
|
|
||||||
|
def _extract_desktop(self, url):
|
||||||
start_time = int_or_none(compat_parse_qs(
|
start_time = int_or_none(compat_parse_qs(
|
||||||
compat_urllib_parse_urlparse(url).query).get('fromTime', [None])[0])
|
compat_urllib_parse_urlparse(url).query).get('fromTime', [None])[0])
|
||||||
|
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
webpage = self._download_webpage(
|
webpage = self._download_webpage(
|
||||||
'http://ok.ru/video/%s' % video_id, video_id)
|
'http://ok.ru/video/%s' % video_id, video_id,
|
||||||
|
note='Downloading desktop webpage')
|
||||||
|
|
||||||
error = self._search_regex(
|
error = self._search_regex(
|
||||||
r'[^>]+class="vp_video_stub_txt"[^>]*>([^<]+)<',
|
r'[^>]+class="vp_video_stub_txt"[^>]*>([^<]+)<',
|
||||||
|
@ -265,3 +285,32 @@ def _real_extract(self, url):
|
||||||
|
|
||||||
info['formats'] = formats
|
info['formats'] = formats
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
def _extract_mobile(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
|
||||||
|
webpage = self._download_webpage(
|
||||||
|
'http://m.ok.ru/video/%s' % video_id, video_id,
|
||||||
|
note='Downloading mobile webpage')
|
||||||
|
|
||||||
|
error = self._search_regex(
|
||||||
|
r'видео</a>\s*<div\s+class="empty">(.+?)</div>',
|
||||||
|
webpage, 'error', default=None)
|
||||||
|
if error:
|
||||||
|
raise ExtractorError(error, expected=True)
|
||||||
|
|
||||||
|
json_data = self._search_regex(
|
||||||
|
r'data-video="(.+?)"', webpage, 'json data')
|
||||||
|
json_data = self._parse_json(unescapeHTML(json_data), video_id) or {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'title': json_data.get('videoName'),
|
||||||
|
'duration': float_or_none(json_data.get('videoDuration'), scale=1000),
|
||||||
|
'thumbnail': json_data.get('videoPosterSrc'),
|
||||||
|
'formats': [{
|
||||||
|
'format_id': 'mobile',
|
||||||
|
'url': json_data.get('videoSrc'),
|
||||||
|
'ext': 'mp4',
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue