はじめに
LaravelでSpotifyのAPIを叩いた時にGuzzleを使ってみたので、備忘録的な感じでまとめておきます。
今回は、ユーザーに事前にSpotifyの認証を行ってもらい、各種Tokenを取得した上で処理を行なっているため、認証部分の処理は割愛させていただきます。(気が向いたら書くかも)
Spotify APIとは
Spotifyが用意して公開してくれているもので、楽曲に関する詳細なデータを取得することができます。
登録が必要なので、事前に登録を済ませておいてください。
詳しくは、こちらを参照してください。
手順
- SpotifyのDeveloperに登録を行い、Appを作成し、Client IDを取得する。
- Client IDを使い、ユーザーに認証を行ってもらい、Access Tokenを取得する。
- 取得したアクセストークンを使い、プレイリストの曲を取得する。
実際に書いてみた
必要最低限のコードしか書いておりませんので、実装の際には注意してください。
まずコントローラーを作成します。
$ php artisan make:controller SpotifyController
そうすると、以下の内容でControllerが作成されると思います。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SpotifyController extends Controller
{
//
}
そこにGuzzleの公式ドキュメントに従いコードを書いていきます。
<?php
namespace App\Http\Controllers;
use GuzzleHttp\Client; //追加
use GuzzleHttp\Exception\GuzzleException; //追加
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class SpotifyController extends Controller
{
public function get_songs($playlist_url)
{
$access_token = "ユーザーのアクセストークンはここに入れてください。";
//与えられたURLからIDを取得します。
preg_match('/playlist\/([a-zA-Z0-9]+)/', $playlist_url);
$playlist_id = $result[1];
$api_url = "https://api.spotify.com/v1/playlists/$playlist_id/tracks";
$client = new Client();
try
{
$response = $client->request('GET', $api_url, [
'headers' => [
'Authorization' => 'Bearer ' . $access_token,
'Content-Type' => 'application/json',
]
]);
//jsonで返ってくるので取得できる形に直します。
$data = json_decode($response->getBody(), true);
$songs = $data['items'];
foreach ($songs as $song) {
$artwork = $song['track']['album']['images'][0]['url'];
$song_name = $song['track']['name'];
$artist_name = $song['track']['artists'][0]['name'];
$album_name = $song['track']['album']['name'];
//ここで取得した内容を煮るなり焼くなりする。
} catch (GuzzleException $e) {
echo $e;
}
}
}
}
ある程度処理内容はコメントアウトで記載しておきました。
また、jsonで返ってきたデータのどこに何が入っているかもある程度記載しておいたので参考にしてみてください。
返ってくる値にはかなりたくさんの情報が入っているので気をつけてください^^
最後に
実装を行う際はもう少し付け加えないといけない部分もあると思いますが、ある程度簡潔にまとめることができたと思います。
もっと別のことが行いたい場合は、Spotifyの公式のdocumentationに、より詳しい情報が書かれていますので参考になさってください。
プレイリストを共有するwebアプリケーションを作った際に使ったので、より詳しい処理だったり
備忘録な感じで書いていますが、誰かの役に立てれば幸いです。
(プレイリストを共有するwebアプリケーションを作った際に使ったので、Authの処理だったりは以下のgithubに載っています。よければ参考にしてみてください。)