Uma interface para toda a web musical
A web da música está fragmentada por muitos sites independentes. O Bandcamp vende-te um FLAC e uma licença Creative Commons. O SoundCloud transmite um remix que mais ninguém aloja. A SomaFM mantém um conjunto de canais de rádio suportados pelos ouvintes. Vários sites geridos pela comunidade mantêm enciclopédias curadas de rock progressivo, jazz, clássica e metal. Cada site tem a sua própria marcação, as suas próprias manias, a sua própria ideia do que sequer é uma “faixa”.
Mantemos uma família de clientes Python pequenos, focados e de código aberto que domam essa confusão. Todos eles fazem, em espírito, a mesma coisa: alcançam uma fonte de música e devolvem modelos de metadados de media tipados, objetos validados em vez de dicionários frágeis, para que o resto do teu código nunca tenha de se importar de que site vieram os dados. Sete dos nove estão publicados no PyPI. Os outros dois instalam-se diretamente a partir do GitHub. Todos falam o mesmo vocabulário.
Eis a visita guiada.
Streaming e rádio
py_bandcamp faz scraping do
Bandcamp. Procura faixas, álbuns, artistas e editoras, navega por etiqueta de
género, obtém recomendações e artistas relacionados a partir de uma semente, e
extrai um URL de MP3 transmissível. As procuras devolvem objetos Release
tipados que transportam título, capa, géneros, créditos e um campo de licença
ao estilo SPDX com uma verificação is_open(), para que possas distinguir um
lançamento Creative Commons de um com todos os direitos reservados. Uma
conversão de álbum de fidelidade total preenche a tracklist ordenada a pedido.
nuvem_de_som é o nosso cliente
de SoundCloud. Três backends independentes, um backend de API rico em metadados,
um scraper de HTML sem dependências, e um backend yt-dlp, assentam por trás de
um orquestrador que recua de um para o seguinte. Procura faixas e pessoas,
resolve URLs de stream diretos (progressivo ou HLS), descarrega faixas e
playlists inteiras, e traz uma aplicação de terminal, nds, para procurar e
reproduzir a partir da linha de comandos. Os lançamentos vêm de volta com
codec, taxa de bits, géneros, país, licença SPDX e tracklists completas dos
sets.
radiosoma envolve a API pública de
canais da SomaFM. A SomaFM tem uma API aberta, e o cliente modela-a
diretamente: cada canal é uma obra, e cada codificação de stream (AAC a 130
kbps, MP3 a 256 kbps, HE-AAC a 64 e 32 kbps) torna-se o seu próprio Release
desse canal, para que um consumidor possa escolher o melhor ajuste e
desduplicar por identidade. O feed de faixas recentes mostra um horário do que
tem estado a tocar.
tunein é um cliente TuneIn não
oficial para as estações de rádio linear e IPTV do mundo. Um caminho rápido
devolve apenas o payload da procura. Uma chamada de enriquecimento opcional
preenche género, língua, país, indicativo e slogan. O TuneIn devolve múltiplos
URLs de stream por estação (diferentes taxas de bits, espelhos e protocolos),
por isso cada um torna-se o seu próprio Release, deixando o consumidor
escolher no momento da reprodução. Uma pequena CLI dá-te saída em tabela ou
JSON.
pyheartradio fala com a API
pública do iHeartRadio, sem precisar de chave nem de conta. Procura estações,
podcasts, artistas, faixas e playlists, obtém episódios de podcast com URLs de
stream de áudio diretos, e corre as pesquisas de estação e artista
concorrentemente através de obtenções de detalhes em paralelo. Cada modelo
oferece os auxiliares to_external_ids() e to_signals() para uso numa
pipeline de metadados tipada.
Enciclopédias e arquivos de música
A segunda metade da família visa os grandes catálogos comunitários.
pyprogarchives (Prog
Archives), pyjazzmusicarchives
(Jazz Music Archives), e
pyclassicalarchives
(Classical Archives) partilham uma forma quase idêntica. Tanto o pyprogarchives
como o pyjazzmusicarchives instalam-se diretamente a partir dos respetivos
repositórios GitHub em vez do PyPI. Os três navegam o índice A–Z, procuram por
nome, e obtêm uma página completa de artista ou compositor com biografia, país
e uma discografia avaliada pelos membros. Os Prog e Jazz Archives fazem
scraping de HTML. Os Classical Archives envolvem uma API JSON pública e expõem
os álbuns de um compositor e uma árvore de obras achatada recursivamente.
Cada modelo transporta o id canónico estável do site via
to_external_ids_dict(), útil para cruzar um catálogo com outro.
pymetal é o nosso cliente para a
Encyclopaedia Metallum, os Metal Archives, e o mais ambicioso do conjunto. A
maioria dos scrapers achata uma faixa para (id, title, band, album). O
pymetal mantém aquilo que os Metal Archives mantêm separado: uma faixa pode
creditar múltiplas bandas (splits, colaborações), a formação de uma banda muda
ao longo do tempo, e uma faixa pode aparecer em muitos lançamentos
(compilações, reedições, singles). Modela cada um como uma entidade distinta
indexada pelo id do arquivo, para que os re-scrapes sejam idempotentes. A
superfície de endpoints é ampla: procura avançada de banda/álbum/canção,
páginas completas de lançamento com atribuição por banda nos splits, formações
particionadas por estado com intervalos de datas de função, críticas,
recomendações, ligações externas e letras, tudo como modelos Pydantic v2 que
fazem round-trip através de JSON.
Para além da música, tutubo faz scraping do YouTube e do YouTube Music, e pymal cobre o MyAnimeList, estendendo os mesmos padrões de metadados tipados a categorias de media mais amplas. Todos emitem o mesmo vocabulário, para que um único consumidor a jusante lide com tudo de forma uniforme.
Construídos para acesso conforme e de baixo volume
Estes clientes obtêm apenas páginas de catálogo públicas, a volumes de pedidos
baixos, e verificam o robots.txt de cada site antes de fazer scraping. Vê o
artigo sobre robots.txt e sitemaps
para saber como funciona esse passo de reconhecimento. Por toda a família a
camada HTTP é plugável. Por defeito os clientes usam um transporte cujo
handshake TLS coincide com o de um navegador real (curl_cffi a coincidir com
o TLS/JA3 do Chrome), para que um cliente bem-comportado não seja classificado
incorretamente como automação maliciosa por sistemas de deteção afinados para
abuso automatizado. As enciclopédias por trás da Cloudflare também podem
encaminhar através de uma instância FlareSolverr para dados em direto, ou ler
a partir do Wayback Machine do Internet Archive como reserva. A camada de
parsing é independente da forma como o HTML chega, por isso o mesmo código
funciona seja qual for o transporte que escolheres.
Um catálogo de música multi-fonte
O verdadeiro retorno é o que acontece quando deixas de pensar nisto como nove ferramentas separadas. Todos emitem o mesmo vocabulário de metadados tipado e todos expõem ids externos canónicos. Isso significa que podes espalhar um único artista por Bandcamp, SoundCloud, os diretórios de rádio e as enciclopédias, e depois dobrar os resultados num único catálogo: desduplicado por identidade, ciente das licenças, e pronto a alimentar um motor de recomendação, um servidor de media, ou um dataset de investigação.
Cada um destes clientes é software livre, auto-alojável, e corre no teu próprio
hardware, sem necessidade de chave de API. Escolhe a fonte que te interessa: faz
pip install se estiver no PyPI, ou pip install git+https://github.com/TigreGotico/<repo> para o pyprogarchives e o pyjazzmusicarchives, que são apenas GitHub. Depois começa a construir.
Todos os scrapers andam sobre as nossas sessões requests componíveis e prontas a usar. Os clientes de streaming e rádio emitem o esquema mediavocab diretamente, e cada cliente expõe ids externos canónicos, para que os metadados de música se integrem com o media-archivist, o nosso indexador multi-fonte e servidor de metadados desduplicador.