diff options
author | Yen Chi Hsuan <yan12125@gmail.com> | 2017-09-16 02:28:28 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-16 02:28:28 +0800 |
commit | a88d461dff67205fcec684426afbcbeb4b0e7cf5 (patch) | |
tree | f5a0ba57242b84aafba2c37740855f9169f47a8d /youtube_dl/extractor | |
parent | a4245acef85ac2414e77cf2cda4cb39adb617241 (diff) | |
parent | feee8d32e45c9521426cf4a089c70f37542f0065 (diff) |
Merge pull request #14225 from Tithen-Firion/openload-phantomjs-method
Openload phantomjs method
Diffstat (limited to 'youtube_dl/extractor')
-rw-r--r-- | youtube_dl/extractor/common.py | 8 | ||||
-rw-r--r-- | youtube_dl/extractor/openload.py | 64 |
2 files changed, 27 insertions, 45 deletions
diff --git a/youtube_dl/extractor/common.py b/youtube_dl/extractor/common.py index 74d30ec50..317a9a76f 100644 --- a/youtube_dl/extractor/common.py +++ b/youtube_dl/extractor/common.py @@ -2449,10 +2449,12 @@ class InfoExtractor(object): self._downloader.report_warning(msg) return res - def _set_cookie(self, domain, name, value, expire_time=None): + def _set_cookie(self, domain, name, value, expire_time=None, port=None, + path='/', secure=False, discard=False, rest={}, **kwargs): cookie = compat_cookiejar.Cookie( - 0, name, value, None, None, domain, None, - None, '/', True, False, expire_time, '', None, None, None) + 0, name, value, port, not port is None, domain, True, + domain.startswith('.'), path, True, secure, expire_time, + discard, None, None, rest) self._downloader.cookiejar.set_cookie(cookie) def _get_cookies(self, url): diff --git a/youtube_dl/extractor/openload.py b/youtube_dl/extractor/openload.py index d8036b54a..292476ef8 100644 --- a/youtube_dl/extractor/openload.py +++ b/youtube_dl/extractor/openload.py @@ -4,10 +4,11 @@ from __future__ import unicode_literals import re from .common import InfoExtractor -from ..compat import compat_chr from ..utils import ( determine_ext, ExtractorError, + get_element_by_id, + PhantomJSwrapper, ) @@ -58,6 +59,8 @@ class OpenloadIE(InfoExtractor): 'only_matching': True, }] + _USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36' + @staticmethod def _extract_urls(webpage): return re.findall( @@ -66,47 +69,22 @@ class OpenloadIE(InfoExtractor): def _real_extract(self, url): video_id = self._match_id(url) - webpage = self._download_webpage('https://openload.co/embed/%s/' % video_id, video_id) + url = 'https://openload.co/embed/%s/' % video_id + headers = { + 'User-Agent': self._USER_AGENT, + } + + webpage = self._download_webpage(url, video_id, headers=headers) if 'File not found' in webpage or 'deleted by the owner' in webpage: - raise ExtractorError('File not found', expected=True) - - ol_id = self._search_regex( - '<span[^>]+id="[^"]+"[^>]*>([0-9A-Za-z]+)</span>', - webpage, 'openload ID') - - decoded = '' - a = ol_id[0:24] - b = [] - for i in range(0, len(a), 8): - b.append(int(a[i:i + 8] or '0', 16)) - ol_id = ol_id[24:] - j = 0 - k = 0 - while j < len(ol_id): - c = 128 - d = 0 - e = 0 - f = 0 - _more = True - while _more: - if j + 1 >= len(ol_id): - c = 143 - f = int(ol_id[j:j + 2] or '0', 16) - j += 2 - d += (f & 127) << e - e += 7 - _more = f >= c - g = d ^ b[k % 3] - for i in range(4): - char_dec = (g >> 8 * i) & (c + 127) - char = compat_chr(char_dec) - if char != '#': - decoded += char - k += 1 - - video_url = 'https://openload.co/stream/%s?mime=true' - video_url = video_url % decoded + raise ExtractorError('File not found', expected=True, video_id=video_id) + + phantom = PhantomJSwrapper(self, required_version='2.0') + webpage, _ = phantom.get(url, html=webpage, video_id=video_id, headers=headers) + + decoded_id = get_element_by_id('streamurl', webpage) + + video_url = 'https://openload.co/stream/%s?mime=true' % decoded_id title = self._og_search_title(webpage, default=None) or self._search_regex( r'<span[^>]+class=["\']title["\'][^>]*>([^<]+)', webpage, @@ -114,15 +92,17 @@ class OpenloadIE(InfoExtractor): 'description', webpage, 'title', fatal=True) entries = self._parse_html5_media_entries(url, webpage, video_id) - subtitles = entries[0]['subtitles'] if entries else None + entry = entries[0] if entries else {} + subtitles = entry.get('subtitles') info_dict = { 'id': video_id, 'title': title, - 'thumbnail': self._og_search_thumbnail(webpage, default=None), + 'thumbnail': entry.get('thumbnail') or self._og_search_thumbnail(webpage, default=None), 'url': video_url, # Seems all videos have extensions in their titles 'ext': determine_ext(title, 'mp4'), 'subtitles': subtitles, + 'http_headers': headers, } return info_dict |