]>
Commit | Line | Data |
---|---|---|
31c279a2 H |
1 | from .common import InfoExtractor |
2 | from ..utils import js_to_json, traverse_obj | |
3 | ||
4 | ||
5 | class MonsterSirenHypergryphMusicIE(InfoExtractor): | |
6 | _VALID_URL = r'https?://monster-siren\.hypergryph\.com/music/(?P<id>\d+)' | |
7 | _TESTS = [{ | |
8 | 'url': 'https://monster-siren.hypergryph.com/music/514562', | |
9 | 'info_dict': { | |
10 | 'id': '514562', | |
11 | 'ext': 'wav', | |
12 | 'artist': ['塞壬唱片-MSR'], | |
13 | 'album': 'Flame Shadow', | |
14 | 'title': 'Flame Shadow', | |
15 | } | |
16 | }] | |
17 | ||
18 | def _real_extract(self, url): | |
19 | audio_id = self._match_id(url) | |
20 | webpage = self._download_webpage(url, audio_id) | |
21 | json_data = self._search_json( | |
22 | r'window\.g_initialProps\s*=', webpage, 'data', audio_id, transform_source=js_to_json) | |
23 | ||
24 | return { | |
25 | 'id': audio_id, | |
26 | 'title': traverse_obj(json_data, ('player', 'songDetail', 'name')), | |
27 | 'url': traverse_obj(json_data, ('player', 'songDetail', 'sourceUrl')), | |
28 | 'ext': 'wav', | |
29 | 'vcodec': 'none', | |
30 | 'artist': traverse_obj(json_data, ('player', 'songDetail', 'artists')), | |
31 | 'album': traverse_obj(json_data, ('musicPlay', 'albumDetail', 'name')) | |
32 | } |