mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-08-08 13:38:29 +00:00
[ie/TVer] Extract Streaks API info (#13885)
Closes #13874 Authored by: bashonly
This commit is contained in:
parent
42ca3d601e
commit
70d7687487
@ -33,16 +33,20 @@ def _extract_from_streaks_api(self, project_id, media_id, headers=None, query=No
|
|||||||
**(headers or {}),
|
**(headers or {}),
|
||||||
})
|
})
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if isinstance(e.cause, HTTPError) and e.cause.status in {403, 404}:
|
if isinstance(e.cause, HTTPError) and e.cause.status in (403, 404):
|
||||||
error = self._parse_json(e.cause.response.read().decode(), media_id, fatal=False)
|
error = self._parse_json(e.cause.response.read().decode(), media_id, fatal=False)
|
||||||
message = traverse_obj(error, ('message', {str}))
|
message = traverse_obj(error, ('message', {str}))
|
||||||
code = traverse_obj(error, ('code', {str}))
|
code = traverse_obj(error, ('code', {str}))
|
||||||
|
error_id = traverse_obj(error, ('id', {int}))
|
||||||
if code == 'REQUEST_FAILED':
|
if code == 'REQUEST_FAILED':
|
||||||
self.raise_geo_restricted(message, countries=self._GEO_COUNTRIES)
|
if error_id == 124:
|
||||||
elif code == 'MEDIA_NOT_FOUND':
|
self.raise_geo_restricted(countries=self._GEO_COUNTRIES)
|
||||||
raise ExtractorError(message, expected=True)
|
elif error_id == 126:
|
||||||
elif code or message:
|
raise ExtractorError('Access is denied (possibly due to invalid/missing API key)')
|
||||||
raise ExtractorError(join_nonempty(code, message, delim=': '))
|
if code == 'MEDIA_NOT_FOUND':
|
||||||
|
raise ExtractorError(join_nonempty(code, message, delim=': '), expected=True)
|
||||||
|
if code or message:
|
||||||
|
raise ExtractorError(join_nonempty(code, error_id, message, delim=': '))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
streaks_id = response['id']
|
streaks_id = response['id']
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import datetime as dt
|
||||||
|
|
||||||
from .streaks import StreaksBaseIE
|
from .streaks import StreaksBaseIE
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
@ -7,6 +9,7 @@
|
|||||||
smuggle_url,
|
smuggle_url,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
|
time_seconds,
|
||||||
update_url_query,
|
update_url_query,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import require, traverse_obj
|
from ..utils.traversal import require, traverse_obj
|
||||||
@ -96,6 +99,7 @@ class TVerIE(StreaksBaseIE):
|
|||||||
'Referer': 'https://tver.jp/',
|
'Referer': 'https://tver.jp/',
|
||||||
}
|
}
|
||||||
_PLATFORM_QUERY = {}
|
_PLATFORM_QUERY = {}
|
||||||
|
_STREAKS_API_INFO = {}
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
session_info = self._download_json(
|
session_info = self._download_json(
|
||||||
@ -105,6 +109,9 @@ def _real_initialize(self):
|
|||||||
'platform_uid': 'platform_uid',
|
'platform_uid': 'platform_uid',
|
||||||
'platform_token': 'platform_token',
|
'platform_token': 'platform_token',
|
||||||
}))
|
}))
|
||||||
|
self._STREAKS_API_INFO = self._download_json(
|
||||||
|
'https://player.tver.jp/player/streaks_info_v2.json', None,
|
||||||
|
'Downloading STREAKS API info', 'Unable to download STREAKS API info')
|
||||||
|
|
||||||
def _call_platform_api(self, path, video_id, note=None, fatal=True, query=None):
|
def _call_platform_api(self, path, video_id, note=None, fatal=True, query=None):
|
||||||
return self._download_json(
|
return self._download_json(
|
||||||
@ -223,10 +230,14 @@ def _real_extract(self, url):
|
|||||||
'ie_key': 'BrightcoveNew',
|
'ie_key': 'BrightcoveNew',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
project_id = video_info['streaks']['projectID']
|
||||||
|
key_idx = dt.datetime.fromtimestamp(time_seconds(hours=9), dt.timezone.utc).month % 6 or 6
|
||||||
|
|
||||||
return {
|
return {
|
||||||
**self._extract_from_streaks_api(video_info['streaks']['projectID'], streaks_id, {
|
**self._extract_from_streaks_api(project_id, streaks_id, {
|
||||||
'Origin': 'https://tver.jp',
|
'Origin': 'https://tver.jp',
|
||||||
'Referer': 'https://tver.jp/',
|
'Referer': 'https://tver.jp/',
|
||||||
|
'X-Streaks-Api-Key': self._STREAKS_API_INFO[project_id]['api_key'][f'key0{key_idx}'],
|
||||||
}),
|
}),
|
||||||
**metadata,
|
**metadata,
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
Loading…
Reference in New Issue
Block a user