Jak uzyskać playlistę youtube za pomocą javascript API i json
To część mojego projektu na youtube. Staram się wyodrębnić informacje wideo z formatu JSON, ale mam problem w tej linii:
var videoId = data.feed.entry[i].link[1].href;
Kiedy robię to w jednej linii nie w cikle evrithing jest ok, ale w cikle Dla lub podczas 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');
}
}
3 answers
IMHO, kod można znacznie skrócić, 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 dla listy odtwarzania, którą podałeś
P. S: pamiętaj, że miniaturkę filmu na youtube można znaleźć na
http://img.youtube.com/vi/{video-id}/default.jpg
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:52:23
Znalazłem, że te linie:
var feedURL = item.link[1].href;
var fragments = feedURL.split("/");
var videoID = fragments[fragments.length - 2];
Oczekują pozycji.link[1].href być w tym formacie:
http://gdata.youtube.com/feeds/api/videos/NAs5it-xjnQ/responses?v=2
Jednak nie zawsze działa jako element.link[1] podaje adres URL podobny do
http://www.youtube.com/watch?v=Vcp7xz6dfWE&feature=youtube_gdata
Fragmenty [fragmenty.długość-2] skończy się "www.youtube.com" zamiast video ID.
Zmodyfikowałem go, aby odzyskać link z pozycji.treść.src, który zawsze ma stały format w adresie URL np.
http://www.youtube.com/v/NAs5it-xjnQ?version=3&f=playlists&app=youtube_gdata
Więc końcowy fragment kodu jest czymś like:
var tmp = item.content.src.split("/").reverse()[0];
var videoID = tmp.substring(0, tmp.indexOf("?"));
Która do tej pory mnie jeszcze nie zawiodła.
Mam nadzieję, że pomoże to tym, którzy utknęli lub mają problemy z odzyskaniem identyfikatora wideo.
Pozdrawiam
CK
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-27 05:39:25
Uprościłem rozwiązanie i pozbyłem się manipulacji strunami.
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 );
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 19:47:24