web-dev-qa-db-fra.com

Youtube api v3 Obtenir la liste des vidéos de l'utilisateur

Avec Youtube api v2, il existe un moyen simple d'obtenir des vidéos. Envoyez simplement une requête comme celle-ci:

http://gdata.youtube.com/feeds/mobile/videos?max-results=5&alt=rss&orderby=published&author=OneDirectionVEVO

L'API Youtube v2 dispose également d'une page de démonstration interactive permettant de créer une requête: http://gdata.youtube.com/demo/index.html

Avec Youtube api v3, je ne connais pas la méthode correspondante. S'il vous plaît montrez-moi le chemin avec api v3.

Je vous remercie!

60
vietstone

La méthode channels # list renverra un JSON contenant des informations sur le canal, y compris l'ID de la playlist "uploads":

https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=OneDirectionVEVO&key={YOUR_API_KEY}

Avec l'identifiant de la playlist, vous pouvez obtenir les vidéos avec la méthode playlistItems # list :

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUbW18JZRgko_mOGm5er8Yzg&key={YOUR_API_KEY}

Vous pouvez les tester à la fin des pages de documentation.

113
Vinicius Pinto

Cela devrait le faire. Ce code obtient et affiche simplement le titre mais vous pouvez obtenir tous les détails que vous voulez

// Get Uploads Playlist
$.get(
   "https://www.googleapis.com/youtube/v3/channels",{
   part : 'contentDetails', 
   forUsername : 'USER_CHANNEL_NAME',
   key: 'YOUR_API_KEY'},
   function(data) {
      $.each( data.items, function( i, item ) {
          pid = item.contentDetails.relatedPlaylists.uploads;
          getVids(pid);
      });
  }
);

//Get Videos
function getVids(pid){
    $.get(
        "https://www.googleapis.com/youtube/v3/playlistItems",{
        part : 'snippet', 
        maxResults : 20,
        playlistId : pid,
        key: 'YOUR_API_KEY'},
        function(data) {
            var results;
            $.each( data.items, function( i, item ) {
                results = '<li>'+ item.snippet.title +'</li>';
                $('#results').append(results);
            });
        }
    );
}


<!--In your HTML -->
<ul id="results"></ul>
21
Brad

Les choses ont beaucoup changé dans la V3 de l'API. Voici un video qui vous guide à travers les appels de l’API v3 nécessaires pour obtenir la liste des vidéos téléchargées sur un canal donné, avec des démonstrations en direct à l’aide de l’API Explorer.

YouTube Developers Live: Obtenir les téléchargements d'une chaîne en v3 - https://www.youtube.com/watch?v=RjUlmco7v2M

4
Babatunde Adeyemi

Au cas où cela aiderait quelqu'un ici, c’est ce que j’ai découvert et qui semble jusqu’à présent bien fonctionner pour moi. J'authentifie le membre via OAuth 2.0 avant de faire cette demande, qui me donnera les vidéos des membres authentifiés. Comme toujours, votre kilométrage personnel peut varier: D

curl https://www.googleapis.com/youtube/v3/search -G \
-d part=snippet \
-d forMine=true \
-d type=video \
-d order=date \
-d access_token={AUTHENTICATED_ACCESS_TOKEN}
2
Jonmark Weber

L'équivalent de la demande que vous avez publiée est en fait une recherche dans l'API 3.0, pas une demande de playlist. C'est aussi plus facile de le faire de cette façon. Vous devez cependant préciser le nom d'utilisateur d'un identifiant de canal.

ex. GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUGhCVGZ0ZSpe5hJHWyiLwHA&key= {YOUR_API_KEY}

2
xangadix

Si le coût du quota est pris en compte, il peut être avantageux de suivre cet algorithme simple. 

Commencez par récupérer les données à partir de https://www.youtube.com/feeds/videos.xml?channel_id= ... Il s'agit d'un simple flux XML qui vous donnera l'ID de la vidéo, mais vous ne pouvez pas spécifier davantage. ' parties '(statistiques, etc).

