[extractor/tver] Fix extractor (#4033)

Authored by: Lesmiscore
This commit is contained in:
Lesmiscore 2022-06-09 23:55:58 +09:00 committed by GitHub
parent 2ae778b8fc
commit 6837633a4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -54,20 +54,8 @@ def _real_extract(self, url):
video_id = self._match_id(self._search_regex( video_id = self._match_id(self._search_regex(
(r'canonical"\s*href="(https?://tver\.jp/[^"]+)"', r'&link=(https?://tver\.jp/[^?&]+)[?&]'), (r'canonical"\s*href="(https?://tver\.jp/[^"]+)"', r'&link=(https?://tver\.jp/[^?&]+)[?&]'),
webpage, 'url regex')) webpage, 'url regex'))
video_info = self._download_json(
f'https://statics.tver.jp/content/episode/{video_id}.json', video_id,
query={'v': '5'}, headers={
'Origin': 'https://tver.jp',
'Referer': 'https://tver.jp/',
})
p_id = video_info['video']['accountID']
r_id = traverse_obj(video_info, ('video', ('videoRefID', 'videoID')), get_all=False)
if not r_id:
raise ExtractorError('Failed to extract reference ID for Brightcove')
if not r_id.isdigit():
r_id = f'ref:{r_id}'
additional_info = self._download_json( episode_info = self._download_json(
f'https://platform-api.tver.jp/service/api/v1/callEpisode/{video_id}?require_data=mylist,later[epefy106ur],good[epefy106ur],resume[epefy106ur]', f'https://platform-api.tver.jp/service/api/v1/callEpisode/{video_id}?require_data=mylist,later[epefy106ur],good[epefy106ur],resume[epefy106ur]',
video_id, fatal=False, video_id, fatal=False,
query={ query={
@ -76,16 +64,31 @@ def _real_extract(self, url):
}, headers={ }, headers={
'x-tver-platform-type': 'web' 'x-tver-platform-type': 'web'
}) })
episode_content = traverse_obj(
episode_info, ('result', 'episode', 'content')) or {}
additional_content_info = traverse_obj( video_info = self._download_json(
additional_info, ('result', 'episode', 'content'), get_all=False) or {} f'https://statics.tver.jp/content/episode/{video_id}.json', video_id,
episode = strip_or_none(additional_content_info.get('title')) query={
series = str_or_none(additional_content_info.get('seriesTitle')) 'v': str_or_none(episode_content.get('version')) or '5',
}, headers={
'Origin': 'https://tver.jp',
'Referer': 'https://tver.jp/',
})
p_id = video_info['video']['accountID']
r_id = traverse_obj(video_info, ('video', ('videoRefID', 'videoID')))
if not r_id:
raise ExtractorError('Failed to extract reference ID for Brightcove')
if not r_id.isdigit():
r_id = f'ref:{r_id}'
episode = strip_or_none(episode_content.get('title'))
series = str_or_none(episode_content.get('seriesTitle'))
title = ( title = (
join_nonempty(series, episode, delim=' ') join_nonempty(series, episode, delim=' ')
or str_or_none(video_info.get('title'))) or str_or_none(video_info.get('title')))
provider = str_or_none(additional_content_info.get('productionProviderName')) provider = str_or_none(episode_content.get('productionProviderName'))
onair_label = str_or_none(additional_content_info.get('broadcastDateLabel')) onair_label = str_or_none(episode_content.get('broadcastDateLabel'))
return { return {
'_type': 'url_transparent', '_type': 'url_transparent',