[Next.js]SpotifyAPIを使って曲分析アプリを作ってみた!
はじめに
こんにちは! 好きなバンドは、indigo la end です🎸
そんな僕が、普段音楽を聴いているSpotifyはWebAPIを提供しており、楽曲の情報などを取得することができます。
今回、そのAPIを使って、楽曲のBPMなどを取得し、表示できるWebアプリを作ってみました!
作ったもの
今回実際に開発したものです!
最初のページは、このようになっています。
spotifyの「シェア」から共有リンクを取得し、「Submit」を押すと楽曲のページに遷移します。
次のページで、楽曲の情報を確認できます。
使用した技術
- TypeScript
- React
- Next.js
- Tailwind CSS
- Spotify API
やったこと
1: Next.jsのインストール
npx create-next-app@latest
このコマンドを実行し、アプリを作成します。
アプリの名前は適当で大丈夫です。今回は、nexspo
にしました。
その後に、いろいろ表示されますが、僕はすべてYESにしました。
2: アプリの起動
cd nexspo
cd
コマンドで先ほど作成したアプリのディレクトリに移動します。
npm run dev
その後、このコマンドで開発用のサーバーを起動します。
起動後は、以下のリンクでアクセスできます。
http://localhost:3000
3: Spotify for Developerに登録
このサイトから登録できます。
登録したら、「Dashboard」に行き、「Create app」ボタンを押して、アプリを作ってください。
「Redirect URI」には、http://localhost:3000
を入力してください。
4: envの設定
Spotify APIのClient ID
とClient secret
をenvファイルに設定しましょう。
コードに直接書くと、セキュリティ面であまり良くないため、環境変数に保持すると良きです!
nexspo
ディレクトリ直下に.env.local
ファイルを作成してください。
NEXT_PUBLIC_CLIENT_ID=[Your Client ID]
NEXT_PUBLIC_CLIENT_SECRET=[Your Client secret]
コードをgithubで管理する場合は、.env.local
を間違ってあげないように、.gitignore
に次のように設定を追加しておきましょう!
.env.local
5: APIのアクセストークン取得
まず、axios
をインストールしましょう
npm i axios
import axios from 'axios';
const clientId = process.env.NEXT_PUBLIC_CLIENT_ID;
const clientSecret = process.env.NEXT_PUBLIC_CLIENT_SECRET;
async function getSpotifyToken() {
const tokenResponse = await axios({
method: 'post',
url: 'https://accounts.spotify.com/api/token',
data: 'grant_type=client_credentials',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' + (new Buffer(clientId + ':' + clientSecret).toString('base64'))
}
});
return tokenResponse.data.access_token;
}
アクセストークンは、このように取得しました。
clientId
等は、先ほど設定した.env.local
から取得しています。
6: 楽曲情報の取得
export async function getTrackInfo(id: string) {
const token = await getSpotifyToken();
const response = await axios({
method: 'get',
url: `https://api.spotify.com/v1/tracks/${id}`,
headers: {
'Authorization': `Bearer ${token}`
}
});
return response.data;
}
id: string
で楽曲のTrackIdを指定して、データを取得します
7: Audio Featuresの取得
export async function getTrackFeatures(id: string) {
const token = await getSpotifyToken();
const response = await axios({
method: 'get',
url: `https://api.spotify.com/v1/audio-features/${id}`,
headers: {
'Authorization': `Bearer ${token}`
}
});
return response.data;
}
Audio Featuresは、このAPIを使って取得しています。
8: 取得したデータの表示
上で取得したデータをいい感じに表示するUIを作ります。
詳しくは、githubで確認してください
おわりに
今回、Next.jsでの開発は初めてで、そのアウトプットとしてこの記事を書きました。
間違っているところがあればご指摘お願いします。
Discussion