2012-12-16 15 views
7

我正在尝试构建一个JavaScript程序来查询给定播放列表的YouTube API,按期限排序。一切正常,否则完美,但排序不占整个播放列表,只有25个最新的视频!这里的工作example as a JSFiddle最小的完整和这里是它的JavaScript部分:YouTube API'orderby = duration'不处理整个播放列表,只是最新的视频

var playlistId = "UUAuUUnT6oDeKwE6v1NGQxug";  
jQuery.getJSON(
    "https://gdata.youtube.com/feeds/api/playlists/"+playlistId+"?v=2&orderby=duration&alt=json", 
    function(data) { 
     $.each(data.feed.entry, function(key, val) { 
      var title = val.title.$t; 
      var url = val.content.src; 
      var duration = val.media$group.yt$duration.seconds; 
      var minutes = Math.floor(duration/60); 
      var seconds = (duration % 60); 

      if(seconds < 10) seconds = "0"+seconds; 

      var newRow = $("<tr></tr>"); 
      newRow.append("<td><a href='"+url+"'>"+title+"</a></td>"); 
      newRow.append("<td class='dur'>"+minutes+":"+seconds+"</td>"); 
      $("#videos").append(newRow); 
     }); 
    } 
); 

我已经在这两个XML尝试这样做,JSON,我也试过其他类型的搜索,除了播放列表搜索。让API排序结果的最新视频看起来毫无意义。 我究竟如何检索播放列表的最长或最短视频,或者由某个给定用户上传的那些视频?

回答

6

编辑

我不认为你需要的功能是可用的。按照持续时间排序甚至在YouTube本身上都不可用。我认为您需要使用max-resultsstart-index来获取视频块。然后您可以按持续时间对编译列表进行排序。

这里是一个可能的解决方案的工作示例:http://jsfiddle.net/PKcnb/8


我发现其中谷歌表示,这明确地是不可能的。

YouTube API v2.0 – Video Feed Types: Videos uploaded by a specific user

本节介绍了如何检索包含所有由特定用户上传的视频 饲料。 您不应在请求中包含search parameters以检索上传的视频供稿。该 参数将产生从YouTube的搜索索引饲料, 有效地限制 结果设置为索引,公共视频,而不是返回的用户上传视频的完整列表。

它接着说:

要请求由当前登录的用户 上传的所有视频的饲料,发送GET请求发送到以下网址。此请求需要 身份验证令牌,该令牌可使YouTube识别用户。

因此,它可能是可能的,但您将不得不使用身份验证令牌对其进行测试。


原贴

  1. API docs for orderby使其听起来像只被排序的响应。

    视频供稿和播放列表供稿支持的orderby参数指定将用于对API响应中的条目进行排序的方法。

  2. 此外,the max-results tag将允许您指定要返回的项目数。

  3. Here's an example of how you could pull more (50 in this example)结果已经排序。看起来你可能需要尽可能多地请求然后排序。绝对不理想。

  4. Retrieving a user's playlists

+0

你会认为在对结果排序服务器端会比回答十几个或更多个人查询,而无需任何排序的整体操作比较便宜......绝对不是理想的,像你说的。 – ZeroOne

+0

@ZeroOne,我同意。我真的不明白为什么他们会这样执行它的逻辑。 – JSuar

+0

这个链接可能会在这个话题上多一点点亮。 http://apiblog.youtube.com/2012/03/keeping-things-fresh.html – JSuar

相关问题