]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/palcomp3.py
1 from .common
import InfoExtractor
2 from ..compat
import compat_str
10 class PalcoMP3BaseIE(InfoExtractor
):
11 _GQL_QUERY_TMPL
= '''{
16 _ARTIST_FIELDS_TMPL
= '''music(slug: "%%s") {
19 _MUSIC_FIELDS
= '''duration
26 def _call_api(self
, artist_slug
, artist_fields
):
27 return self
._download
_json
(
28 'https://www.palcomp3.com.br/graphql/', artist_slug
, query
={
29 'query': self
._GQL
_QUERY
_TMPL
% (artist_slug
, artist_fields
),
32 def _parse_music(self
, music
):
33 music_id
= compat_str(music
['musicID'])
34 title
= music
['title']
37 hls_url
= music
.get('hls')
41 'protocol': 'm3u8_native',
44 mp3_file
= music
.get('mp3File')
54 'duration': int_or_none(music
.get('duration')),
55 'view_count': int_or_none(music
.get('plays')),
58 def _real_initialize(self
):
59 self
._ARTIST
_FIELDS
_TMPL
= self
._ARTIST
_FIELDS
_TMPL
% self
._MUSIC
_FIELDS
61 def _real_extract(self
, url
):
62 artist_slug
, music_slug
= self
._match
_valid
_url
(url
).groups()
63 artist_fields
= self
._ARTIST
_FIELDS
_TMPL
% music_slug
64 music
= self
._call
_api
(artist_slug
, artist_fields
)['artist']['music']
65 return self
._parse
_music
(music
)
68 class PalcoMP3IE(PalcoMP3BaseIE
):
69 IE_NAME
= 'PalcoMP3:song'
70 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)'
72 'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/nossas-composicoes-cuida-bem-dela/',
73 'md5': '99fd6405b2d8fd589670f6db1ba3b358',
77 'title': 'Nossas Composições - CUIDA BEM DELA',
84 def suitable(cls
, url
):
85 return False if PalcoMP3VideoIE
.suitable(url
) else super(PalcoMP3IE
, cls
).suitable(url
)
88 class PalcoMP3ArtistIE(PalcoMP3BaseIE
):
89 IE_NAME
= 'PalcoMP3:artist'
90 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<id>[^/?&#]+)'
92 'url': 'https://www.palcomp3.com.br/condedoforro/',
95 'title': 'Conde do Forró',
97 'playlist_mincount': 188,
99 _ARTIST_FIELDS_TMPL
= '''artistID
108 def suitable(cls
, url
):
109 return False if PalcoMP3IE
._match
_valid
_url
(url
) else super(PalcoMP3ArtistIE
, cls
).suitable(url
)
111 def _real_extract(self
, url
):
112 artist_slug
= self
._match
_id
(url
)
113 artist
= self
._call
_api
(artist_slug
, self
._ARTIST
_FIELDS
_TMPL
)['artist']
116 for music
in (try_get(artist
, lambda x
: x
['musics']['nodes'], list) or []):
117 yield self
._parse
_music
(music
)
119 return self
.playlist_result(
120 entries(), str_or_none(artist
.get('artistID')), artist
.get('name'))
123 class PalcoMP3VideoIE(PalcoMP3BaseIE
):
124 IE_NAME
= 'PalcoMP3:video'
125 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)/?#clipe'
127 'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/maiara-e-maraisa-voce-faz-falta-aqui-ao-vivo-em-vicosa-mg/#clipe',
128 'add_ie': ['Youtube'],
132 'title': 'Maiara e Maraisa - Você Faz Falta Aqui - DVD Ao Vivo Em Campo Grande',
133 'description': 'md5:7043342c09a224598e93546e98e49282',
134 'upload_date': '20161107',
135 'uploader_id': 'maiaramaraisaoficial',
136 'uploader': 'Maiara e Maraisa',
139 _MUSIC_FIELDS
= 'youtubeID'
141 def _parse_music(self
, music
):
142 youtube_id
= music
['youtubeID']
143 return self
.url_result(youtube_id
, 'Youtube', youtube_id
)