Créer un bot Telegram pour extraire les codes UPC et ISRC depuis les plateformes musicales
Ce bot Telegram extrait les codes UPC et ISRC des sorties musicales sur 10 plateformes majeures. Il prend en charge Spotify, Apple Music, Yandex Music, YouTube Music, Deezer, Tidal, SoundCloud, VK Music, Zvuk et Amazon Music. La nécessité s'est faite sentir à cause du manque d'accès direct aux codes UPC via les distributeurs ou les interfaces des plateformes. Le bot traite les liens, les identifiants de sortie et les requêtes textuelles, fournissant des codes précis en seulement 1 à 2 secondes grâce à un système intelligent de mise en cache.
Le code UPC identifie les sorties (albums, singles), tandis que l'ISRC attribue une référence unique à chaque piste. Ces identifiants sont essentiels pour le transfert entre distributeurs, l'enregistrement des droits et le suivi des redevances.
Architecture du système
Le système est modulaire :
- Analyseur d'URL : identifie la plateforme à l'aide d'expressions régulières.
- Résolveur de plateforme : récupère les métadonnées via des API officielles ou inversées.
- Correspondance UPC/ISRC : valide les données provenant de plusieurs sources.
- Stockage : Redis pour le cache (TTL : 24 heures), PostgreSQL pour l'analytique.
Cette architecture permet un traitement évolutif et réduit la charge sur les API externes.
import re
from dataclasses import dataclass
from enum import Enum
class Platform(Enum):
SPOTIFY = "spotify"
APPLE_MUSIC = "apple_music"
YANDEX_MUSIC = "yandex_music"
YOUTUBE_MUSIC = "youtube_music"
DEEZER = "deezer"
TIDAL = "tidal"
SOUNDCLOUD = "soundcloud"
VK_MUSIC = "vk_music"
ZVUK = "zvuk"
AMAZON_MUSIC = "amazon_music"
@dataclass
class ParsedLink:
platform: Platform
content_type: str # "album", "track", "artist"
content_id: str
PATTERNS = [
# Spotify
(r"open\.spotify\.com/(album|track)/([a-zA-Z0-9]+)",
Platform.SPOTIFY),
# Apple Music
(r"music\.apple\.com/.+/(album|song)/.+?/(")",
Platform.APPLE_MUSIC),
# et autres...
]
Gestion des liens et URLs raccourcies
L'analyseur utilise plus de 10 motifs regex pour correspondre aux formats d'URL. Les liens raccourcis (ex. spotify.link, youtu.be) sont résolus via des requêtes HEAD avec suivi automatique des redirections :
async def resolve_short_url(url: str) -> str:
async with aiohttp.ClientSession() as session:
async with session.head(
url, allow_redirects=True, timeout=5
) as resp:
return str(resp.url)
Les types de contenu pris en charge incluent les albums, les pistes et les artistes. Pour les pistes, le bot localise automatiquement l'album parent.
Utilisation de l'API Spotify
L'API Web de Spotify fournit le UPC dans external_ids.upc pour les albums et l'ISRC dans les données de piste. Les défis incluent :
- Absence de UPC dans certaines réponses — redémarrage sur différents marchés (US, GB, DE, JP).
- Recherche UPC instable pour les sorties spécifiques à une région.
- Limite de débit : 180 requêtes par minute.
Le cache Redis réduit considérablement la pression sur l'API :
async def get_album_data(album_id: str) -> dict | None:
cache_key = f"album:{album_id}"
cached = await redis.get(cache_key)
if cached:
return json.loads(cached)
for market in ["US", "GB", "DE", "JP"]:
album = await spotify.get_album(album_id, market=market)
upc = album.get("external_ids", {}).get("upc")
if upc:
# Sauvegarde dans le cache
await redis.set(cache_key, json.dumps(result), ex=86400)
return result
return None
APIs non documentées : Yandex Music et VK
Sans API publique disponible, les points d'accès ont été inversés à partir du trafic de l'application mobile. Le UPC se trouve dans les métadonnées de l'album ; l'ISRC dans les données au niveau de la piste. Les formats de réponse changent inattenduëment (deux fois en trois mois), nécessitant une surveillance constante.
Détection des versions de sorties
Le bot retrouve tous les UPC associés à un même ISRC — y compris singles, albums et compilations. Cela est crucial pour préserver l'historique de diffusion lors d'un changement de distributeur.
La commande /full retourne :
- Toutes les versions UPC de la sortie.
- Les ISRC de chaque piste.
- Label, date de sortie, genre.
- BPM des pistes (via les fonctionnalités audio de Spotify).
Traitement des entrées utilisateur
Supporte plusieurs types d'entrée :
- Liens directs (analysés automatiquement).
- Nombres de 12 à 13 chiffres (recherche UPC).
- Requêtes textuelles (recherche par nom + boutons intégrés).
Exemples : "upc Morozhern", URL directes, phrases non structurées.
Leçons apprises et améliorations
Statistiques de performance (3 mois) :
- 500 utilisateurs/mois.
- Temps moyen de réponse : 1,5 seconde (0,3 seconde avec cache).
- Taux de réussite : 89 %.
Recommandations :
- Intégrer MusicBrainz pour vérifier les données.
- Mettre en place une file de messages pour les pics de charge.
- Ajouter des contrôles de santé pour la disponibilité des API.
Aperçu architectural :
- Toujours utiliser au moins deux sources de données.
- Appliquer un cache agressif.
- Les APIs non documentées génèrent une dette technique.
Principales leçons :
- Séparer l'analyse de la résolution de plateforme simplifie la maintenance.
- Les tentatives croisées par marché corrigent les réponses incomplètes de Spotify.
- Le cache Redis est indispensable sous les limites de débit.
- Plusieurs UPC par ISRC sont essentiels pour les artistes.
- La surveillance quotidienne des APIs non documentées est obligatoire.
— Editorial Team
Aucun commentaire pour le moment.