Video correlati con contenuti di contenuto e statistiche – Youtube API V3

Ho un problema con il recupero di video correlati come anteprime verso un video specifico. Nel mio codice, ho l' search->list impostato correttamente e restituisco i diversi titoli e URL di miniatura per i video correlati. Tuttavia, poiché la search->list non dispone di un contentDetails parametri o statistics , ho trovato un'altra domanda relativa al mio stesso problema esattamente qui e ho usato una chiamata secondaria per get i videos->list poiché support questi parametri per poter recuperare la durata e il count delle visualizzazioni. Ma il problema è che entrambi i valori ( vidDuration & viewCount ) non vengono passati nulla e contrassegnati come indefiniti quando l'elemento viene passato attraverso di esso e arrestato. Come posso fare la duration viewCount e il valore di viewCount base all'elemento di viewCount search->list ?

script.js:

 function relatedVids(videoId) { debugger; $.get( // get related videos related to videoId - relatedToVideoId "https://www.googleapis.com/youtube/v3/search", { part: 'snippet', maxResults: vidResults, relatedToVideoId: videoId, // $.cookie("id"); from single-video.html type: 'video', key: 'XXXXXXXXX' }, function(data) { $.each(data.items, function(i, item) { console.log(item); var vidTitle = item.snippet.title; // video title //var videoId = item.snippet.resourceId.videoId; // video id //var vidDuration = item.contentDetails.duration; //var viewCount = item.statistics.viewCount; var vidThumbUrl = item.snippet.thumbnails.default.url; // video thumbnail url var extractVideoId = null; // var to extract video id string from vidThumbUrl // check if vidThumbUrl is not null, empty string, or undefined if(vidThumbUrl) { //console.log("vidThumbUrl: ", vidThumbUrl); var split = vidThumbUrl.split("/"); // split string when '/' seen extractVideoId = split[4]; // retrieve the fourth index on the fourth '/' //console.log("extractVideoId: ", extractVideoId); // YE7VzlLtp-4 //console.log("split arrays: ", split); } else console.error("vidThumbUrl is either undefined or null or empty string."); // if video title is longer than 25 characters, insert the three-dotted ellipse if(vidTitle.length > 25) { var strNewVidTitle = vidTitle.substr(0, 25) + "..."; vidTitle = strNewVidTitle; } // search->list only takes snippet, so to get duration and view count; have to call this function that has the receachzed param structure $.get( "https://www.googleapis.com/youtube/v3/videos", { part: 'contentDetails, statistics', id: extractVideoId, //item.snippet.resourceId.videoId, key: 'XXXXXXXXX', }, // return search->list item's duration and view count function(item) { vidDuration = item.contentDetails.duration; // pass item's duration return vidDuration; }, function(item) { viewCount = item.statistics.viewCount; // pass item's view count return viewCount; } ); try { var vidThumbnail = '<div class="video-thumbnail"><a class="thumb-link" href="single-video.html"><div class="video-overlay"><img src="imgs/video-play-button.png"/></div><img src="' + vidThumbUrl + '" alt="No Image Available." style="width:204px;height:128px"/></a><p><a class="thumb-link" href="single-video.html">' + vidTitle + '</a><br/>' + convert_time(vidDuration) + ' / Views: ' + viewCount + '</p></div>'; // print results $('.thumb-related').append(vidThumbnail); } catch(err) { console.error(err.message); // log error but continue operation } } ); } ); } 

script single-video.html:

 $(document).ready(function() { var videoId; $(function() { if($.cookie("title") != null && $.cookie("id") != null) { var data = '<div class="video"><iframe height="' + vidHeight + '" width="' + vidWidth + '" src=\"//www.youtube.com/embed/' + $.cookie("id") + '\"></iframe></div><div class="title">' + $.cookie("title") + '</div><div class="desc">' + $.cookie("desc") + '</div><div class="duration">Length: ' + $.cookie("dur") + '</div><div class="stats">View Count: ' + $.cookie("views") + '</div>'; $("#video-display").html(data); $("#tab1").html($.cookie("desc")); videoId = $.cookie("id"); //vidDuration = $.cookie("dur"); works but prints out the same value for each //viewCount = $.cookie("views"); works but prints out the same value for each debugger; relatedVids(videoId); // called here console.log("from single-vid.html globalPlaylistId: ", $.cookie("playlistId")); // remove cookies after transferring it to this page for display $.removeCookie("title"); $.removeCookie("id"); $.removeCookie("desc"); $.removeCookie("views"); $.removeCookie("dur"); $.removeCookie("tags"); $.removeCookie("playlistId"); } }); }); 

Stai riferendo l' item nei risultati di ricerca. Quando hai pubblicato una richiesta di invio ai video, riceverai una risposta di contenuti video e statistiche. A quanto pare, non hai catturato la risposta restituita.

  $.get( "https://www.googleapis.com/youtube/v3/videos", { part: 'contentDetails, statistics', id: videoId, //item.snippet.resourceId.videoId, key: 'XXXXXXXXX', }, function(videoItem) { vidDuration = videoItem.contentDetails.duration; // pass item's duration viewCount = videoItem.statistics.viewCount; // pass item's view count } ); 

NOTA: è ansible passare una serie di ID video delimitati da una virgola per recuperare più contenuti video / statistiche in una sola richiesta.