【问题标题】:Get YouTube video info from iFrame embed API从 iFrame embed API 获取 YouTube 视频信息
【发布时间】:2013-03-03 05:46:33
【问题描述】:

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

我正在寻找视频标题/描述/等。无需再次调用 YouTube 即可从 API 获取信息。我找不到任何相关信息 - 有什么想法,还是我一直在打额外的电话以获取视频信息?我想也许信息在YT.Player()返回的player对象中可用。

谢谢!

【问题讨论】:

    标签: iframe youtube youtube-api


    【解决方案1】:

    据我所知,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);
            }
        }
    };
    

    【讨论】:

      【解决方案2】:

      是的,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();
        }
      

      【讨论】:

        【解决方案3】:

        就目前而言,假设您的播放器对象已准备就绪,视频数据可通过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 个字符。目前没有长标题和任何描述。

        【讨论】:

        • 他们一定已经删除了这些值。我看到的唯一内容是 video_id。
        【解决方案4】:

        这似乎是不可能的。我花了很多时间手动查看播放器对象,但找不到与标题或描述相关的任何内容。

        【讨论】:

        • 现在可以了。 Jacob 上面的代码对我有用。
        • @OskarRough 现在可以获得部分标题,但不能获得描述。感谢 JacobFennell 的更新,但它并没有完全回答最初的问题。
        【解决方案5】:

        这里我已经完成了..如果它是正确的,那么标记为正确:)

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

        【讨论】:

        • 我会给你一个 +1,因为这是正确的解决方法,如果有人稍后再看,但这并不能回答原始问题,即从 YT 返回的对象中获取信息。 Player() 并没有对 Youtube 进行 ajax 调用。
        猜你喜欢
        • 2015-04-14
        • 2012-12-14
        • 2013-04-07
        • 2015-10-23
        • 1970-01-01
        • 2013-07-10
        • 2015-08-10
        • 2016-09-28
        • 2018-04-26
        相关资源
        最近更新 更多