2012-12-16 5 views
7

Tôi đang cố tạo một chương trình JavaScript nhỏ để truy vấn YouTube API cho danh sách phát đã cho, được sắp xếp theo thời lượng. Mọi thứ hoạt động hoàn hảo nếu không, nhưng thứ tự không chiếm toàn bộ danh sách phát, chỉ 25 video mới nhất trên đó! Dưới đây là một hoàn chỉnh tối thiểu làm việc example as a JSFiddle và đây là một phần JavaScript của nó:YouTube API 'orderby = duration' không xử lý toàn bộ danh sách phát, chỉ các video mới nhất

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

Tôi đã cố gắng này trong cả XML và JSON và tôi cũng đã cố gắng loại khác tìm kiếm bên cạnh việc tìm kiếm danh sách nhạc. Việc sắp xếp API chỉ là các video mới nhất của kết quả có vẻ khá vô nghĩa. Làm cách nào để lấy lại các video dài nhất hoặc ngắn nhất của một danh sách phát hoặc các video được tải lên bởi một người dùng cụ thể cho vấn đề đó?

Trả lời

6

EDIT

Tôi không nghĩ rằng các chức năng bạn muốn có sẵn. Sắp xếp theo thời lượng thậm chí không khả dụng trên chính YouTube. Tôi nghĩ bạn sẽ cần sử dụng max-resultsstart-index để tìm nạp các khối video. Sau đó, bạn có thể sắp xếp danh sách được biên dịch theo thời lượng.

Dưới đây là một ví dụ làm việc của một giải pháp khả thi: http://jsfiddle.net/PKcnb/8


tôi tìm thấy nơi Google cho biết explicity này không thể thực hiện.

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

Phần này giải thích làm thế nào để lấy một thức ăn có chứa tất cả các video được tải lên bởi một người dùng cụ thể. Bạn không được bao gồm search parameters trong các yêu cầu truy xuất nguồn cấp dữ liệu video đã tải lên. Thông số sẽ tạo nguồn cấp dữ liệu từ chỉ mục tìm kiếm của YouTube, giới hạn hiệu quả tập hợp kết quả thành video được lập chỉ mục, công khai, thay vì trả lại danh sách đầy đủ các video đã tải lên của người dùng.

Nó tiếp tục nói:

Để yêu cầu thức ăn của tất cả các video được tải lên bởi hiện đang đăng nhập trong người dùng, gửi một yêu cầu GET vào URL sau. Yêu cầu này yêu cầu mã thông báo xác thực, cho phép YouTube xác định người dùng.

Vì vậy, bạn có thể thử nghiệm bằng cách sử dụng mã thông báo xác thực.


Original Post

  1. Các API docs for orderby làm cho nó âm thanh như chỉ đáp ứng được sắp xếp.

    Tham số orderby, được hỗ trợ cho nguồn cấp dữ liệu video và nguồn cấp dữ liệu danh sách phát, chỉ định phương pháp sẽ được sử dụng để sắp xếp các mục nhập trong phản hồi API.

  2. Ngoài ra, the max-results tag sẽ cho phép bạn chỉ định số lượng mặt hàng cần trả lại.

  3. Here's an example of how you could pull more (50 in this example) kết quả đã được sắp xếp. Có vẻ như bạn có thể phải yêu cầu bao nhiêu tùy thích và sau đó sắp xếp. Chắc chắn không phải lý tưởng.

  4. Retrieving a user's playlists

+0

Bạn sẽ nghĩ sắp xếp phía máy chủ kết quả sẽ là một hoạt động tổng thể rẻ hơn so với trả lời một chục hay nhiều truy vấn cá nhân mà không sắp xếp bất cứ điều gì ... Chắc chắn không lý tưởng, như bạn nói. – ZeroOne

+0

@ZeroOne, tôi đồng ý. Tôi thực sự không hiểu được lý do tại sao họ sẽ có nó thực hiện theo cách đó. – JSuar

+0

Liên kết này có thể làm sáng tỏ thêm một chút về chủ đề này. http://apiblog.youtube.com/2012/03/keeping-things-fresh.html – JSuar