[noco] Adjust timestamp according to server time (Closes #7864)
This commit is contained in:
		| @@ -9,6 +9,7 @@ from .common import InfoExtractor | ||||
| from ..compat import ( | ||||
|     compat_str, | ||||
|     compat_urllib_parse, | ||||
|     compat_urlparse, | ||||
| ) | ||||
| from ..utils import ( | ||||
|     clean_html, | ||||
| @@ -82,14 +83,21 @@ class NocoIE(InfoExtractor): | ||||
|         if 'erreur' in login: | ||||
|             raise ExtractorError('Unable to login: %s' % clean_html(login['erreur']), expected=True) | ||||
|  | ||||
|     @staticmethod | ||||
|     def _ts(): | ||||
|         return int(time.time() * 1000) | ||||
|  | ||||
|     def _call_api(self, path, video_id, note, sub_lang=None): | ||||
|         ts = compat_str(int(time.time() * 1000)) | ||||
|         ts = compat_str(self._ts() + self._ts_offset) | ||||
|         tk = hashlib.md5((hashlib.md5(ts.encode('ascii')).hexdigest() + '#8S?uCraTedap6a').encode('ascii')).hexdigest() | ||||
|         url = self._API_URL_TEMPLATE % (path, ts, tk) | ||||
|         if sub_lang: | ||||
|             url += self._SUB_LANG_TEMPLATE % sub_lang | ||||
|  | ||||
|         resp = self._download_json(url, video_id, note) | ||||
|         request = sanitized_Request(url) | ||||
|         request.add_header('Referer', self._referer) | ||||
|  | ||||
|         resp = self._download_json(request, video_id, note) | ||||
|  | ||||
|         if isinstance(resp, dict) and resp.get('error'): | ||||
|             self._raise_error(resp['error'], resp['description']) | ||||
| @@ -105,6 +113,21 @@ class NocoIE(InfoExtractor): | ||||
|         mobj = re.match(self._VALID_URL, url) | ||||
|         video_id = mobj.group('id') | ||||
|  | ||||
|         # Timestamp adjustment offset between server time and local time | ||||
|         # must be calculated in order to use timestamps closest to server's | ||||
|         # in all API requests (see https://github.com/rg3/youtube-dl/issues/7864) | ||||
|         webpage = self._download_webpage(url, video_id) | ||||
|  | ||||
|         player_url = self._search_regex( | ||||
|             r'(["\'])(?P<player>https?://noco\.tv/(?:[^/]+/)+NocoPlayer.+?\.swf.*?)\1', | ||||
|             webpage, 'noco player', group='player', | ||||
|             default='http://noco.tv/cdata/js/player/NocoPlayer-v1.2.40.swf') | ||||
|  | ||||
|         qs = compat_urlparse.parse_qs(compat_urlparse.urlparse(player_url).query) | ||||
|         ts = int_or_none(qs.get('ts', [None])[0]) | ||||
|         self._ts_offset = ts - self._ts() if ts else 0 | ||||
|         self._referer = player_url | ||||
|  | ||||
|         medias = self._call_api( | ||||
|             'shows/%s/medias' % video_id, | ||||
|             video_id, 'Downloading video JSON') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user