En utilisant les identifiants vidéo de cette liste, effectuez une requête sur le point de terminaison de l'API/videos, ce qui permet de créer une liste d'identifiants vidéo séparés par des virgules, qui ne devrait générer qu'un coût de quota, plus 0 à 2 pour tout paramètre de pièce supplémentaire. Comme @chrismacp le fait remarquer, l’utilisation du point de terminaison/search est plus simple, mais a un coût de quota de 100, ce qui peut s’ajouter rapidement.

Il y a une considération de ressource ici (unité centrale de traitement, mémoire, etc.) lors du deuxième appel, mais je crois que dans de nombreux scénarios, cela peut être une méthode utile.

2
Appl3s

function tplawesome(e,t){res=e;for(var n=0;n<t.length;n++){res=res.replace(/\{\{(.*?)\}\}/g,function(e,r){return t[n][r]})}return res}



$(function() {


    $(".form-control").click(function(e) {


       e.preventDefault();


       // prepare the request


       var request = gapi.client.youtube.search.list({


            part: "snippet",


            type: "video",


            q: encodeURIComponent($("#search").val()).replace(/%20/g, "+"),


            maxResults: 20,


            order: "viewCount",


            publishedAfter: "2017-01-01T00:00:00Z"


       }); 


       // execute the request


       request.execute(function(response) {


          var results = response.result;


          $("#results").html("");


          $.each(results.items, function(index, item) {


            $.get("tpl/item.html", function(data) {


                $("#results").append(tplawesome(data, [{"title":item.snippet.title, "videoid":item.id.videoId ,"descrip":item.snippet.description ,"date":item.snippet.publishedAt ,"channel":item.snippet.channelTitle ,"kind":item.id.kind ,"lan":item.id.etag}]));


            });


            


          });


          resetVideoHeight();


       });


    });


    


    $(window).on("resize", resetVideoHeight);


});



function resetVideoHeight() {


    $(".video").css("height", $("#results").width() * 9/16);


}



function init() {


    gapi.client.setApiKey("YOUR API KEY .... USE YOUR KEY");


    gapi.client.load("youtube", "v3", function() {


        // yt api is ready


    });


}

Vérifiez le code complet ici https://thecodingshow.blogspot.com/2018/12/youtube-search-api-website.html

0
R P S Naik

En PHP: J'ai utilisé l'attribut pageToken pour accéder à toutes les pages de la liste de lecture.J'espère que cela pourra vous aider. 

//step 1: get playlist id

 $response = file_get_contents("https://www.googleapis.com/youtube/v3/channels?key={$api_key}&forUsername={$channelName}&part=contentDetails");
 $searchResponse = json_decode($response,true);
 $data = $searchResponse['items'];
 $pid =  $data[0]['contentDetails']['relatedPlaylists']['uploads'];

//step 2: get all videos in playlist

 $nextPageToken = '';
 while(!is_null($nextPageToken)) {
     $request = "https://www.googleapis.com/youtube/v3/playlistItems?key={$api_key}&playlistId={$pid}&part=snippet&maxResults=50&pageToken=$nextPageToken";

    $response = file_get_contents($request);
    $videos = json_decode($response,true);

    //get info each video here...

   //go next page
    $nextPageToken = $videos['nextPageToken'];
}
0
Phạm Văn Thủy

Veuillez ne pas utiliser playlistitems.list si vous souhaitez obtenir les vidéos d'une liste de lecture avec plus de 300 vidéos. Vous pouvez l'essayer en direct dans le lien Google " https://developers.google.com/youtube/v3/docs/playlistItems/list " dans la section "Essayez-le". Il retourne indéfini.

J'ai utilisé dans mon projet aussi. Il retourne non défini uniquement.

0
Sriharsha P K

Dans node.js, cela peut être réalisé avec le code suivant. 

Requiert authKey et channelId en tant que paramètre d'objet options.

