2011-07-03 30 views
11

Đây là một phần của dự án youtube của tôi. Tôi cố gắng để trích xuất thông tin video từ định dạng JSON nhưng tôi có vấn đề trong dòng này:Cách tải danh sách phát trên youtube bằng API javascript và json

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

Khi tôi làm điều này trong dòng duy nhất không evrithing cikle là ok nhưng trong cikle cho hay trong khi tôi có lỗi.

//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

Tôi thực sự không biết bạn đang nói gì. Bạn nên thử và dọn dẹp bài viết của mình. – james

+0

Thật vậy, vui lòng định dạng lại mã của bạn và kiểm tra kỹ xem mã nào nên được định dạng là mã/nơi ngắt dòng. – kwah

+0

'Dữ liệu' là gì? –

Trả lời

38

IMHO, bạn mã có thể được rút ngắn hơn nhiều nếu bạn sử dụng $.getJSON, $.each
Hãy thử điều này.

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: Hãy ghi nhớ rằng hình thu nhỏ cho một video youtube có thể được tìm thấy tại

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

(More Info here)

+0

Tnx :) Tôi cố gắng 1 weeek để sửa chữa dòng này :) bạn giúp tôi rất nhiều :) – plamen

+0

tnx ... lần đầu tiên tôi viết ở đây và tôi không biết :) tnx rất nhiều :) – plamen

+0

không có probs.tôi cũng đã có một lần đầu tiên ở đây :) – naveen

0

tôi thấy rằng những dòng này:

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

đang mong đợi item.link [1] .href phải ở định dạng này:

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

Tuy nhiên, nó không nhất thiết phải làm việc như đôi khi item.link [1] đưa ra một URL như

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

Các đoạn [fragments.length - 2] sẽ kết thúc bằng "www.youtube.com" thay vì ID video.

Tôi đã sửa đổi nó để truy lục liên kết từ item.content.src luôn có định dạng cố định trong URL, ví dụ:

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

Vì vậy, các đoạn mã cuối cùng là một cái gì đó như:

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

mà cho đến nay đã không thất bại cho tôi được nêu ra.

Hy vọng điều này sẽ giúp những người bị kẹt hoặc gặp sự cố khi truy xuất ID video.

Trân
CK

0

Giản giải pháp và đã thoát khỏi những thứ chuỗi thao tác.

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

Xin chào! Tôi đang cố gắng lấy ví dụ này để làm việc với mã của bạn. Tôi nên đặt nó ở đâu? Tôi có các ứng dụng, bộ điều khiển và dịch vụ js-files. Cảm ơn –

Các vấn đề liên quan