2016-03-30 36 views
1

İlgili videoların belirli bir videoya doğru küçük resimler olarak alınmasıyla ilgili bir sorun yaşıyorum. Kodumda, search->list doğru ayarlanmış ve ilgili videoların farklı başlıklarını ve küçük resim URL'lerini döndürdüm. Ancak, search->list, contentDetails veya statistics parametresine sahip olmadığından, aynı sorunla ilgili olarak here ile ilgili başka bir soru buldum ve videos->list almak için ikinci bir çağrı kullandı çünkü bu süreleri ve görüntüleme sayısını alabilmek için bu parametreleri destekliyor. Ancak sorun, her iki değerin de (vidDuration & viewCount) hiçbir şey iletilmemesi ve öğenin içinden geçirilip durdurulduğu şeklinde tanımlanmamış olarak işaretlenmiş olmasıdır. search->list 'in maddesine göre duration ve viewCount değerlerini nasıl yapabilirim?Bölüm İçeriği İle İlgili VideolarDetaylar ve İstatistikler - Youtube API V3

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 array: ", 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 recognized 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  
        } 
       } 
      ); 
     } 
    ); 
} 

tek video.html komut:

$(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"); 
     } 
    }); 
}); 

cevap

1

Sen arama sonuçlarında item kastediyorsun. Videolara bir get isteği gönderirken, video contentDetails ve istatistiklerine bir yanıt alırsınız. Görünüşe göre, geri verilen yanıtı yakalamadın.

$.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 
        } 
       ); 

NOT: Bir istekte birden fazla video contentDetails/istatistiklerini almak için virgülle sınırlanmış video kimliği dizesi iletebilirsiniz.

+1

Kod formunda bana bir örnek göstermeyi düşünüyor musunuz lütfen? Teşekkür ederim! – TheAmazingKnight

+0

Kodumu düzenledim ve 'relatedVids (videoId) işlevi için yalnızca bir parametreye sahip olmanın ve ne dediğinize bağlı olarak vidDuration ve viewCount anahtar kelimesini döndürme gibi birkaç şeyi düzeltdim, ancak bir nedenden dolayı, $ .get() 'vidDuration 've' viewCount' ifadesini almak için videoId'den nesne var, ancak her iki değer hala hiçbir şey içermiyor ve boş kalıyor. – TheAmazingKnight

+0

@TheAmazingKnight Benim dikkatimi çekmedin. Başlangıçta, 'videolar' isteğinin herhangi bir parametresi olmadığı için geri arama işlevi görürsünüz. Bu, geri verilen yanıtı sessizce yok sayar anlamına gelir. Bu yüzden kodunuzu "videoItem" parametresini geri çağırmaya geçirdim. –