2016-01-06 77 views
3

我正在向我的网站添加一个自定义播放器,我有两个问题。使用YouTube API将所有视频ID从YouTube播放列表中转换为PHP阵列

  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例子或实际工作的例子,我会很感激。

问候。

+0

可以请您检查问题的标题?它看起来不适合这个问题? – ghybs

+0

是的,它适合,因为我想通过使用YouTube API从YouTube的YouTube播放列表中获取所有的视频ID通过php – Manu

+0

'target'从哪里来?我可能直视它。 –

回答

0

首先,你必须使用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"; 

and

function onYouTubePlayerAPIReady() 
// by 
function onYouTubeIframeAPIReady() 

0要修复改组,尝试通过使用onPlayerStateChange事件侦听器在每一端状态

随机化,并YT.PlayerState.ENDED 状态。

1你需要CUE播放列表来获得整个视频的IDS

随机化之前。 并采用适当的方法让他们: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 
} 
+0

它的工作,但有一些问题,播放列表仍然加载200首歌曲,在开始时它显示391歌曲,但数额改变为200和随机索引了。 – Manu

+0

另一个令人关注的问题是,如果我将来添加更多视频,金额将会增长,并且我不希望每次都更新代码,最好总是获取播放列表中更新的视频数量,并通过它到了getRandom函数。 – Manu

+0

尝试使用.getPlaylist()方法(似乎要被提示) – MTroy

相关问题