← Tous les articles

Comment Extraire les Données d'une Chaîne YouTube en JSON

Ouvrez n’importe quelle chaîne YouTube et les chiffres que vous voyez sont arrondis. Une vidéo affiche “1,2 M de vues”, une chaîne affiche “340 k abonnés”, et un nombre de commentaires indique “4,5 k”. C’est très bien pour une personne qui jette un coup d’oeil à la page. C’est inutile si vous construisez un tableau de bord, classez le catalogue d’un créateur ou suivez la croissance semaine après semaine. Il vous faut les chiffres exacts, et il vous les faut sous forme de données structurées, pas de texte extrait d’une page rendue.

Ce guide explique comment obtenir la liste complète des vidéos d’une chaîne YouTube avec les chiffres exacts, les durées de vidéo et les dates de publication en JSON propre. Il couvre l’API officielle de données de YouTube, l’endroit où elle vous freine, et comment sauter toute la mise en place quand vous voulez juste les données.

Pourquoi les Chiffres de la Page Sont Arrondis

YouTube abrège les compteurs publics volontairement. La page de lecture et la page de chaîne sont conçues pour être lisibles, donc 1 234 567 devient “1,2 M”. Le nombre d’abonnés est arrondi encore plus fort : depuis 2019, YouTube le publie avec trois chiffres significatifs, donc “340 k” pourrait être n’importe quelle valeur entre 340 000 et 340 999.

Si vous extrayez ces chaînes de caractères directement du HTML, vous héritez de l’arrondi. Pire, vous en héritez de façon incohérente. La même chaîne peut afficher “1,2 M” à un endroit et “1 234 567” dans une infobulle, et le balisage autour de ces valeurs change souvent. Convertir du texte abrégé en vrais entiers (“2,4 M” en 2 400 000) jette aussi une précision que vous ne récupérerez jamais.

Les chiffres exacts existent bel et bien. Ils ne sont simplement pas dans le texte destiné aux humains. Pour les lire de façon fiable, vous allez vers une source de données conçue pour les machines.

Option 1 : L’API de Données de YouTube

Google publie l’API de données de YouTube v3, et c’est le bon point de départ. Elle renvoie des viewCount, likeCount et commentCount exacts pour les vidéos, ainsi que des statistiques au niveau de la chaîne. Voici à quoi ressemble le travail.

Obtenez une Clé d’API

Créez un projet dans la console Google Cloud, activez l’API de données de YouTube v3 et générez une clé d’API. Les données publiques en lecture seule n’ont pas besoin d’OAuth, donc une simple clé suffit pour commencer.

Résolvez la Chaîne

Il vous faut l’ID de la chaîne (il commence par UC...). Si vous n’avez qu’un identifiant comme @nomdechaine, appelez channels.list avec forHandle pour le résoudre. Ce même appel renvoie les statistiques de chaîne que vous voulez :

import requests

API_KEY = "VOTRE_CLE"
BASE = "https://www.googleapis.com/youtube/v3"

def get_channel(handle):
    r = requests.get(f"{BASE}/channels", params={
        "part": "snippet,statistics,contentDetails",
        "forHandle": handle,
        "key": API_KEY,
    })
    r.raise_for_status()
    item = r.json()["items"][0]
    stats = item["statistics"]
    uploads = item["contentDetails"]["relatedPlaylists"]["uploads"]
    return {
        "channelId": item["id"],
        "title": item["snippet"]["title"],
        "subscriberCount": int(stats.get("subscriberCount", 0)),
        "videoCount": int(stats["videoCount"]),
        "viewCount": int(stats["viewCount"]),
        "uploadsPlaylist": uploads,
    }

Notez que subscriberCount revient arrondi même depuis l’API. C’est une politique de Google, pas une limite du scraping. Les compteurs de vues des vidéos, en revanche, sont exacts.

Parcourez les Mises en Ligne

Chaque chaîne a une playlist cachée de “mises en ligne” qui contient toutes ses vidéos publiques. Parcourez-la avec playlistItems.list, rassemblez les ID de vidéo, puis regroupez-les par lots dans videos.list (jusqu’à 50 par appel) pour lire les statistiques et les durées :

def get_video_ids(uploads_playlist, limit=200):
    ids, page = [], None
    while len(ids) < limit:
        r = requests.get(f"{BASE}/playlistItems", params={
            "part": "contentDetails",
            "playlistId": uploads_playlist,
            "maxResults": 50,
            "pageToken": page,
            "key": API_KEY,
        })
        data = r.json()
        ids += [i["contentDetails"]["videoId"] for i in data["items"]]
        page = data.get("nextPageToken")
        if not page:
            break
    return ids[:limit]

def get_videos(video_ids):
    out = []
    for i in range(0, len(video_ids), 50):
        chunk = video_ids[i:i + 50]
        r = requests.get(f"{BASE}/videos", params={
            "part": "snippet,statistics,contentDetails",
            "id": ",".join(chunk),
            "key": API_KEY,
        })
        for v in r.json()["items"]:
            s, c = v["statistics"], v["contentDetails"]
            out.append({
                "id": v["id"],
                "title": v["snippet"]["title"],
                "publishedAt": v["snippet"]["publishedAt"],
                "duration": c["duration"],            # ISO-8601, p. ex. PT12M30S
                "viewCount": int(s.get("viewCount", 0)),
                "likeCount": int(s.get("likeCount", 0)),
                "commentCount": int(s.get("commentCount", 0)),
            })
    return out

Cela vous donne des chiffres exacts. Le piège, c’est le champ duration : il revient sous forme de chaîne ISO-8601 comme PT12M30S, pas en secondes. Vous le convertissez vous-même avec la bibliothèque isodate ou un petit parseur.

