305 votes

API YouTube pour récupérer toutes les vidéos d'une chaîne

Nous avons besoin d'une liste de vidéos par nom de chaîne sur YouTube (en utilisant l'API).

Nous pouvons obtenir une liste de chaînes (uniquement le nom de la chaîne) en utilisant l'API ci-dessous :

https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar

Vous trouverez ci-dessous un lien direct vers les chaînes

https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g

O

WWW.YouTube.com/channel/HC-8jgBP-4rlI

Maintenant, nous avons besoin des vidéos du canal >> UCqAEtEr0A0Eo2IVcuWBfB9g ou HC-8jgBP-4rlI.

Nous avons essayé

https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&User=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&q=UC7Xayrf2k0NZiz3S04WuDNQ

Mais cela ne sert à rien.

Nous avons besoin de toutes les vidéos publiées sur la chaîne. Les vidéos téléchargées sur une chaîne peuvent provenir de plusieurs utilisateurs. Je ne pense donc pas qu'il soit utile de fournir un paramètre d'utilisateur...

293voto

yahska Points 543

Vous devez examiner le API de données YouTube . Vous y trouverez de la documentation sur la manière d'accéder à l'API. Vous trouverez également bibliothèques clients .

Vous pouvez également faire les demandes vous-même. Voici un exemple d'URL qui récupère les dernières vidéos d'une chaîne :

https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20

Vous recevrez ensuite un JSON avec les identifiants et les détails de la vidéo, et vous pouvez construire l'URL de votre vidéo comme suit :

http://www.youtube.com/watch?v={video_id_here}

14voto

Mihir Bhatt Points 128

Voici le code qui renverra tous les identifiants des vidéos de votre chaîne

<?php 
    $baseUrl = 'https://www.googleapis.com/youtube/v3/';
    // https://developers.google.com/youtube/v3/getting-started
    $apiKey = 'API_KEY';
    // If you don't know the channel ID see below
    $channelId = 'CHANNEL_ID';

    $params = [
        'id'=> $channelId,
        'part'=> 'contentDetails',
        'key'=> $apiKey
    ];
    $url = $baseUrl . 'channels?' . http_build_query($params);
    $json = json_decode(file_get_contents($url), true);

    $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

    $params = [
        'part'=> 'snippet',
        'playlistId' => $playlist,
        'maxResults'=> '50',
        'key'=> $apiKey
    ];
    $url = $baseUrl . 'playlistItems?' . http_build_query($params);
    $json = json_decode(file_get_contents($url), true);

    $videos = [];
    foreach($json['items'] as $video)
        $videos[] = $video['snippet']['resourceId']['videoId'];

    while(isset($json['nextPageToken'])){
        $nextUrl = $url . '&pageToken=' . $json['nextPageToken'];
        $json = json_decode(file_get_contents($nextUrl), true);
        foreach($json['items'] as $video)
            $videos[] = $video['snippet']['resourceId']['videoId'];
    }
    print_r($videos);

Note : Y https://www.youtube.com/account_advanced après s'être connecté.

12voto

Stian Points 355

Vous trouverez ci-dessous une alternative à Python qui ne nécessite aucun paquetage particulier. En fournissant l'identifiant de la chaîne, il renvoie une liste de liens vidéo pour cette chaîne. Veuillez noter que vous avez besoin d'un Clé API pour qu'il fonctionne.

import urllib
import json

def get_all_video_in_channel(channel_id):
    api_key = YOUR API KEY

    base_video_url = 'https://www.youtube.com/watch?v='
    base_search_url = 'https://www.googleapis.com/youtube/v3/search?'

    first_url = base_search_url+'key={}&channelId={}&part=snippet,id&order=date&maxResults=25'.format(api_key, channel_id)

    video_links = []
    url = first_url
    while True:
        inp = urllib.urlopen(url)
        resp = json.load(inp)

        for i in resp['items']:
            if i['id']['kind'] == "youtube#video":
                video_links.append(base_video_url + i['id']['videoId'])

        try:
            next_page_token = resp['nextPageToken']
            url = first_url + '&pageToken={}'.format(next_page_token)
        except:
            break
    return video_links

