【发布时间】:2013-03-03 05:46:33
【问题描述】:
我正在使用 YouTube iFrame API 嵌入视频并创建一个简单的自定义播放器。
我正在寻找视频标题/描述/等。无需再次调用 YouTube 即可从 API 获取信息。我找不到任何相关信息 - 有什么想法,还是我一直在打额外的电话以获取视频信息?我想也许信息在YT.Player()返回的player对象中可用。
谢谢!
【问题讨论】:
标签: iframe youtube youtube-api
我正在使用 YouTube iFrame API 嵌入视频并创建一个简单的自定义播放器。
我正在寻找视频标题/描述/等。无需再次调用 YouTube 即可从 API 获取信息。我找不到任何相关信息 - 有什么想法,还是我一直在打额外的电话以获取视频信息?我想也许信息在YT.Player()返回的player对象中可用。
谢谢!
【问题讨论】:
标签: iframe youtube youtube-api
据我所知,Iframe API 的getVideoData() 总是调用https://www.youtube.com/get_video_info。
Nit:我建议不要在 onPlayer* 函数之外调用 getVideoData(),方法是将其从 event 对象而不是 player 对象中取出。
在任何一种情况下,函数都会像这样返回和对象:
Object { video_id: "XXX", author: "AUTHOR", title: "TITLE" }
下面是一个使用视频 ID 设置 Google Analytics 事件的示例:
var onPlayerStateChange = function(event) {
// get video Id from event, not player.
videoId = typeof event.target.getVideoData().video_id !== 'undefined' ? event.target.getVideoData().video_id : 'unknown';
// track when user clicks Play
if (event.data == YT.PlayerState.PLAYING) {
if (window.ga && ga.loaded) {
ga('send', 'event', 'Video', 'play', videoId);
}
}
// track when user clicks Pause
if (event.data == YT.PlayerState.PAUSED) {
if (window.ga && ga.loaded) {
ga('send', 'event', 'Video', 'pause', videoId);
}
}
// track when video ends
if (event.data == YT.PlayerState.ENDED) {
if (window.ga && ga.loaded) {
ga('send', 'event', 'Video', 'ended', videoId);
}
}
};
【讨论】:
是的,JacobFennell 的回答是正确的,是从玩家对象获取数据的最佳方式。请确保您在 onPlayerReady 事件中处理此问题,否则您将获得一个未定义的对象:
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'M7lc1UVf-VE',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
console.log(player);
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
player.getVideoData(); //here you go
event.target.playVideo();
}
【讨论】:
就目前而言,假设您的播放器对象已准备就绪,视频数据可通过player.getVideoData() 获得,该player.getVideoData() 从 YT.Player 返回视频数据对象:
var videoData = player.getVideoData();
var title = videoData['title'];
var video_id = videoData['video_id'];
var author = videoData['author'];
注意,视频数据对象中的标题只是一个简短的标题,据我所知是 48 个字符。目前没有长标题和任何描述。
【讨论】:
这似乎是不可能的。我花了很多时间手动查看播放器对象,但找不到与标题或描述相关的任何内容。
【讨论】:
这里我已经完成了..如果它是正确的,那么标记为正确:)
<script type="text/javascript">
var playListURL = 'http://gdata.youtube.com/feeds/users/AbrahamLingo/uploads?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 +"/hqdefault.jpg";
alert(feedTitle);
});
});
</script>
演示链接:- http://jsfiddle.net/7gq6Y/
【讨论】: