Spotify Web APIを利用して「ポップ」や「ロック」など特定のカテゴリーのプレイリストを取得することができる。
指定できるカテゴリーについては、これもSpotify Web APIを利用して一覧を取得することができる。まず、このカテゴリー一覧を取得するコードの例が下記となる。
class SpotifyApiClient
{
private $rootEndpoint = 'https://api.spotify.com/v1/';
private $accessToken;
public function __construct($ACCESS_TOKEN)
{
$this->accessToken = $ACCESS_TOKEN;
}
public function get($path, array $queryParams)
{
$url = $this->rootEndpoint . $path;
if (!empty($queryParams))
$url .= '?' . http_build_query($queryParams);
$response = $this->execCurlGET($url);
sleep(1);
return json_decode($response, true);
}
private function execCurlGET($url)
{
$cmd = 'curl --silent' .
" -H 'Authorization: Bearer {$this->accessToken}'" .
" '$url'";
echo "# $cmd\n";
return shell_exec($cmd);
}
}
$tokenFile = 'token_new.json';
$token = json_decode(file_get_contents($tokenFile), true);
$client = new SpotifyApiClient($token['access_token']);
$params = [
'country' => 'JP',
'locale' => 'ja_JP',
'limit' => 50,
];
$response = $client->get("browse/categories", $params);
foreach ($response['categories']['items'] as $i => $item)
{
echo "{$item['id']}, {$item['name']}\n";
}
Spotifyのカテゴリー一覧を取得するには、下記URL
https://api.spotify.com/v1/browse/categories
に対してGETリクエストを行えば良い。
オプションのクエリパラメータとして、country
パラメータに2文字の国名コードを指定すると、その国向けのカテゴリーを取得することができる。
また、locale
パラメータを指定すると、指定した言語でカテゴリー名を得ることができる(カテゴリーによっては指定した言語で取得できないものもある)。ja_JP
のように2文字の言語コードと国名コードをアンダースコアで繋げた文字列を指定する。
limit
パラメータは、APIレスポンスに含める最大の結果件数を指定するもので、今回のAPIリクエストでは、APIレスポンスに含める最大カテゴリー数に該当する。上記のコードの例では、50
を指定し最大50件のカテゴリーを取得するようにしている。
下記はコードの出力結果。APIレスポンスとして返ってくるデータの categories
キー下にある items
キーにカテゴリー情報が配列データとして含まれている。この配列データの各要素には id
キーと name
キーがあり、上記のコードの例では、この値を参照し出力している。id
キーと name
キーはそれぞれ、カテゴリーID(例:toplists)とカテゴリー名(例:トップリスト)に対応する。
toplists, トップリスト
radar, Early Noise
j_tracks, J-トラック
pop, ポップ
mood, Mood
...省略...
family, キッズ&ファミリー
次に、取得したカテゴリーIDを使って、特定のカテゴリーのプレイリストをリクエストするコードの例が下記。
class SpotifyApiClient
{
private $rootEndpoint = 'https://api.spotify.com/v1/';
private $accessToken;
public function __construct($ACCESS_TOKEN)
{
$this->accessToken = $ACCESS_TOKEN;
}
public function get($path, array $queryParams)
{
$url = $this->rootEndpoint . $path;
if (!empty($queryParams))
$url .= '?' . http_build_query($queryParams);
$response = $this->execCurlGET($url);
sleep(1);
return json_decode($response, true);
}
private function execCurlGET($url)
{
$cmd = 'curl --silent' .
" -H 'Authorization: Bearer {$this->accessToken}'" .
" '$url'";
echo "# $cmd\n";
return shell_exec($cmd);
}
}
$tokenFile = 'token_new.json';
$token = json_decode(file_get_contents($tokenFile), true);
$client = new SpotifyApiClient($token['access_token']);
$categoryId = 'pop';
$params = [
'country' => 'JP',
];
$response = $client->get("browse/categories/{$categoryId}/playlists", $params);
foreach ($response['playlists']['items'] as $i => $item)
{
echo "#$i\n";
echo "name: {$item['name']}\n";
echo "description: {$item['description']}\n";
echo "uri: {$item['uri']}\n";
}
特定のカテゴリーのプレイリストを取得するには、下記URL
https://api.spotify.com/v1/browse/categories/{category_id}/playlists
に対してGETリクエストを送信すれば良い。パスのパラメータ category_id
にはカテゴリーIDを指定する。
オプションのクエリパラメータとして、country
パラメータに2文字の国名コードを指定すると、指定した国向けのプレイリストが得られる。
なお、特定の国向けに特別に存在するカテゴリーIDに対して country
パラメータにそれとは違う国名コードを指定するとステータスコードコード 404
が返ってくる。例えば、日本向けに特別に存在するカテゴリーID j_tracks
に対して country
パラメータに US
を指定すると、APIレスポンスのステータスコードとして 404
が返ってきてしまい、結果を得ることができない。無用なエラー処理を省くためには、カテゴリー一覧を取得したときの country
パラメータの値とカテゴリーのプレイリストを取得するときの country
パラメータの値は同一の国名コードに合わせたほうが無難といえる。
APIレスポンスとして返ってくるデータの playlists
キー下にある items
キーに指定したカテゴリーのプレイリスト情報が配列データとして入っている。上記のコードの例では、この配列データの各要素にある name
キー、description
キー、uri
キーを参照し、プレイリスト名、プレイリストの説明文、プレイリストのURIを出力している。下記がその出力結果。
#0
name: Top Hits Japan
description: 世界中のトレンドと日本の最新ヒット曲をまとめてお届け。cover: あいみょん
uri: spotify:playlist:37i9dQZF1DXayDMsJG9ZBv
#1
name: Next Up
description: 前週のNew Releaseで大きく注目を浴びた楽曲。 cover: James Blake
uri: spotify:playlist:37i9dQZF1DWZvuOKNcLsjv
#2
name: Spotify Japan 急上昇チャート
description: Spotify Japanのデイリー急上昇チャート。9月17日付。
uri: spotify:playlist:37i9dQZF1DX9vYRBO9gjDe
...