8voto

xjcl Points 608

Étant donné que toutes les personnes qui répondent à cette question ont des problèmes dus à la Limite de 500 vidéos Voici une solution alternative utilisant youtube_dl en Python 3 . En outre, aucune clé API n'est nécessaire .

  1. Installer youtube_dl : sudo pip3 install youtube-dl
  2. Découvrez l'identifiant de votre chaîne cible . L'identifiant commence par UC. Remplacez le C pour Channel par U pour Upload (c'est-à-dire UU...). télécharger la liste de lecture .
  3. Utiliser le fonction de téléchargement de listes de lecture de youtube-dl. Idéalement, vous ne voulez PAS télécharger toutes les vidéos de la liste de lecture, ce qui est le cas par défaut, mais seulement les métadonnées.

Exemple (avertissement -- prend des dizaines de minutes) :

import youtube_dl, pickle

             # UCVTyTA7-g9nopHeHbeuvpRA is the channel id (1517+ videos)
PLAYLIST_ID = 'UUVTyTA7-g9nopHeHbeuvpRA'  # Late Night with Seth Meyers

with youtube_dl.YoutubeDL({'ignoreerrors': True}) as ydl:

    playd = ydl.extract_info(PLAYLIST_ID, download=False)

    with open('playlist.pickle', 'wb') as f:
        pickle.dump(playd, f, pickle.HIGHEST_PROTOCOL)

    vids = [vid for vid in playd['entries'] if 'A Closer Look' in vid['title']]
    print(sum('Trump' in vid['title'] for vid in vids), '/', len(vids))

8voto

Nikhil VJ Points 512

Grâce aux références partagées ici et ailleurs, j'ai réalisé un script / outil en ligne que l'on peut utiliser pour obtenir toutes les vidéos d'une chaîne.

Il combine des appels d'API à youtube.channels.list , playlistItems , videos . Il utilise des fonctions récursives pour que les rappels asynchrones soient exécutés à l'itération suivante dès qu'une réponse valide est obtenue.

Cela permet également de limiter le nombre de requêtes effectuées à la fois, ce qui vous évite d'enfreindre les règles de l'API YouTube. Partager des extraits abrégés puis un lien vers le code complet. J'ai contourné la limite de 50 résultats maximum par appel en utilisant la valeur nextPageToken qui vient dans la réponse pour récupérer les 50 résultats suivants et ainsi de suite.

function getVideos(nextPageToken, vidsDone, params) {
    $.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
        key: params.accessKey,
        part: "snippet",
        maxResults: 50,
        playlistId: params.playlistId,
        fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken",
        pageToken: ( nextPageToken || '')
        },
        function(data) {
            // commands to process JSON variable, extract the 50 videos info

            if ( vidsDone < params.vidslimit) {

                // Recursive: the function is calling itself if
                // all videos haven't been loaded yet
                getVideos( data.nextPageToken, vidsDone, params);

            }
             else {
                 // Closing actions to do once we have listed the videos needed.
             }
    });
}

Cela permet d'obtenir une liste de base des vidéos, comprenant l'identifiant, le titre, la date de publication et d'autres informations similaires. Mais pour obtenir plus de détails sur chaque vidéo, comme le nombre de vues et d'appréciations, il faut faire des appels d'API à videos .

// Looping through an array of video id's
function fetchViddetails(i) {
    $.getJSON("https://www.googleapis.com/youtube/v3/videos", {
        key: document.getElementById("accesskey").value,
        part: "snippet,statistics",
        id: vidsList[i]
        }, function(data) {

            // Commands to process JSON variable, extract the video
            // information and push it to a global array
            if (i < vidsList.length - 1) {
                fetchViddetails(i+1) // Recursive: calls itself if the
                                     //            list isn't over.
            }
});

Voir le code complet ici et version live ici . (Edit : correction du lien github)
Edit : Dependencies : JQuery, Papa.parse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X