2015-06-20 20 views
10

Temel olarak, her videonun video süresini arama sırasında sonuçlarda görünmeye çalışıyorum. Seninle uğraşması için kurulmuş küçük bir demo var. AYRICAYouTube Data API'sı ile video süresi elde edilsin mi?

- Ben M/S biçiminde video (00:00) uzunluğunu ortalama süresi derken ..

DEMOhttp://codepen.io/mistkaes/pen/6b6a347c7d24edee15b3491420db4ecd

jQuery:

var apikey = '<API KEY>'; 

$(function() { 
    var searchField = $('#search-input'); 

    $('#search-form').submit(function(e) { 
     e.preventDefault(); 
    }); 
}); 

function search() { 
    $('#results').html(''); 

    q = $('#search-input').val(); 

    $.get(
     "https://www.googleapis.com/youtube/v3/search", { 
      part: 'snippet, id', 
      q: q, 
      maxResults: 50, 
      type: 'video', 
      key: apikey 
     }, 
     function(data) { 
      $.each(data.items, function(i, item) { 
       var output = getResults(item); 

       $('#results').append(output); 
      }); 
     }); 
} 

function getResults(item) { 
    var videoID = item.id.videoId; 
    var title = item.snippet.title; 
    var thumb = item.snippet.thumbnails.high.url; 
    var channelTitle = item.snippet.channelTitle; 

    var output = '<li>' + 
     '<div class="list-left">' + 
     '<img src="' + thumb + '">' + 
     '</div>' + 
     '<div class="list-right">' + 
     '<h3><a href="http://youtube.com/embed/' + videoID + '?rel=0">' + title + '</a></h3>' + 
     '<p class="cTitle">' + channelTitle + '</p>' + 
     '</div>' + 
     '</li>' + 
     '<div class="clearfix"></div>' + 
     ''; 

    return output; 
} 
+1

Lütfen cevabımı kontrol edin yardımcı olur umarım. – squiroid

+0

BTW, bu gerçekten geç, ama önemli. API anahtarlarınızı göndermeyin! Bunlar özel. Birisi şimdi kotanızı kötüye kullanabilir. – ChiralMichael

cevap

13

Sorgunuzu arandim ve arama api ile bir issue bulundu.

Aramak, aramayı yaptıktan sonra Youtube Data API's Video kaynağına bir arama yapmaktır. Sen 50 videoda arama id en kadar koyabilirsiniz, böylece her bir öğesi için aramak zorunda kalmazsınız

Ben senin codepen ve ne yaptım şu güncelleme: ait

1) alın URL Arama yaptığınız her video.

2)

süre almak için bir başka Ajax arama gönder: -

for (var i = 0; i < data.items.length; i++) { 
    var url1 = "https://www.googleapis.com/youtube/v3/videos?id=" + data.items[i].id.videoId + "&key=AIzaSyDYwPzLevXauI-kTSVXTLroLyHEONuF9Rw&part=snippet,contentDetails"; 
    $.ajax({ 
     async: false, 
     type: 'GET', 
     url: url1, 
     success: function(data) { 
      if (data.items.length > 0) { 
       var output = getResults(data.items[0]); 
       $('#results').append(output); 
      } 
     } 
    }); 
} 

3) API yüzden mm:ss biçime dönüştürülmüş ISO biçiminde zaman vermek (İstediğin gibi).

function convert_time(duration) { 
    var a = duration.match(/\d+/g); 

    if (duration.indexOf('M') >= 0 && duration.indexOf('H') == -1 && duration.indexOf('S') == -1) { 
     a = [0, a[0], 0]; 
    } 

    if (duration.indexOf('H') >= 0 && duration.indexOf('M') == -1) { 
     a = [a[0], 0, a[1]]; 
    } 
    if (duration.indexOf('H') >= 0 && duration.indexOf('M') == -1 && duration.indexOf('S') == -1) { 
     a = [a[0], 0, 0]; 
    } 

    duration = 0; 

    if (a.length == 3) { 
     duration = duration + parseInt(a[0]) * 3600; 
     duration = duration + parseInt(a[1]) * 60; 
     duration = duration + parseInt(a[2]); 
    } 

    if (a.length == 2) { 
     duration = duration + parseInt(a[0]) * 60; 
     duration = duration + parseInt(a[1]); 
    } 

    if (a.length == 1) { 
     duration = duration + parseInt(a[0]); 
    } 
    var h = Math.floor(duration/3600); 
    var m = Math.floor(duration % 3600/60); 
    var s = Math.floor(duration % 3600 % 60); 
    return ((h > 0 ? h + ":" + (m < 10 ? "0" : "") : "") + m + ":" + (s < 10 ? "0" : "") + s); 
} 

4) videonuzun başlığı ile sonucunuzu ekleyin.

'<p class="cTitle">' + channelTitle + ' --->' + duration + '</p>' 
İlgili konular