cb callback est appelé une fois les données extraites.

async function fetchChannelInfo(options) {
  const channelUrl = `https://www.googleapis.com/youtube/v3/channels?part=contentDetails,statistics&id=${
    options.channelId
  }&key=${options.authKey}`;
  const channelData = await axios.get(channelUrl);

  return channelData.data.items[0];
}
function fetch(options, cb) {
  fetchChannelInfo(options).then((channelData) => {
    options.playlistId = channelData.contentDetails.relatedPlaylists.uploads;
    const paylistUrl = `https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=${
      options.playlistId
    }&key=${options.authKey}`;

    axios
      .get(paylistUrl)
      .then((response) => {
        const payloadData = ;

        const videoList = [];
        response.data.items.forEach((video) => {
          videoList.Push({
            publishedAt: video.snippet.publishedAt,
            title: video.snippet.title,
            thumbnails: thumbnails,
            videoId: video.snippet.resourceId.videoId,
          });
        });

        cb(null, videoList);
      })
      .catch((err) => {
        cb(err, null);
      });
  });
}

Remarque: axios est utilisé pour les requêtes RESTful. À installer

npm install axios
0
Nafiz Bayındır

Une autre méthode peut consister à obtenir les listes de lecture de l'utilisateur authentifié actuellement par oauth via: property mine = true

oauth access_token est récupéré après l'authentification: https://developers.google.com/youtube/v3/guides/authentication

https://www.googleapis.com/youtube/v3/playlists?part=id&mine=true&access_token=ya29.0gC7xyzxyzxyz
0
Bill McNamara

Voici un code utilisant la bibliothèque de nœuds Google APIs officielle ( https://github.com/google/google-api-nodejs-client )

const readJson = require("r-json");
const google = require('googleapis');
const Youtube = google.youtube('v3');

// DONT store your credentials in version control
const CREDENTIALS = readJson("/some/directory/credentials.json");

let user = "<youruser>";
let numberItems = 10; 

let channelConfig = {
  key: CREDENTIALS.youtube.API_KEY,
  part: "contentDetails",
  forUsername: user
};

Youtube.channels.list(channelConfig, function (error, data) {

  if (error) {
    console.log("Error fetching YouTube user video list", error);
    return;
  }

  // Get the uploads playlist Id
  let uploadsPlaylistId = data.items[0].contentDetails.relatedPlaylists.uploads;

  let playlistConfig = {
    part : 'snippet',
    maxResults : size,
    playlistId : uploadsPlaylistId,
    key: CREDENTIALS.youtube.API_KEY
  };

  // Fetch items from upload playlist
  Youtube.playlistItems.list(playlistConfig, function (error, data) {

    if (error) {
      console.log("Error fetching YouTube user video list", error);
    }

    doSomethingWithYourData(data.items);
  });
});
0
chrismacp
$.get(
    "https://www.googleapis.com/youtube/v3/channels",{
      part: 'snippet,contentDetails,statistics,brandingSettings',
      id: viewid,
      key: api},
      function(data){

        $.each(data.items, function(i, item){


          channelId = item.id;
          pvideo = item.contentDetails.relatedPlaylists.uploads;
          uploads(pvideo);
});

      });

La fonction de téléchargement peut être

function uploads(pvideo){


       $.get(
        "https://www.googleapis.com/youtube/v3/playlistItems",{
          part: 'snippet',
          maxResults:12,
          playlistId:pvideo,
          key: api},
          function(data){


            $.each(data.items, function(i, item){

                 videoTitle = item.snippet.title;
             videoId = item.id;
            description = item.snippet.description;
            thumb = item.snippet.thumbnails.high.url;
            channelTitle = item.snippet.channelTitle;
            videoDate = item.snippet.publishedAt;
            Catagoryid = item.snippet.categoryId;
            cID = item.snippet.channelId;

            })
          }
        );
     }
0
Shahzaib Chadhar