从iFrame嵌入API获取YouTube视频信息
我正在使用YouTube iFrame API嵌入视频并创建一个简单的自定义播放器 我希望从API中获取视频标题/描述/等,而无需再次调用YouTube获取信息。我找不到任何相关信息-任何想法,还是我一直在打额外的电话获取视频信息?我想信息可能在从iFrame嵌入API获取YouTube视频信息,iframe,youtube,youtube-api,Iframe,Youtube,Youtube Api,我正在使用YouTube iFrame API嵌入视频并创建一个简单的自定义播放器 我希望从API中获取视频标题/描述/等,而无需再次调用YouTube获取信息。我找不到任何相关信息-任何想法,还是我一直在打额外的电话获取视频信息?我想信息可能在YT.player()返回的player对象中可用 谢谢 在这里,我已经完成了。。如果正确,则标记为正确:) var playlayurl='1〕http://gdata.youtube.com/feeds/users/AbrahamLingo/upl
YT.player()
返回的player
对象中可用
谢谢 在这里,我已经完成了。。如果正确,则标记为正确:)
var playlayurl='1〕http://gdata.youtube.com/feeds/users/AbrahamLingo/uploads?alt=json&callback=?';
var videoURL=http://www.youtube.com/watch?v=';
$.getJSON(播放列表URL、函数(数据){
var列表_数据=”;
$。每个(data.feed.entry,函数(i,项){
var feedTitle=项目名称$t;
var feedURL=item.link[1].href;
var fragments=feedURL.split(“/”);
var videoID=fragments[fragments.length-2];
var url=videoURL+videoID;
变量thumb=”http://img.youtube.com/vi/“+videoID+”/hqdefault.jpg”;
警报(feedTitle);
});
});
演示链接:-这似乎是不可能的。我花了很长时间手动查看播放器对象,但找不到任何与标题或描述有远程关联的内容 目前,假设您的播放器对象已准备就绪,视频数据可通过
player.getVideoData()
从YT.player返回视频数据对象:
var videoData = player.getVideoData();
var title = videoData['title'];
var video_id = videoData['video_id'];
var author = videoData['author'];
注意,视频数据对象中的标题只是一个简短的标题,我可以看到48个字符。长标题和任何描述目前都不可用。是的,雅各布·芬内尔的回答是正确的,是从玩家对象获取数据的最佳方式。请确保在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();
}
据我所知,iframeapi的
getVideoData()
总是调用https://www.youtube.com/get_video_info
妮特:我建议不要在onPlayer*
函数之外调用getVideoData()
,方法是将其从事件
对象而不是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);
}
}
};
我会给你一个+1,因为这是正确的解决方法,如果有人稍后来看,但这并没有回答最初的问题,即从YT.Player()返回的对象获取信息,而不是对Youtube进行ajax调用。现在可以了。雅各布上面的代码对我很有用。@Oskarrow现在可以得到部分标题,但不能得到描述。雅各布·芬内尔的更新值得称赞,但它并没有完全回答最初的问题。他们一定已经删除了这些值。我唯一看到的是视频。
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);
}
}
};