使用 YouTube API 将 YouTube 播放列表中的所有视频 ID 获取到 PHP 数组中 [英] Get all the video ID's from a YouTube playlist into a PHP array using YouTube API

查看:32
本文介绍了使用 YouTube API 将 YouTube 播放列表中的所有视频 ID 获取到 PHP 数组中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

这是我用来调用玩家的代码:

<脚本>var getRandom = 函数(最小值,最大值){返回 Math.random() * (max - min) + min;};//异步加载 IFrame Player API 代码.var tag = document.createElement('script');tag.src = "https://www.youtube.com/player_api";var firstScriptTag = document.getElementsByTagName('script')[0];firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);//用 <iframe> 替换 'ytplayer' 元素和//API 代码下载后的 YouTube 播放器.var 播放器;函数 onYouTubePlayerAPIReady() {player = new YT.Player('ytplayer', {高度:'50',宽度:'400',事件:{'onReady': onPlayerReady},玩家变量:{列表:'PLH30k6CwlcgK8C-LET6_ZrAWwYGLqT8R-',索引:parseInt(0),建议质量:'小',控制:0,自动播放:1}});}函数 onPlayerReady(event) {event.target.setShuffle();event.target.setLoop();}

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

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

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

问候.

解决方案

首先要使用 iframe API因为,javascript API 已过时且已弃用

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

更换

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

函数 onYouTubePlayerAPIReady()//经过函数 onYouTubeIframeAPIReady()

0 要修复改组,请尝试在每个结束状态随机化

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

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

在随机化之前.并使用适当的方法获取它们:getPlaylist()

var 播放器;var videoList, videoCount;函数 onYouTubeIframeAPIReady(){player = new YT.Player('ytplayer',{高度:'50',宽度:'400',事件:{'onReady': onPlayerReady,'onStateChange': onPlayerStateChange},玩家变量:{控制:0,自动播放:0}});}函数 onPlayerReady(event){//提示播放列表,以获取视频的 idevent.target.cue播放列表({listType: '播放列表',列表:'PLH30k6CwlcgK8C-LET6_ZrAWwYGLqT8R-',建议质量:'小',自动播放:1,指数:0,});event.target.setLoop();}函数 onPlayerStateChange(event){if(event.data == YT.PlayerState.CUED){videoList = event.target.getPlaylist();//防止添加新视频和随机化videoCount = videoList.length;//在随机播放列表之前获取 id,发送它sendIds(videoList);//启动播放器(如自动播放)event.target.playVideo();}//在每个视频结束时随机化if(event.data == YT.PlayerState.ENDED){var num = getRandom(1,videoCount);event.target.playVideoAt(num);}}函数 sendIds(ids){控制台日志(ID);//用它们做你想做的事... ajax 调用你的 php}

I'm adding a custom player to my website and I have two issues.

  1. My playlist on YouTube has 391 songs and the API player only loads 200.
  2. I have problems shuffling the list using the API commands.

Here's the code that I'm using to call to the player:

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

I tried to workaround the shuffle thing using:

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

But it doesn't work like I want, so I want retrieve the ID's of all the videos in the playlist into an array, mix them and pass all the array to load each video. I was trying to use some examples from previous questions but those examples are not working anymore, if some of you guys has examples with the v3 of the YouTube API or actually working examples I will appreciate it.

Regards.

解决方案

First, you have to use iframe API because, javascript API is outdated and deprecated

Look for youtube API documentation (list of deprecated api's on left side menu) https://developers.google.com/youtube/iframe_api_reference?hl=fr

replacing

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

and

function onYouTubePlayerAPIReady()
// by 
function onYouTubeIframeAPIReady()

0 To fix shuffling, try to randomize at each end state

by using onPlayerStateChange event listener, and YT.PlayerState.ENDED state.

1 You need to CUE the playlist to get whole video's ids

before the randomization. and get them with proper method : 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
}

这篇关于使用 YouTube API 将 YouTube 播放列表中的所有视频 ID 获取到 PHP 数组中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