はじめに
SpotifyのWeb APIを用いることで、コンテンツのメタデータの取得、再生のコントロールなどを行えます [1]。
この記事は、Spotifyで最近再生した曲をJSONで取得するときに、どのようにSpotify Web APIを用いるかのメモです。情報はこの記事の制作時点のものであり、その正確性は保証しません。
準備・環境
はじめに次を用意します:
- インターネットに接続できる環境
- インターネットブラウザ
- base64とcurlを実行できる環境(この記事ではUbuntuを使用)
- Spotifyのアカウント
- やる気
注意
SpotifyのWeb APIを用いると、場合によってはアカウントの情報を入手できるようになります。これから先で入手するIDやtokenが外部に漏れることで、アカウント情報が流出しかねないことを留意してください。また、これから先の手順は、そのような情報に簡単にアクセスできないように用意された認証ステップでもあります。
流れ
- Spotify for Developersへアクセス
- appを作成する
- Client IDとClient secretを入手する
- User Authorizationを入手する
- Access tokenを入手する
- 最近再生した曲を取得する
- Access tokenをリフレッシュする
手順
Spotify for Developersへアクセス
Spotify for DevelopersのDashboardにアクセスします。Spotifyアカウントへのログインやアクセス承認が求められた場合は適宜対応してください。
appを作成する
Dashboardにある「Create app」をクリックし、appを作成します。表示される画面に従って、必要な情報を入力します:
- App name
- 自身がわかりやすい適当な名前を入力
- App description
- 自身がわかりやすい適当な説明を入力
- Website
- 空欄でよい
- Redirect URIs
- リダイレクト先のURI。今回はすべて手動でやるので適当に入力(例: 「http://localhost/」)
- Which API/SDKs are you planning to use?
- Web APIにチェックをいれる
Client IDとClient secretを入手する
Dashboard上で作成したAppをクリックし、画面の遷移後「Settings」をクリックします。「Basic Information」タグの上部にClient IDとClient secretがあるので、メモ帳などにメモします(Client secretは「View client secret」をクリックすることで表示されます)。
次に、Client IDとClient secretをBase64でエンコードします:
echo -n "{Client ID}:{Client secret}" | base64
これによって得た文字列もメモしておきます。
User Authorizationを入手する
先ほど入手したClient IDをもとに、インターネットブラウザでつぎのURLにアクセスします:
https://accounts.spotify.com/authorize?response_type=code&client_id={入手したclient_id}&scope=user-read-recently-played&redirect_uri={指定したリダイレクト先}
今回は、最近再生した曲をゲットするために、scope=user-read-recently-played
を指定しました。
例えば、リダイレクト先がhttp://localhost/
であるとき、前のURLにアクセスすると、
http://localhost/?code={code}
のように、リダイレクトされたリンクのあとにcodeがついてきます。このcodeもメモしておきます。
Access tokenを入手する
次を実行します:
curl -X POST \
--url https://accounts.spotify.com/api/token \
-H "content-type: application/x-www-form-urlencoded" \
-H "Authorization: Basic {Base64でエンコードしたやつ}" \
-d grant_type=authorization_code \
-d code={code} \
-d redirect_uri={指定したリダイレクト先}
そうすると、次が得られます:
{
"access_token": "{access_token}",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "{refresh_token}",
"scope": "user-read-recently-played"
}
access_token、refresh_tokenをメモしておきます。
最近再生した曲を取得する
実際に、APIをつついて最近再生した曲を取得してみます。今回は最近再生した3曲を取得することにします(limit=3
)。次を実行します:
curl --request GET \
--url https://api.spotify.com/v1/me/player/recently-played?limit=3 \
--header 'Authorization: Bearer {access_token}'
実行すると、曲のメタデータがJSONで入手できます。
Access tokenをリフレッシュする
先ほど入手したAccess tokenは1時間の有効期限があります。Access tokenをリフレッシュするには、次を実行します:
curl -X POST \
--url https://accounts.spotify.com/api/token \
-H "content-type: application/x-www-form-urlencoded" \
-H "Authorization: Basic {Base64でエンコードしたやつ}" \
-d grant_type=refresh_token \
-d refresh_token={refresh_token}
実行すると、Access tokenを入手したときと同様のJSONが得られます。
うまくいかないとき
原因1: 混乱している
次に挙げるものを、混乱して勘違いして入力していませんか?
- Client ID
- Client secret
- User Authorization
- Base64でエンコードしたやつ
- Access token
- Refresh token
原因2: Access tokenの有効期限が切れた
Access tokenをリフレッシュするか、改めてAccess tokenを入手してみましょう。
原因3: タイプミス
綴りやクォーテーションに抜けがないかなどを確認してみましょう。
もっと詳しく知りたいなら
今回は、Authorization Code Flowに則って実行していきました。この記事で行ったことが具体的に何をしているのかや、APIを用いて他のことをしてみたいならば、Spotify公式のドキュメントを見てみましょう。