我实际上正在使用PHP Spotify API。我正在创建一个播放列表,我根据每周更改的专辑列表添加/删除曲目(这是本周的最佳专辑)。
当我想重新排序曲目时问题出现了。事实上,我想在播放列表中保留本周最佳专辑中的曲目,以便稍后我知道哪些曲目是最老的曲目。
但是,使用实际的API重新排序播放列表非常奇怪。当我不得不重新排序一首曲目或两首曲目时,它的工作原理非常好。但是如果有更多的曲目需要重新排序,那就不行了。
我在技术上做的是我有两个阵列,一个代表本周的最高专辑,另一个代表播放列表。以同样的方式构建。键表示曲目和艺术家的名称,值表示Spotify URI。 我只是在循环中比较两个数组,并且我发送一个cURL来重新排序播放列表,具体取决于两个数组的相等性。 但这不起作用,这可能对于少数第一条曲目起作用,但随后一切都变得疯狂。
您是否知道如何使用API对播放列表中的多个曲目重新排序? 你会怎么做? 在循环中进行循环并不是我最好的想法,但这是唯一的
我遇到的代码部分:
while($newTracks !== $oldTracks){
$oldPosition = array_search($newTracks[$i], $actualTracks);
$chPut = curl_init();
$put = array(
'range_start' => $oldPosition,
'range_length' => 1,
'insert_before' => $newTracks[$i++] + 1
);
$put = json_encode($put);
curl_setopt($chPut, CURLOPT_URL, "https://api.spotify.com/v1/users/" . $idUser . "/playlists/" . $idPlaylist . "/tracks");
curl_setopt($chPut, CURLOPT_HTTPHEADER, $headers);
curl_setopt($chPut, CURLOPT_RETURNTRANSFER, true);
curl_setopt($chPut, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($chPut, CURLOPT_POSTFIELDS, $put);
$modif = curl_exec($chPut);
d($modif);
curl_close($chPut);
$chGetFinal = curl_init();
curl_setopt($chGetFinal, CURLOPT_URL, "https://api.spotify.com/v1/users/" . $idUser . "/playlists/" . $idPlaylist . "/tracks");
curl_setopt($chGetFinal, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($chGetFinal, CURLOPT_HTTPHEADER, $headers);
$outputFinal = curl_exec($chGetFinal);
curl_close($chGetFinal);
$getActualTracks = json_decode($outputFinal);
$j = 0;
$oldTracks = array();
foreach($getActualTracks->items as $track){
$oldTracks[$j++] = 'spotify:track:' . $track->track->id;
}
if ($i > count($newTracks)){
$i = 0;
}
}
两个数组(oldTracks和newTracks)就像
[0] => spotify:track:4w2iAP3X4FkpPb5kjRdIDx
(密钥对应于Spotify URI Track的位置和值)
OldTracks与Spotify播放列表中的实际内容相关联,newTracks与Spotify播放列表中的内容相关联
在第一个cURL(我对轨道重新排序)之后,数组'oldTracks'发生了变化,所以我正在做另一个cURL以获得Spotify播放列表的新版本。
我不知道我是否清楚,但我知道在一个永远不会结束的while循环中的两个cURL并不是一个好主意!
我正在处理的播放列表:https://open.spotify.com/user/118698176/playlist/6StRb5g20JPhlsBodz0ahH