Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Youtube API的随机播放列表修复程序_Javascript_Arrays_Youtube Api_Shuffle_Playlist - Fatal编程技术网

Javascript Youtube API的随机播放列表修复程序

Javascript Youtube API的随机播放列表修复程序,javascript,arrays,youtube-api,shuffle,playlist,Javascript,Arrays,Youtube Api,Shuffle,Playlist,因此,当我试图在我的网站上创建一个嵌入式播放列表,并将其随机播放时,我发现YouTube API中存在一个未修复的bug,不允许任何人使用随机播放功能 所以我想创造一个工作环境。 我想我可以用一个随机数代替播放列表的索引号。 这很好,让我洗牌播放列表,只要我手动输入随机数生成器的最大值和最小值。请看这里: 虽然我对此非常满意,但我更希望有一个更具动态性的代码,它只获取播放列表数组中的元素数,并将它们用作随机因子的最大值。听起来很简单? 我在这里查阅了API参考: 并找到了player.getP

因此,当我试图在我的网站上创建一个嵌入式播放列表,并将其随机播放时,我发现YouTube API中存在一个未修复的bug,不允许任何人使用随机播放功能

所以我想创造一个工作环境。 我想我可以用一个随机数代替播放列表的索引号。 这很好,让我洗牌播放列表,只要我手动输入随机数生成器的最大值和最小值。请看这里:

虽然我对此非常满意,但我更希望有一个更具动态性的代码,它只获取播放列表数组中的元素数,并将它们用作随机因子的最大值。听起来很简单? 我在这里查阅了API参考:

并找到了
player.getPlaylist()

我使用了
array.length
获取数字数组元素,并将其注入随机生成器。但它不起作用!我不知道为什么。当我试图编写数组时,它返回为未定义

你能帮忙吗


最大数
var tag=document.createElement('script');
tag.src=”https://www.youtube.com/iframe_api";
var firstScriptTag=document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
var播放器;
函数onyoutubeiframeapiredy(){
player=新的YT.player('player'{
高度:'411',
宽度:“548”,
活动:{
“onReady”:onPlayerReady,
“onStateChange”:onPlayerStateChange
}
});
}
可变增益阵列;
阵列长度;
var-maxNumber;
函数onPlayerReady(事件){
player.loadPlaylist({
'列表类型':'播放列表',
“列表”:“PLhaqVbVcY6UPkbjbeJM2CwRedCrr0rPJr”
});
playlarray=player.getPlaylist();
playlarrayLength=playlarray.length;
maxNumber=播放列表长度;
document.getElementById('output').innerHTML=playlarrayLength;
next();
}
函数next(){
player.loadPlaylist({
'列表类型':'播放列表',
“列表”:“PLhaqVbVcY6UPkbjbeJM2CwRedCrr0rPJr”,
“索引”:newRandomNumber(),
“开始秒”:“0”,
“建议质量”:“小”
});
player.setShuffle({
“shufflePlaylist”:“true”
});
}
var oldNumber=0;
var NewNumber=0;
函数newRandomNumber(){
oldNumber=NewNumber;
NewNumber=Math.floor(Math.random()*maxNumber);
if(NewNumber==oldname){
newRandomNumber();
}否则{
返回NewNumber;
}
}
函数onPlayerStateChange(事件){
如果(event.data==YT.PlayerState.end){
next();
}
}

调用
player.loadPlaylist()
和使用
player.getPlaylist()
获取播放列表之间存在延迟。通过等待提示事件提供修复,但在我的测试中,它根本没有被触发,因此我检查了播放事件是否正常工作

您的代码如下所示:

function onPlayerReady(event) {
    player.loadPlaylist({
        'listType': 'playlist',
        'list': 'PLhaqVbVcY6UPkbjbeJM2CwRedCrr0rPJr'
    });
}

var firstLoad = true;
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.ENDED) {
        next();
    } else {
        if (firstLoad && event.data == YT.PlayerState.PLAYING) {
            firstLoad = false;
            playlistArray = player.getPlaylist();
            playListArrayLength = playlistArray.length;
            maxNumber = playListArrayLength;
            document.getElementById('output').innerHTML = playListArrayLength;
            next();
        }
    }
}

我用PHP编写的解决方案有点让人不知所措,但它确实有效

function getNumberofElements() {
    $pid = $this->getPID();
    $url = "https://www.googleapis.com/youtube/v3/playlists?part=contentDetails&id=$pid&key=$yourAPIKey";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
    curl_setopt($ch, CURLOPT_POST, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, FALSE);
    curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
    curl_setopt($ch, CURLOPT_REFERER, "");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8");

    $numberOfElements = curl_exec($ch);  // $xml = simplexml_load_string($numberOfElements);

    $numberOfElements = substr(strstr($numberOfElements, 'itemCount":'), strlen('itemCount":'));
    $numberOfElements = str_replace("}", " ", $numberOfElements);
    $numberOfElements = str_replace("]", " ", $numberOfElements);

    return $numberOfElements;
}
function getNumberofElements() {
    $pid = $this->getPID();
    $url = "https://www.googleapis.com/youtube/v3/playlists?part=contentDetails&id=$pid&key=$yourAPIKey";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
    curl_setopt($ch, CURLOPT_POST, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_NOBODY, FALSE);
    curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
    curl_setopt($ch, CURLOPT_REFERER, "");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8");

    $numberOfElements = curl_exec($ch);  // $xml = simplexml_load_string($numberOfElements);

    $numberOfElements = substr(strstr($numberOfElements, 'itemCount":'), strlen('itemCount":'));
    $numberOfElements = str_replace("}", " ", $numberOfElements);
    $numberOfElements = str_replace("]", " ", $numberOfElements);

    return $numberOfElements;
}