mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-25 03:31:03 +00:00 
			
		
		
		
	 86e5f3ed2e
			
		
	
	
		86e5f3ed2e
		
			
		
	
	
	
	
		
			
			Using https://github.com/asottile/pyupgrade 1. `__future__` imports and `coding: utf-8` were removed 2. Files were rewritten with `pyupgrade --py36-plus --keep-percent-format` 3. f-strings were cherry-picked from `pyupgrade --py36-plus` Extractors are left untouched (except removing header) to avoid unnecessary merge conflicts
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from .common import InfoExtractor
 | |
| from ..compat import compat_str
 | |
| from ..utils import (
 | |
|     int_or_none,
 | |
|     str_or_none,
 | |
|     try_get,
 | |
| )
 | |
| 
 | |
| 
 | |
| class PalcoMP3BaseIE(InfoExtractor):
 | |
|     _GQL_QUERY_TMPL = '''{
 | |
|   artist(slug: "%s") {
 | |
|     %s
 | |
|   }
 | |
| }'''
 | |
|     _ARTIST_FIELDS_TMPL = '''music(slug: "%%s") {
 | |
|       %s
 | |
|     }'''
 | |
|     _MUSIC_FIELDS = '''duration
 | |
|       hls
 | |
|       mp3File
 | |
|       musicID
 | |
|       plays
 | |
|       title'''
 | |
| 
 | |
|     def _call_api(self, artist_slug, artist_fields):
 | |
|         return self._download_json(
 | |
|             'https://www.palcomp3.com.br/graphql/', artist_slug, query={
 | |
|                 'query': self._GQL_QUERY_TMPL % (artist_slug, artist_fields),
 | |
|             })['data']
 | |
| 
 | |
|     def _parse_music(self, music):
 | |
|         music_id = compat_str(music['musicID'])
 | |
|         title = music['title']
 | |
| 
 | |
|         formats = []
 | |
|         hls_url = music.get('hls')
 | |
|         if hls_url:
 | |
|             formats.append({
 | |
|                 'url': hls_url,
 | |
|                 'protocol': 'm3u8_native',
 | |
|                 'ext': 'mp4',
 | |
|             })
 | |
|         mp3_file = music.get('mp3File')
 | |
|         if mp3_file:
 | |
|             formats.append({
 | |
|                 'url': mp3_file,
 | |
|             })
 | |
| 
 | |
|         return {
 | |
|             'id': music_id,
 | |
|             'title': title,
 | |
|             'formats': formats,
 | |
|             'duration': int_or_none(music.get('duration')),
 | |
|             'view_count': int_or_none(music.get('plays')),
 | |
|         }
 | |
| 
 | |
|     def _real_initialize(self):
 | |
|         self._ARTIST_FIELDS_TMPL = self._ARTIST_FIELDS_TMPL % self._MUSIC_FIELDS
 | |
| 
 | |
|     def _real_extract(self, url):
 | |
|         artist_slug, music_slug = self._match_valid_url(url).groups()
 | |
|         artist_fields = self._ARTIST_FIELDS_TMPL % music_slug
 | |
|         music = self._call_api(artist_slug, artist_fields)['artist']['music']
 | |
|         return self._parse_music(music)
 | |
| 
 | |
| 
 | |
| class PalcoMP3IE(PalcoMP3BaseIE):
 | |
|     IE_NAME = 'PalcoMP3:song'
 | |
|     _VALID_URL = r'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)'
 | |
|     _TESTS = [{
 | |
|         'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/nossas-composicoes-cuida-bem-dela/',
 | |
|         'md5': '99fd6405b2d8fd589670f6db1ba3b358',
 | |
|         'info_dict': {
 | |
|             'id': '3162927',
 | |
|             'ext': 'mp3',
 | |
|             'title': 'Nossas Composições - CUIDA BEM DELA',
 | |
|             'duration': 210,
 | |
|             'view_count': int,
 | |
|         }
 | |
|     }]
 | |
| 
 | |
|     @classmethod
 | |
|     def suitable(cls, url):
 | |
|         return False if PalcoMP3VideoIE.suitable(url) else super(PalcoMP3IE, cls).suitable(url)
 | |
| 
 | |
| 
 | |
| class PalcoMP3ArtistIE(PalcoMP3BaseIE):
 | |
|     IE_NAME = 'PalcoMP3:artist'
 | |
|     _VALID_URL = r'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<id>[^/?&#]+)'
 | |
|     _TESTS = [{
 | |
|         'url': 'https://www.palcomp3.com.br/condedoforro/',
 | |
|         'info_dict': {
 | |
|             'id': '358396',
 | |
|             'title': 'Conde do Forró',
 | |
|         },
 | |
|         'playlist_mincount': 188,
 | |
|     }]
 | |
|     _ARTIST_FIELDS_TMPL = '''artistID
 | |
|     musics {
 | |
|       nodes {
 | |
|         %s
 | |
|       }
 | |
|     }
 | |
|     name'''
 | |
| 
 | |
|     @classmethod
 | |
|     def suitable(cls, url):
 | |
|         return False if PalcoMP3IE._match_valid_url(url) else super(PalcoMP3ArtistIE, cls).suitable(url)
 | |
| 
 | |
|     def _real_extract(self, url):
 | |
|         artist_slug = self._match_id(url)
 | |
|         artist = self._call_api(artist_slug, self._ARTIST_FIELDS_TMPL)['artist']
 | |
| 
 | |
|         def entries():
 | |
|             for music in (try_get(artist, lambda x: x['musics']['nodes'], list) or []):
 | |
|                 yield self._parse_music(music)
 | |
| 
 | |
|         return self.playlist_result(
 | |
|             entries(), str_or_none(artist.get('artistID')), artist.get('name'))
 | |
| 
 | |
| 
 | |
| class PalcoMP3VideoIE(PalcoMP3BaseIE):
 | |
|     IE_NAME = 'PalcoMP3:video'
 | |
|     _VALID_URL = r'https?://(?:www\.)?palcomp3\.com(?:\.br)?/(?P<artist>[^/]+)/(?P<id>[^/?&#]+)/?#clipe'
 | |
|     _TESTS = [{
 | |
|         'url': 'https://www.palcomp3.com/maiaraemaraisaoficial/maiara-e-maraisa-voce-faz-falta-aqui-ao-vivo-em-vicosa-mg/#clipe',
 | |
|         'add_ie': ['Youtube'],
 | |
|         'info_dict': {
 | |
|             'id': '_pD1nR2qqPg',
 | |
|             'ext': 'mp4',
 | |
|             'title': 'Maiara e Maraisa - Você Faz Falta Aqui - DVD Ao Vivo Em Campo Grande',
 | |
|             'description': 'md5:7043342c09a224598e93546e98e49282',
 | |
|             'upload_date': '20161107',
 | |
|             'uploader_id': 'maiaramaraisaoficial',
 | |
|             'uploader': 'Maiara e Maraisa',
 | |
|         }
 | |
|     }]
 | |
|     _MUSIC_FIELDS = 'youtubeID'
 | |
| 
 | |
|     def _parse_music(self, music):
 | |
|         youtube_id = music['youtubeID']
 | |
|         return self.url_result(youtube_id, 'Youtube', youtube_id)
 |