2012-12-16 16 views
7

Próbuję zbudować niewielki program JavaScript, który wyszuka nazwę YouTube API dla danej listy odtwarzania uporządkowaną według czasu trwania. Wszystko działa idealnie, ale zamówienie nie uwzględnia całej listy odtwarzania, tylko 25 najnowszych filmów na jej temat! Oto pełna minimum pracy example as a JSFiddle i tu jest częścią JavaScript niego:Interfejs API serwisu YouTube "orderby = duration" nie obsługuje całej listy odtwarzania, tylko najnowsze filmy wideo

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

Próbowałem to zarówno w formacie XML i JSON i Próbowałem również inne rodzaje wyszukiwań oprócz wyszukiwania listy odtwarzania. Posiadanie API sortowania tylko najnowszych filmów z wynikami wydaje się zupełnie bezcelowe. Jak dokładnie mogę pobrać najdłuższe lub najkrótsze filmy z playlisty lub te przesłane przez danego użytkownika?

Odpowiedz

6

EDIT

Nie sądzę funkcjonalność chcesz jest dostępna. Zamawianie według czasu trwania nie jest nawet dostępne na samym YouTube. Myślę, że będziesz musiał użyć max-results i start-index, aby pobrać bloki filmów. Następnie możesz posortować listę skompilowaną według czasu trwania.

Oto przykład pracę z jednym z możliwych rozwiązań: http://jsfiddle.net/PKcnb/8


znalazłem gdzie Google mówi, że to jawnie nie jest możliwe.

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

tej sekcji opisano sposób pobierania paszy zawierającej wszystkie filmów przesłanych przez konkretnego użytkownika. Nie należy podawać search parameters w żądaniach odebrania przesłanego pliku wideo. Parametry wygenerują kanał z indeksu wyszukiwania YouTube, , skutecznie ograniczając zestaw wyników do zindeksowanych, publicznych filmów wideo, zamiast zwracania pełnej listy przesłanych przez użytkownika filmów.

To mówi dalej:

Aby otrzymać paszę wszystkich filmów przesłanych przez aktualnie zalogowanego użytkownika w , wysłać żądanie GET do następującego adresu URL. Żądanie to wymaga token uwierzytelniania, który umożliwia YouTube zidentyfikowanie użytkownika.

To może być możliwe, ale trzeba będzie przetestować go za pomocą tokena uwierzytelniania.


Original post

  1. API docs for orderby sprawiają, że brzmią jak tylko odpowiedzią jest posortowana.

    Parametr orderby obsługiwany dla kanałów wideo i kanałów listy odtwarzania określa metodę, która będzie używana do zamawiania wpisów w odpowiedzi API.

  2. Ponadto, the max-results tag pozwoli Ci określić, ile pozycji do zwrotu.

  3. Here's an example of how you could pull more (50 in this example) wyniki już posortowane. Wygląda na to, że możesz poprosić o tyle, ile możesz, a następnie posortować. Zdecydowanie nie idealny.

  4. Retrieving a user's playlists

+0

Można by pomyśleć sortowania po stronie serwera wyniki byłyby tańsze ogólna operacja niż odpowiadanie na kilkunastu indywidualnych zapytań bez sortowania nic ... Na pewno nie jest idealny, jak pan powiedział. – ZeroOne

+0

@ZeroOne, zgadzam się. Naprawdę nie rozumiem logiki, dlaczego mieliby ją wykonać w ten sposób. – JSuar

+0

Ten link może rzucić nieco więcej światła na ten temat. http://apiblog.youtube.com/2012/03/keeping-things-fresh.html – JSuar

Powiązane problemy