【PHP】Spotify APIを使ってユーザーのデータを取得する(サンプルコードあり)

APIでユーザーデータを取得する方法(PHP)

Spotify APIにて登録ユーザーの情報を様々に取得することが可能です。

PHPにて簡単に使えるライブラリもありますので、詳しく使い方などをまとめました。

もちろんサンプルコードも用意しているので参考にしてくださいね。

目次

Composerを利用してライブラリをインストールする

Spotify APIに接続するための便利なライブラリがすでに用意されています。

https://github.com/jwilsson/spotify-web-api-php

Githubから直接ソースコードを入手してもよいですが、Composerを使ってより簡単にインストールしてしまいましょう。

Composerとは、PHPで使えるパッケージ管理ツールです

まず適当なディレクトリを用意してターミナルで移動します。

$ mkdir spotify
$ cd spotify

Composer経由でライブラリをインストールします。

$ composer require jwilsson/spotify-web-api-php

composer.jsoncomposer.lockvendorディレクトリが作成され、インストールは完了です。

Spotify for Developersでアプリを作成する

Spotify for Developers

Spotify APIを利用するためには下記3つの情報が必要です。

  1. Client ID
  2. Secret Client ID
  3. リダイレクトURI

いずれもSpotify for Developersにて開発者アカウントを用意したあとアプリを作成することで、入手できるものです。

早速、ダッシュボードのログインページからアカウント作成に入ります。

Spotify Dashboard

ヘッダーメニュー「DASHBOARD」に移動し「Sign up for a free Spotify account here.」をクリック。

sing up

ログイン枠が表示されるので、Spotifyアカウント(いつも曲を聞くときに使っている通常アカウント)でログインしてください。

terms of service

利用規約が表示されるので、チェックボックスにチェックを入れて「ACCEPT THE TERMS」で同意します。

dashboard

まだ何も登録されていない状況なので、「CREATE AN APP」にて新しいアプリを登録します。

create an app

アプリの名前、アプリについての詳細を記入するように言われます。
今回は上記のように入力してみました。

入力が終わったら「CREATE」で次に進んでください。

api test

アプリが作成され、概要ページに遷移します。

赤枠のところでClient IDClient Secret IDが取得できますので控えておいてください。

次にリダイレクトURIを設定します。

api test

「EDIT SETTINGS」をクリックしてください。

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_IDCLIENT_SECRET_IDREDIRECT_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では以下のような流れで動きます。

  1. 情報を取得するためのURLを生成する
  2. 生成したURLにリダイレクトするとパラメータcodeを付与されたリダイレクトURLに自動で遷移する
  3. パラメータ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 IDCLIENT SECRET IDREDIRECT URIを設定し、$sessionに代入しました。

API接続のためのクラスを用意

$api = new SpotifyWebAPI\SpotifyWebAPI();

SpotifyWebAPIという必要なクラスのインスタンスを作成します。

パラメータcodeがあるかどうかで処理を分岐

if (isset($_GET['code'])) {
 //省略;プロセス③の処理
} else {
 //省略:プロセス②の処理
}

リダイレクトURIでindex.phpを指定しているため、下記プロセス②のリダイレクト先もindex.phpになります。

  1. 情報を取得するためのURLを生成する
  2. 生成したURLにリダイレクトするとパラメータcodeを付与されたリダイレクトURLに自動で遷移する
  3. パラメータcodeを元に目的の情報を取得する

そのため、パラメータcodeがあるかどうかでプロセス②とプロセス③のどちらを行うか分岐するようにしています。

プロセス②の処理

$scope = [
  'scope' => [
    'user-read-email'
  ]
];
header('Location: ' . $session->getAuthorizeUrl($scope));
die();

どういった種類のデータを扱うかを決めるscopeの指定を配列で用意して$scopeに代入。

今回はユーザーデータを取得するためuser-read-emailを設定しました。

その上で$sessiongetAuthorizeUrlを利用して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初心者でも簡単にデータが取得できます。

ぜひいろいろと試してみてください。

APIでユーザーデータを取得する方法(PHP)

この記事が気に入ったら
いいね または フォローしてね!

SHARE
  • URLをコピーしました!

コメント

コメントする

目次