mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-14 15:22:35 +00:00
parent
ed76230b3f
commit
3f771f75d7
2 changed files with 103 additions and 0 deletions
|
@ -1159,6 +1159,10 @@ from .radiode import RadioDeIE
|
|||
from .radiojavan import RadioJavanIE
|
||||
from .radiobremen import RadioBremenIE
|
||||
from .radiofrance import RadioFranceIE
|
||||
from .radiokapital import (
|
||||
RadioKapitalIE,
|
||||
RadioKapitalShowIE,
|
||||
)
|
||||
from .radlive import (
|
||||
RadLiveIE,
|
||||
RadLiveChannelIE,
|
||||
|
|
99
yt_dlp/extractor/radiokapital.py
Normal file
99
yt_dlp/extractor/radiokapital.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
# coding: utf-8
|
||||
|
||||
from .common import InfoExtractor
|
||||
from ..utils import (
|
||||
clean_html,
|
||||
traverse_obj,
|
||||
unescapeHTML,
|
||||
)
|
||||
|
||||
import itertools
|
||||
from urllib.parse import urlencode
|
||||
|
||||
|
||||
class RadioKapitalBaseIE(InfoExtractor):
|
||||
def _call_api(self, resource, video_id, note='Downloading JSON metadata', qs={}):
|
||||
return self._download_json(
|
||||
f'https://www.radiokapital.pl/wp-json/kapital/v1/{resource}?{urlencode(qs)}',
|
||||
video_id, note=note)
|
||||
|
||||
def _parse_episode(self, data):
|
||||
release = '%s%s%s' % (data['published'][6:11], data['published'][3:6], data['published'][:3])
|
||||
return {
|
||||
'_type': 'url_transparent',
|
||||
'url': data['mixcloud_url'],
|
||||
'ie_key': 'Mixcloud',
|
||||
'title': unescapeHTML(data['title']),
|
||||
'description': clean_html(data.get('content')),
|
||||
'tags': traverse_obj(data, ('tags', ..., 'name')),
|
||||
'release_date': release,
|
||||
'series': traverse_obj(data, ('show', 'title')),
|
||||
}
|
||||
|
||||
|
||||
class RadioKapitalIE(RadioKapitalBaseIE):
|
||||
IE_NAME = 'radiokapital'
|
||||
_VALID_URL = r'https?://(?:www\.)?radiokapital\.pl/shows/[a-z\d-]+/(?P<id>[a-z\d-]+)'
|
||||
|
||||
_TESTS = [{
|
||||
'url': 'https://radiokapital.pl/shows/tutaj-sa-smoki/5-its-okay-to-be-immaterial',
|
||||
'info_dict': {
|
||||
'id': 'radiokapital_radio-kapitał-tutaj-są-smoki-5-its-okay-to-be-immaterial-2021-05-20',
|
||||
'ext': 'm4a',
|
||||
'title': '#5: It’s okay to\xa0be\xa0immaterial',
|
||||
'description': 'md5:2499da5fbfb0e88333b7d37ec8e9e4c4',
|
||||
'uploader': 'Radio Kapitał',
|
||||
'uploader_id': 'radiokapital',
|
||||
'timestamp': 1621640164,
|
||||
'upload_date': '20210521',
|
||||
},
|
||||
}]
|
||||
|
||||
def _real_extract(self, url):
|
||||
video_id = self._match_id(url)
|
||||
|
||||
episode = self._call_api('episodes/%s' % video_id, video_id)
|
||||
return self._parse_episode(episode)
|
||||
|
||||
|
||||
class RadioKapitalShowIE(RadioKapitalBaseIE):
|
||||
IE_NAME = 'radiokapital:show'
|
||||
_VALID_URL = r'https?://(?:www\.)?radiokapital\.pl/shows/(?P<id>[a-z\d-]+)/?(?:$|[?#])'
|
||||
|
||||
_TESTS = [{
|
||||
'url': 'https://radiokapital.pl/shows/wesz',
|
||||
'info_dict': {
|
||||
'id': '100',
|
||||
'title': 'WĘSZ',
|
||||
'description': 'md5:3a557a1e0f31af612b0dcc85b1e0ca5c',
|
||||
},
|
||||
'playlist_mincount': 17,
|
||||
}]
|
||||
|
||||
def _get_episode_list(self, series_id, page_no):
|
||||
return self._call_api(
|
||||
'episodes', series_id,
|
||||
f'Downloading episode list page #{page_no}', qs={
|
||||
'show': series_id,
|
||||
'page': page_no,
|
||||
})
|
||||
|
||||
def _entries(self, series_id):
|
||||
for page_no in itertools.count(1):
|
||||
episode_list = self._get_episode_list(series_id, page_no)
|
||||
yield from (self._parse_episode(ep) for ep in episode_list['items'])
|
||||
if episode_list['next'] is None:
|
||||
break
|
||||
|
||||
def _real_extract(self, url):
|
||||
series_id = self._match_id(url)
|
||||
|
||||
show = self._call_api(f'shows/{series_id}', series_id, 'Downloading show metadata')
|
||||
entries = self._entries(series_id)
|
||||
return {
|
||||
'_type': 'playlist',
|
||||
'entries': entries,
|
||||
'id': str(show['id']),
|
||||
'title': show.get('title'),
|
||||
'description': clean_html(show.get('content')),
|
||||
}
|
Loading…
Reference in a new issue