Surveillez le Quota

C’est là que l’API de données mord. Chaque projet reçoit par défaut 10 000 unités de quota par jour. Un appel à videos.list ou playlistItems.list coûte 1 unité, ce qui paraît généreux jusqu’à ce que vous paginiez des centaines de chaînes. Et search.list (que vous pourriez utiliser pour trouver des chaînes) coûte 100 unités par appel, donc quelques centaines de recherches épuisent la journée entière.

Pour une seule chaîne, le quota gratuit suffit largement. Pour surveiller des milliers de chaînes de façon planifiée, soit vous demandez une augmentation de quota à Google (un formulaire et un examen), soit vous étalez les requêtes sur plusieurs jours. Aucune des deux options n’est agréable quand vous avez une échéance.

Option 2 : Sautez la Configuration et Obtenez du JSON Directement

Si vous ne voulez pas d’un projet Google Cloud, d’une clé d’API, de calculs de quota et de votre propre boucle de pagination, vous pouvez passer un identifiant ou une URL de chaîne à une API de scraping et récupérer les mêmes données structurées en un seul appel.

L’endpoint youtube-channel de ScrapeUnblocker lit les mises en ligne d’une chaîne et renvoie chaque vidéo avec des viewCount, likeCount et commentCount exacts, une duration à la fois en ISO-8601 et en durationSeconds prêt à l’emploi, la description et un horodatage publishedAt. Le résumé de la chaîne contient subscriberCount, videoCount, le viewCount total et l’identifiant. Un paramètre limit (de 1 à 200) contrôle jusqu’où vous paginez au-delà du premier lot.

import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/content/youtube-channel",
    headers={"x-scrapeunblocker-key": "VOTRE_CLE"},
    json={"channel": "@nomdechaine", "limit": 100},
)
data = resp.json()

print(data["channel"]["subscriberCount"], "abonnés")
for v in data["videos"]:
    print(v["publishedAt"], v["durationSeconds"], v["viewCount"], v["title"])

Vous obtenez une seule charge JSON avec les statistiques de la chaîne et la liste des vidéos déjà analysée, y compris durationSeconds pour vous éviter la conversion ISO-8601. Il n’y a pas de quota à budgétiser ni de clé à provisionner chez Google. Choisissez cette option quand vous préférez consacrer votre temps à l’analyse plutôt qu’à la plomberie de l’API.

Quoi Faire avec les Données

Une fois que vous avez des chiffres exacts par vidéo en JSON, le travail utile commence :

  • Classer un catalogue. Triez par viewCount pour trouver les vrais succès d’une chaîne, ou par vues par jour depuis publishedAt pour repérer les vidéos qui montent encore.
  • Suivre la croissance. Enregistrez le viewCount et le videoCount de la chaîne de façon planifiée et faites la différence pour mesurer l’élan, pas des chiffres de vanité.
  • Calculer des taux d’engagement. likeCount / viewCount et commentCount / viewCount n’ont de sens qu’avec des chiffres exacts. Des compteurs arrondis transforment les ratios en bruit.
  • Étudier la cadence et la durée. Regroupez durationSeconds et publishedAt pour voir si les vidéos plus longues ou plus courtes d’un créateur marchent mieux, et à quelle fréquence il publie.

FAQ

Les compteurs de vues des vidéos YouTube sont-ils exacts ou arrondis ? Les viewCount, likeCount et commentCount d’une vidéo issus de l’API de données sont des entiers exacts. Seul subscriberCount est arrondi, à trois chiffres significatifs, et c’est une politique de Google qui s’applique à toute façon de le lire.

Est-il permis de scraper des données publiques de YouTube ? Lire des données publiques et non personnelles comme les statistiques publiques d’une vidéo présente en général moins de risque que d’accéder à des informations privées ou personnelles, mais vous restez lié par les Conditions d’utilisation de YouTube et par la loi locale. Ne collectez que des données publiques, respectez les limites de débit, et si vous avez le moindre doute sur un usage précis, demandez un avis juridique.

Pourquoi la durée de la vidéo est-elle renvoyée sous la forme PT12M30S ? C’est le format de durée ISO-8601, que l’API de données de YouTube utilise pour duration. PT12M30S signifie 12 minutes 30 secondes. Convertissez-le en secondes avec une bibliothèque comme isodate, ou utilisez une source qui renvoie déjà un durationSeconds numérique.

Combien de vidéos puis-je récupérer d’une chaîne ? Chaque vidéo publique se trouve dans la playlist cachée de “mises en ligne” de la chaîne, il n’y a donc pas de plafond au-delà de jusqu’où vous paginez. Avec l’API de données, vous suivez nextPageToken jusqu’à épuisement ; avec un endpoint de scraping, vous fixez un limit (ici jusqu’à 200 par requête) et vous paginez à partir de là.

Obtenir des Données YouTube Propres

Les chiffres exacts que vous voulez ne sont jamais dans le texte arrondi de la page, donc scraper le HTML est le mauvais outil. Lisez-les plutôt depuis une source structurée : l’API de données de YouTube si gérer des clés et un quota vous convient, ou une API de scraping quand vous préférez recevoir du JSON analysé en un seul appel.

Si vous voulez sauter la configuration de Google Cloud et l’analyse de l’ISO-8601, ScrapeUnblocker renvoie les vidéos d’une chaîne avec des chiffres exacts, des durées en secondes et des dates de publication en JSON propre. Consultez la documentation pour la structure complète de la réponse et les autres endpoints de données.

Essayez ScrapeUnblocker gratuitement

Taux de réussite de plus de 95 % · à partir de 0,55 € pour 1 000 appels · 500 requêtes gratuites à l'inscription.

Essayer gratuitement → Voir les tarifs