2016-01-06 111 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

相關問題