Spotify APIにて登録ユーザーの情報を様々に取得することが可能です。
PHPにて簡単に使えるライブラリもありますので、詳しく使い方などをまとめました。
もちろんサンプルコードも用意しているので参考にしてくださいね。
Composerを利用してライブラリをインストールする
Spotify APIに接続するための便利なライブラリがすでに用意されています。
https://github.com/jwilsson/spotify-web-api-php
Githubから直接ソースコードを入手してもよいですが、Composerを使ってより簡単にインストールしてしまいましょう。
まず適当なディレクトリを用意してターミナルで移動します。
$ mkdir spotify
$ cd spotify
Composer経由でライブラリをインストールします。
$ composer require jwilsson/spotify-web-api-php
composer.json
、composer.lock
、vendor
ディレクトリが作成され、インストールは完了です。
Spotify for Developersでアプリを作成する
Spotify APIを利用するためには下記3つの情報が必要です。
- Client ID
- Secret Client ID
- リダイレクトURI
いずれもSpotify for Developersにて開発者アカウントを用意したあとアプリを作成することで、入手できるものです。
早速、ダッシュボードのログインページからアカウント作成に入ります。
ヘッダーメニュー「DASHBOARD」に移動し「Sign up for a free Spotify account here.」をクリック。
ログイン枠が表示されるので、Spotifyアカウント(いつも曲を聞くときに使っている通常アカウント)でログインしてください。
利用規約が表示されるので、チェックボックスにチェックを入れて「ACCEPT THE TERMS」で同意します。
まだ何も登録されていない状況なので、「CREATE AN APP」にて新しいアプリを登録します。
アプリの名前、アプリについての詳細を記入するように言われます。
今回は上記のように入力してみました。
入力が終わったら「CREATE」で次に進んでください。
アプリが作成され、概要ページに遷移します。
赤枠のところでClient ID、Client Secret IDが取得できますので控えておいてください。
次にリダイレクトURIを設定します。
「EDIT SETTINGS」をクリックしてください。
「Redirect URIs」欄にAPIでデータ取得などをしたあとに表示するページのURLを入力して右の「ADD」ボタンをクリック。
最後にページ最下部にある「SAVE」もクリックして保存します。
今回のサンプルプログラムではindex.php
を用意して取得・結果表示を1ファイルで完結させる予定です。
同じように設定する場合は、リダイレクトURIには先ほど用意したディレクトリまでのURL/index.php
を入力してください。
これでリダイレクトURIも取得完了です。
Spotify APIに接続する
index.php
を作成します。
$ touch index.php
index.php
ファイル内にプログラムを記述していきましょう。
<?php
require 'vendor/autoload.php';
$session = new SpotifyWebAPI\Session(
'CLIENT_ID',
'SECRET_CLIENT_ID',
'REDIRECT_URI'
);
$api = new SpotifyWebAPI\SpotifyWebAPI();
if (isset($_GET['code'])) {
$session->requestAccessToken($_GET['code']);
$api->setAccessToken($session->getAccessToken());
echo '<pre>';
print_r($api->me());
echo '</pre>';
} else {
$scope = [
'scope' => [
'user-read-email'
]
];
header('Location: ' . $session->getAuthorizeUrl($scope));
die();
}
6-8行目のCLIENT_ID
、CLIENT_SECRET_ID
、REDIRECT_URI
は前のステップで入手した情報に置き換えてください。
上記コードの詳細については後述しますが、index.php
を実行すると下記のように同意確認画面が表示されるはずです。
「同意する」をクリックして進んでください。
するとAPIが実行されて、画面には以下のようにユーザーのデータが表示されます。
stdClass Object
(
[display_name] => ミヤチ
[email] => xxxxxx@gmail.com
[external_urls] => stdClass Object
(
[spotify] => https://open.spotify.com/user/xxxxxxxxxxxxx
)
[followers] => stdClass Object
(
[href] =>
[total] => 0
)
[href] => https://api.spotify.com/v1/users/xxxxxxxxxxxxx
[id] => xxxxxxxxxxxxx
[images] => Array
(
)
[type] => user
[uri] => spotify:user:xxxxxxxxxxxxx
)
これで正常にAPIに接続され、データが取得できたのがわかると思います。
Spotifyユーザーのデータを取得する
改めて、PHPのコードと取得データの詳細についてまとめていきます。
ユーザーデータを取得するPHPコード
基本的にSpotify APIでは以下のような流れで動きます。
- 情報を取得するためのURLを生成する
- 生成したURLにリダイレクトするとパラメータ
code
を付与されたリダイレクトURLに自動で遷移する - パラメータ
code
を元に目的の情報を取得する
これを踏まえてAPIでデータを取得するためにindex.php
に以下のように記述しました。
<?php
require 'vendor/autoload.php';
$session = new SpotifyWebAPI\Session(
'CLIENT_ID',
'SECRET_CLIENT_ID',
'REDIRECT_URI'
);
$api = new SpotifyWebAPI\SpotifyWebAPI();
if (isset($_GET['code'])) {
$session->requestAccessToken($_GET['code']);
$api->setAccessToken($session->getAccessToken());
echo '<pre>';
print_r($api->me());
echo '</pre>';
} else {
$scope = [
'scope' => [
'user-read-email'
]
];
header('Location: ' . $session->getAuthorizeUrl($scope));
die();
}
詳しく解説していきます。
autoloadの読み込み
require 'vendor/autoload.php';
プログラム実行上で必要になるクラスを自動で読み込んでもらえるようにautoload.php
ファイルを読み込んでおきます。
API接続のためのデータをまとめて用意する
$session = new SpotifyWebAPI\Session(
'CLIENT_ID',
'CLIENT_SECRET_ID',
'REDIRECT_URI'
);
API接続のために必要なCLIENT ID
、CLIENT SECRET ID
、REDIRECT URI
を設定し、$session
に代入しました。
API接続のためのクラスを用意
$api = new SpotifyWebAPI\SpotifyWebAPI();
SpotifyWebAPI
という必要なクラスのインスタンスを作成します。
パラメータcodeがあるかどうかで処理を分岐
if (isset($_GET['code'])) {
//省略;プロセス③の処理
} else {
//省略:プロセス②の処理
}
リダイレクトURIでindex.php
を指定しているため、下記プロセス②のリダイレクト先もindex.php
になります。
- 情報を取得するためのURLを生成する
- 生成したURLにリダイレクトするとパラメータ
code
を付与されたリダイレクトURLに自動で遷移する - パラメータ
code
を元に目的の情報を取得する
そのため、パラメータcode
があるかどうかでプロセス②とプロセス③のどちらを行うか分岐するようにしています。
プロセス②の処理
$scope = [
'scope' => [
'user-read-email'
]
];
header('Location: ' . $session->getAuthorizeUrl($scope));
die();
どういった種類のデータを扱うかを決めるscope
の指定を配列で用意して$scope
に代入。
今回はユーザーデータを取得するためuser-read-email
を設定しました。
その上で$session
のgetAuthorizeUrl
を利用してURLを生成後、リダイレクトしています。
プロセス③の処理
$session->requestAccessToken($_GET['code']);
$api->setAccessToken($session->getAccessToken());
echo '<pre>';
print_r($api->me());
echo '</pre>';
パラメータcode
ありのURLになっているはずなので、$_GET['code']
で取得して処理を行っています。
まずrequestAccesToken
で必要なトークンを生成し、情報を取得。
すると$api->me()
の中に情報が詰められるはずなので、print_r
で画面出力しました。
その他のユーザー情報を取得する方法
Spotify APIにてどんなデータを取得するかは、先ほどさらっと触れたようにscope
にて指定しています。
下記の部分です。
$scope = [
'scope' => [
'user-read-email'
]
];
scope
を変えることで扱うデータを増やしたり変えることが可能です。
配列データなので、もちろん複数設定することも可能。
使えるscopeの一覧は以下の通りです。
user-read-playback-state | ユーザーが再生中の楽曲やデバイス情報 |
user-read-private | ユーザーがサブスク登録しているもののデータ |
user-follow-read | ユーザーがフォローしているアーティスト |
user-library-read | ユーザーのライブラリ |
user-read-playback-position | ユーザーのコンテンツ再生開始位置 |
user-read-email | ユーザーの登録メール情報 |
playlist-read-private | ユーザーの個人的なプレイリストのデータ |
user-top-read | ユーザーがトップ再生しているアーティストや楽曲 |
user-read-currently-playing | ユーザーが現在再生しているコンテンツ |
user-read-recently-played | ユーザーが最近再生したコンテンツ |
まとめ
Spotify APIを利用するためのPHPライブラリがあるので、API初心者でも簡単にデータが取得できます。
ぜひいろいろと試してみてください。
コメント