Retour à l'accueil

Bot Telegram pour codes UPC musique : 10 plateformes

Le bot Telegram extrait les codes UPC et ISRC des sorties de 10 plateformes via parsing de liens et API. Décrit l'architecture avec regex, cache Redis, logique de retry pour Spotify. Leçons sur le travail avec des APIs fragmentées et des endpoints non documentés.

Bot pour UPC/ISRC : analyse de 10 APIs musicales
Advertisement 728x90

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 :

Google AdInline article slot
  • 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.

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Lire ensuite