【问题标题】:Get all the video ID's from a YouTube playlist into a PHP array using YouTube API使用 YouTube API 将 YouTube 播放列表中的所有视频 ID 获取到 PHP 数组中
【发布时间】:2016-01-06 14:33:39
【问题描述】:

我正在向我的网站添加自定义播放器,但有两个问题。

  1. 我在 YouTube 上的播放列表有 391 首歌曲,而 API 播放器只加载了 200 首。
  2. 我在使用 API 命令洗牌时遇到问题。

这是我用来调用播放器的代码:

<div class="videoplayer" id="ytplayer"></div>
<script>
    var getRandom = function(min, max) {
      return Math.random() * (max - min) + min;
    };

  // Load the IFrame Player API code asynchronously.
  var tag = document.createElement('script');
  tag.src = "https://www.youtube.com/player_api";
  var firstScriptTag = document.getElementsByTagName('script')[0];
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

  // Replace the 'ytplayer' element with an <iframe> and
  // YouTube player after the API code downloads.
  var player;
  function onYouTubePlayerAPIReady() {
    player = new YT.Player('ytplayer', {
      height: '50',
      width: '400',
      events: {
         'onReady': onPlayerReady
       },
      playerVars:{        
        list:'PLH30k6CwlcgK8C-LET6_ZrAWwYGLqT8R-',
        index:parseInt(0),
        suggestedQuality:'small',
        controls:0,
        autoplay:1
        }
    });
  }

  function onPlayerReady(event) {
     event.target.setShuffle();
     event.target.setLoop();     
   }
</script>

我尝试使用以下方法解决随机播放问题:

function onPlayerReady(event) {
         var num = parseInt(getRandom(1,391));
         event.target.playVideoAt(num);   
       }

但它不像我想要的那样工作,所以我想将播放列表中所有视频的 ID 检索到一个数组中,将它们混合并传递所有数组以加载每个视频。我试图使用之前问题中的一些示例,但这些示例不再有效,如果你们中的某些人有 YouTube API v3 的示例或实际有效的示例,我将不胜感激。

问候。

【问题讨论】:

  • 请您查看问题的标题吗?它看起来不适合这个问题?
  • 是的,它适合,因为我想通过 php 使用 YouTube API 从 youtube 播放列表中获取所有视频 ID
  • target 来自哪里?我可能直接看过去了。
  • 这个答案教我如何使用 javascript 从 YouTube 播放列表中获取所有视频 ID:stackoverflow.com/a/56723612/470749

标签: javascript youtube youtube-api


【解决方案1】:

首先,您必须使用 iframe API 因为,javascript API 已过时且不推荐使用

查找youtube API documentation(左侧菜单中已弃用的 api 列表) https://developers.google.com/youtube/iframe_api_reference?hl=fr

替换

tag.src = "https://www.youtube.com/player_api";
// by 
tag.src = "https://www.youtube.com/iframe_api";

function onYouTubePlayerAPIReady()
// by 
function onYouTubeIframeAPIReady()

0 要修复洗牌,请尝试在每个结束状态进行随机化

通过使用 onPlayerStateChange 事件监听器和 YT.PlayerState.ENDED 状态。

1 您需要 CUE 播放列表以获取整个视频的 ID

在随机化之前。 并用正确的方法得到它们:getPlaylist()

var player;
var videoList, videoCount;
function onYouTubeIframeAPIReady()
{
    player = new YT.Player('ytplayer',
    {
        height: '50',
        width: '400',
        events:
        {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        },

        playerVars:
        {
            controls:0,
            autoplay:0
        }
    });
}

function onPlayerReady(event)
{
    // cue the playlist, to get the video's ids 
    event.target.cuePlaylist
    ({
        listType: 'playlist',
        list: 'PLH30k6CwlcgK8C-LET6_ZrAWwYGLqT8R-',
        suggestedQuality:'small',
        autoplay: 1,
        index:0,
    });

    event.target.setLoop();
}

function onPlayerStateChange(event)
{
    if(event.data == YT.PlayerState.CUED)
    {
        videoList = event.target.getPlaylist();

        // to prevent adding new video and for the randomize
        videoCount = videoList.length; 

        // get the ids before randomize playlist, send it
        sendIds(videoList);

        // starting the player (like autoplay)
        event.target.playVideo();
    }

    // randomize at each video ending
    if(event.data == YT.PlayerState.ENDED)
    {
        var num = getRandom(1,videoCount);
        event.target.playVideoAt(num);
    }
}

function sendIds(ids)
{
    console.log(ids);
    // make what you want to do with them... ajax call to your php
}

【讨论】:

  • 它工作正常,但有一些问题,播放列表仍然加载 200 首歌曲,开始它显示 391 首歌曲,但后来数量变为 200 和随机索引。
  • 还有一个比我更担心的是,如果我以后添加更多视频,数量会越来越多,我不想每次都更新代码,最好总是得到更新的数量播放列表中的视频并将其传递给 getRandom 函数。
  • 尝试使用 .getPlaylist() 方法(之前似乎有提示)
  • 这个函数有什么作用?我应该在哪里使用它?
  • 你想如何使用视频ID列表?你说的是php,你能解释一下吗?
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2013-09-12
  • 2015-01-06
  • 2015-07-05
  • 2012-11-01
相关资源
最近更新 更多