mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-09-29 22:01:26 +02:00
Compare commits
No commits in common. "0620fba73496efe2f3d95f79bac4be1ff75d293b" and "eb47b05481d10dd1c35d019096b144bd31843a46" have entirely different histories.
0620fba734
...
eb47b05481
|
@ -8,7 +8,6 @@ from .common import InfoExtractor
|
||||||
from ..aes import aes_cbc_decrypt_bytes, unpad_pkcs7
|
from ..aes import aes_cbc_decrypt_bytes, unpad_pkcs7
|
||||||
from ..compat import compat_b64decode
|
from ..compat import compat_b64decode
|
||||||
from ..networking.exceptions import HTTPError
|
from ..networking.exceptions import HTTPError
|
||||||
from ..utils.traversal import traverse_obj
|
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ass_subtitles_timecode,
|
ass_subtitles_timecode,
|
||||||
bytes_to_intlist,
|
bytes_to_intlist,
|
||||||
|
@ -20,7 +19,6 @@ from ..utils import (
|
||||||
long_to_bytes,
|
long_to_bytes,
|
||||||
pkcs1pad,
|
pkcs1pad,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
str_or_none,
|
|
||||||
try_get,
|
try_get,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
|
@ -45,9 +43,14 @@ class ADNBaseIE(InfoExtractor):
|
||||||
'end': 4,
|
'end': 4,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _get_distribution_language(self, url):
|
||||||
|
if 'network.de' in url:
|
||||||
|
return 'de'
|
||||||
|
return 'fr'
|
||||||
|
|
||||||
|
|
||||||
class ADNIE(ADNBaseIE):
|
class ADNIE(ADNBaseIE):
|
||||||
_VALID_URL = r'https?://(?:www\.)?(?:animation|anime)digitalnetwork\.(?P<lang>fr|de)/video/[^/]+/(?P<id>\d+)'
|
_VALID_URL = r'https?://(?:www\.)?(?:animation|anime)digitalnetwork\.(fr|de)/video/[^/]+/(?P<id>\d+)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://animationdigitalnetwork.fr/video/fruits-basket/9841-episode-1-a-ce-soir',
|
'url': 'https://animationdigitalnetwork.fr/video/fruits-basket/9841-episode-1-a-ce-soir',
|
||||||
'md5': '1c9ef066ceb302c86f80c2b371615261',
|
'md5': '1c9ef066ceb302c86f80c2b371615261',
|
||||||
|
@ -175,7 +178,7 @@ Format: Marked,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text'''
|
||||||
self.report_warning(message or self._LOGIN_ERR_MESSAGE)
|
self.report_warning(message or self._LOGIN_ERR_MESSAGE)
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
lang, video_id = self._match_valid_url(url).group('lang', 'id')
|
video_id = self._match_id(url)
|
||||||
video_base_url = self._PLAYER_BASE_URL + 'video/%s/' % video_id
|
video_base_url = self._PLAYER_BASE_URL + 'video/%s/' % video_id
|
||||||
player = self._download_json(
|
player = self._download_json(
|
||||||
video_base_url + 'configuration', video_id,
|
video_base_url + 'configuration', video_id,
|
||||||
|
@ -213,8 +216,7 @@ Format: Marked,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text'''
|
||||||
links_data = self._download_json(
|
links_data = self._download_json(
|
||||||
links_url, video_id, 'Downloading links JSON metadata', headers={
|
links_url, video_id, 'Downloading links JSON metadata', headers={
|
||||||
'X-Player-Token': authorization,
|
'X-Player-Token': authorization,
|
||||||
'X-Target-Distribution': lang,
|
'X-Target-Distribution': self._get_distribution_language(url),
|
||||||
**self._HEADERS
|
|
||||||
}, query={
|
}, query={
|
||||||
'freeWithAds': 'true',
|
'freeWithAds': 'true',
|
||||||
'adaptive': 'false',
|
'adaptive': 'false',
|
||||||
|
@ -291,35 +293,39 @@ Format: Marked,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text'''
|
||||||
|
|
||||||
|
|
||||||
class ADNSeasonIE(ADNBaseIE):
|
class ADNSeasonIE(ADNBaseIE):
|
||||||
_VALID_URL = r'https?://(?:www\.)?(?:animation|anime)digitalnetwork\.(?P<lang>fr|de)/video/(?P<id>[^/]+)/?(?:$|[#?])'
|
_VALID_URL = r'https?://(?:www\.)?(?:animation|anime)digitalnetwork\.(fr|de)/video/(?P<id>[^/]+)/?$'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://animationdigitalnetwork.fr/video/tokyo-mew-mew-new',
|
'url': 'https://animationdigitalnetwork.fr/video/tokyo-mew-mew-new',
|
||||||
'playlist_count': 12,
|
'playlist_count': 12,
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '911',
|
'id': 911,
|
||||||
'title': 'Tokyo Mew Mew New',
|
'title': 'Tokyo Mew Mew New',
|
||||||
},
|
},
|
||||||
# 'skip': 'Only available in French end German speaking Europe',
|
# 'skip': 'Only available in French end German speaking Europe',
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
lang, video_show_slug = self._match_valid_url(url).group('lang', 'id')
|
video_show_slug = self._match_id(url)
|
||||||
|
video_base_url = self._API_BASE_URL + 'show/%s/' % video_show_slug
|
||||||
show = self._download_json(
|
show = self._download_json(
|
||||||
f'{self._API_BASE_URL}show/{video_show_slug}/', video_show_slug,
|
video_base_url, video_show_slug,
|
||||||
'Downloading show JSON metadata', headers=self._HEADERS)['show']
|
'Downloading show JSON metadata',
|
||||||
show_id = str(show['id'])
|
headers=self._HEADERS)['show']
|
||||||
|
show_id = show['id']
|
||||||
|
lang = self._get_distribution_language(url)
|
||||||
episodes = self._download_json(
|
episodes = self._download_json(
|
||||||
f'{self._API_BASE_URL}video/show/{show_id}', video_show_slug,
|
self._API_BASE_URL + 'video/show/%s' % show_id, video_show_slug,
|
||||||
'Downloading episode list', headers={
|
'Downloading episode list', headers={
|
||||||
'X-Target-Distribution': lang,
|
'X-Target-Distribution': lang,
|
||||||
**self._HEADERS
|
|
||||||
}, query={
|
}, query={
|
||||||
'order': 'asc',
|
'order': 'asc',
|
||||||
'limit': '-1',
|
'limit': '-1',
|
||||||
})
|
})
|
||||||
entries = []
|
entries = []
|
||||||
for episode_id in traverse_obj(episodes, ('videos', ..., 'id', {str_or_none})):
|
for episode in episodes['videos']:
|
||||||
entries.append(self.url_result(
|
entries.append(self.url_result(
|
||||||
f'https://animationdigitalnetwork.{lang}/video/{video_show_slug}/{episode_id}',
|
'https://animationdigitalnetwork.%s/video/%s/%s' % (lang, video_show_slug, episode['id']),
|
||||||
ADNIE, episode_id))
|
ie=ADNIE.ie_key(),
|
||||||
return self.playlist_result(entries, show_id, show.get('title'))
|
video_id=episode['id']
|
||||||
|
))
|
||||||
|
return self.playlist_result(entries, show_id, show['title'])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user