mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2024-12-22 10:07:43 -05:00
[extractor/qingting] Add extractor (#5329)
Closes #5323 Authored by: changren-wcr, bashonly
This commit is contained in:
parent
728f4b5c2e
commit
c94df4d19d
@ -1431,6 +1431,7 @@ from .prx import (
|
|||||||
)
|
)
|
||||||
from .puls4 import Puls4IE
|
from .puls4 import Puls4IE
|
||||||
from .pyvideo import PyvideoIE
|
from .pyvideo import PyvideoIE
|
||||||
|
from .qingting import QingTingIE
|
||||||
from .qqmusic import (
|
from .qqmusic import (
|
||||||
QQMusicIE,
|
QQMusicIE,
|
||||||
QQMusicSingerIE,
|
QQMusicSingerIE,
|
||||||
|
47
yt_dlp/extractor/qingting.py
Normal file
47
yt_dlp/extractor/qingting.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
from .common import InfoExtractor
|
||||||
|
|
||||||
|
from ..utils import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class QingTingIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.|m\.)?(?:qingting\.fm|qtfm\.cn)/v?channels/(?P<channel>\d+)/programs/(?P<id>\d+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://www.qingting.fm/channels/378005/programs/22257411/',
|
||||||
|
'md5': '47e6a94f4e621ed832c316fd1888fb3c',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '22257411',
|
||||||
|
'title': '用了十年才修改,谁在乎教科书?',
|
||||||
|
'channel_id': '378005',
|
||||||
|
'channel': '睡前消息',
|
||||||
|
'uploader': '马督工',
|
||||||
|
'ext': 'm4a',
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
'url': 'https://m.qtfm.cn/vchannels/378005/programs/23023573/',
|
||||||
|
'md5': '2703120b6abe63b5fa90b975a58f4c0e',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '23023573',
|
||||||
|
'title': '【睡前消息488】重庆山火之后,有图≠真相',
|
||||||
|
'channel_id': '378005',
|
||||||
|
'channel': '睡前消息',
|
||||||
|
'uploader': '马督工',
|
||||||
|
'ext': 'm4a',
|
||||||
|
}
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
channel_id, pid = self._match_valid_url(url).group('channel', 'id')
|
||||||
|
webpage = self._download_webpage(
|
||||||
|
f'https://m.qtfm.cn/vchannels/{channel_id}/programs/{pid}/', pid)
|
||||||
|
info = self._search_json(r'window\.__initStores\s*=', webpage, 'program info', pid)
|
||||||
|
return {
|
||||||
|
'id': pid,
|
||||||
|
'title': traverse_obj(info, ('ProgramStore', 'programInfo', 'title')),
|
||||||
|
'channel_id': channel_id,
|
||||||
|
'channel': traverse_obj(info, ('ProgramStore', 'channelInfo', 'title')),
|
||||||
|
'uploader': traverse_obj(info, ('ProgramStore', 'podcasterInfo', 'podcaster', 'nickname')),
|
||||||
|
'url': traverse_obj(info, ('ProgramStore', 'programInfo', 'audioUrl')),
|
||||||
|
'vcodec': 'none',
|
||||||
|
'acodec': 'm4a',
|
||||||
|
'ext': 'm4a',
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user