从iFrame嵌入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

我正在使用YouTube iFrame API嵌入视频并创建一个简单的自定义播放器

我希望从API中获取视频标题/描述/等,而无需再次调用YouTube获取信息。我找不到任何相关信息-任何想法,还是我一直在打额外的电话获取视频信息?我想信息可能在
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);
        }
    }
};