]>
jfr.im git - yt-dlp.git/blob - yt_dlp/extractor/palcomp3.py
2 from __future__
import unicode_literals
5 from .common
import InfoExtractor
6 from ..compat
import compat_str
14 class PalcoMP3BaseIE(InfoExtractor
):
15 _GQL_QUERY_TMPL
= '''{
20 _ARTIST_FIELDS_TMPL
= '''music(slug: "%%s") {
23 _MUSIC_FIELDS
= '''duration
30 def _call_api(self
, artist_slug
, artist_fields
):
31 return self
._download
_json
(
32 'https://www.palcomp3.com.br/graphql/', artist_slug
, query
={
33 'query': self
._GQL
_QUERY
_TMPL
% (artist_slug
, artist_fields
),
36 def _parse_music(self
, music
):
37 music_id
= compat_str(music
['musicID'])
38 title
= music
['title']
41 hls_url
= music
.get('hls')
45 'protocol': 'm3u8_native',
48 mp3_file
= music
.get('mp3File')
58 'duration': int_or_none(music
.get('duration')),
59 'view_count': int_or_none(music
.get('plays')),
62 def _real_initialize(self
):
63 self
._ARTIST
_FIELDS
_TMPL
= self
._ARTIST
_FIELDS
_TMPL
% self
._MUSIC
_FIELDS
65 def _real_extract(self
, url
):
66 artist_slug
, music_slug
= self
._match
_valid
_url
(url
).groups()
67 artist_fields
= self
._ARTIST
_FIELDS
_TMPL
% music_slug
68 music
= self
._call
_api
(artist_slug
, artist_fields
)['artist']['music']
69 return self
._parse
_music
(music
)
72 class PalcoMP3IE(PalcoMP3BaseIE
):
73 IE_NAME
= 'PalcoMP3:song'
74 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)'
76 'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/nossas-composicoes-cuida-bem-dela/',
77 'md5': '99fd6405b2d8fd589670f6db1ba3b358',
81 'title': 'Nossas Composições - CUIDA BEM DELA',
88 def suitable(cls
, url
):
89 return False if PalcoMP3VideoIE
.suitable(url
) else super(PalcoMP3IE
, cls
).suitable(url
)
92 class PalcoMP3ArtistIE(PalcoMP3BaseIE
):
93 IE_NAME
= 'PalcoMP3:artist'
94 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<id>[^/?&#]+)'
96 'url': 'https://www.palcomp3.com.br/condedoforro/',
99 'title': 'Conde do Forró',
101 'playlist_mincount': 188,
103 _ARTIST_FIELDS_TMPL
= '''artistID
112 def suitable(cls
, url
):
113 return False if PalcoMP3IE
._match
_valid
_url
(url
) else super(PalcoMP3ArtistIE
, cls
).suitable(url
)
115 def _real_extract(self
, url
):
116 artist_slug
= self
._match
_id
(url
)
117 artist
= self
._call
_api
(artist_slug
, self
._ARTIST
_FIELDS
_TMPL
)['artist']
120 for music
in (try_get(artist
, lambda x
: x
['musics']['nodes'], list) or []):
121 yield self
._parse
_music
(music
)
123 return self
.playlist_result(
124 entries(), str_or_none(artist
.get('artistID')), artist
.get('name'))
127 class PalcoMP3VideoIE(PalcoMP3BaseIE
):
128 IE_NAME
= 'PalcoMP3:video'
129 _VALID_URL
= r
'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)/?#clipe'
131 'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/maiara-e-maraisa-voce-faz-falta-aqui-ao-vivo-em-vicosa-mg/#clipe',
132 'add_ie': ['Youtube'],
136 'title': 'Maiara e Maraisa - Você Faz Falta Aqui - DVD Ao Vivo Em Campo Grande',
137 'description': 'md5:7043342c09a224598e93546e98e49282',
138 'upload_date': '20161107',
139 'uploader_id': 'maiaramaraisaoficial',
140 'uploader': 'Maiara e Maraisa',
143 _MUSIC_FIELDS
= 'youtubeID'
145 def _parse_music(self
, music
):
146 youtube_id
= music
['youtubeID']
147 return self
.url_result(youtube_id
, 'Youtube', youtube_id
)