2011-07-03 8 views
11

Jest to część mojego projektu youtube. Staram się wydobyć informacje wideo z formatu JSON, ale mam problem w tym wierszu:Jak uzyskać listę odtwarzania youtube za pomocą javascript API i json

var videoId = data.feed.entry[i].link[1].href; 

nie Kiedy to zrobić w jednej linii w cikle evrithing jest ok, ale w cikle za lub gdy mam błąd.

//get youtube ID 

function extract(url){ 
    pos1=url.indexOf("videos/"); 
    pos2=url.substr(42,11); 
    return pos2; 
} 

//My playlist LINK 
var url2="http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json"; 
function playlistinfo(url1) { 
    $.ajax({ 
     url: url1, 
     dataType: "jsonp", 
     success: function (data) { parseresults(data); } 
    }); 
} 

//whit this get playlist data 
function parseresults(data) { 

    //return playlist clip number 
    var klipove= data.feed.openSearch$totalResults.$t; 
    //put clips in <li> 

    for(i=0;i<=klipove-1;i++) { 
     var videoId = data.feed.entry[i].link[1].href; 
     //get video id ID 
     var id= extract(videoId); 
     thumb = data.feed.entry[i].media$group.media$thumbnail[0].url; 
     $('<li><img src="'+thumb+'" alt="'+id+'" class="thumb"/></li>').appendTo('.cont'); 
    } 
} 
+4

Naprawdę nie mam pojęcia, co mówisz. Powinieneś spróbować oczyścić swój post. – james

+0

Rzeczywiście, proszę ponownie sformatować swój kod i dokładnie sprawdzić, co powinno być sformatowane jako kod/gdzie powinny znajdować się podziały linii. – kwah

+0

Co to jest "data"? –

Odpowiedz

38

IMHO, ty kod może być znacznie skrócony, jeśli używasz $.getJSON, $.each
Spróbuj tego.

var playListURL = 'http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json&callback=?'; 
var videoURL= 'http://www.youtube.com/watch?v='; 
$.getJSON(playListURL, function(data) { 
    var list_data=""; 
    $.each(data.feed.entry, function(i, item) { 
     var feedTitle = item.title.$t; 
     var feedURL = item.link[1].href; 
     var fragments = feedURL.split("/"); 
     var videoID = fragments[fragments.length - 2]; 
     var url = videoURL + videoID; 
     var thumb = "http://img.youtube.com/vi/"+ videoID +"/default.jpg"; 
     if (videoID !='videos') { 
list_data += '<li><a href="'+ url +'" title="'+ feedTitle +'"><img alt="'+ feedTitle+'" src="'+ thumb +'"</a></li>'; 
} 
    }); 
    $(list_data).appendTo(".cont"); 
}); 

Demo: Fiddle for the playlist you have provided

PS: Należy pamiętać, że Miniatura wideo YouTube można znaleźć w

http://img.youtube.com/vi/{video-id}/default.jpg 

(More Info here)

+0

Tnx :) Próbuję 1 weeek naprawić ten wiersz :) bardzo mi pomagasz :) – plamen

+0

tnx ... po raz pierwszy piszę tutaj i nie wiedziałem :) tnx dużo :) – plamen

+0

żadnych problemów.Miałem też pierwszy raz tutaj :) – naveen

0

Okazało się, że te linie:

var feedURL = item.link[1].href; 
var fragments = feedURL.split("/"); 
var videoID = fragments[fragments.length - 2]; 

oczekują item.link [1] .href być w tym formacie:

http://gdata.youtube.com/feeds/api/videos/NAs5it-xjnQ/responses?v=2 

jednak niekoniecznie działają jak czasami item.link [1] daje URL podobnego

http://www.youtube.com/watch?v=Vcp7xz6dfWE&feature=youtube_gdata 

Fragmenty [fragments.length - 2] będą oznaczać "www.youtube.com" zamiast identyfikatora wideo.

Zmodyfikowałem, aby pobrać link z pliku item.content.src, który zawsze ma ustalony format w adresie URL, np.

http://www.youtube.com/v/NAs5it-xjnQ?version=3&f=playlists&app=youtube_gdata 

Więc kod końcowy fragment jest coś takiego:

var tmp = item.content.src.split("/").reverse()[0]; 
var videoID = tmp.substring(0, tmp.indexOf("?")); 

który dotychczas nie został jeszcze mnie nie powiodło.

Mam nadzieję, że pomoże to osobom, które utknęły lub mają problem z odtworzeniem identyfikatora wideo.

Pozdrowienia
CK

0

Uproszczone rozwiązanie i pozbył się rzeczy łańcuchach.

var playListURL = 'http://gdata.youtube.com/feeds/api/playlists/B2A4E1367126848D?v=2&alt=json&callback=?'; 
var videoURL= 'http://www.youtube.com/watch?v='; 

var vids = new Array(); 

$.getJSON(playListURL, function(data) { 
    $.each(data.feed.entry, function(i, item) { 
     vids.push(item["media$group"]["yt$videoid"]["$t"]); 
    }); 

    console.log(vids); 
}); 
+0

Cześć! Próbuję uzyskać ten przykład do pracy z kodem. Gdzie powinienem to umieścić? Mam aplikacje, kontrolery i usługi js-files. Dzięki –