Spotify API
Spotify APIの使い方を解説していきます。
pythonとJavascriptのコードを載せてあるのでよかったら見てください。
APIとは
APIとはApplication Programming Interfaceの略で、ソフトウェアやアプリケーションの一部を公開して、他のソフトウェアやアプリケーションと機能を共有できるようにしたものです。
APIを使えば検索して、コピーして、貼り付けてというような作業がコードを書いてしまえば一瞬でできてしまいます。
とりあえずやってみましょう。
Spotify APIでできること
Spotify APIでは曲を検索してトラックID・アルバム名・曲の長さ・人気度などなどいろんな情報を取ってくることができます。
他にもアーティスト情報を取得したり、プレイリストの作成なんかもできます。
やり方(python)
Spotifyでアプリを作成
開発者用のサイトにアクセス。
右上の「Log in」からSpotifyにログイン。
Spotifyのアカウントがない人は作ってください。
ログインできたら右上から「Dashboard」を開く。
「Create app」
Redirect URLは何でもいいです。
アプリ名もtestなど何でもいいので設定「Save」。
右上の「Settings」から「Client ID」と「Client secret」を表示(後で使います)。
spotipyのインストール
ターミナルを開いて以下のコードを実行してください。
pip install spotipy
spotipyのインストールが完了したのでコードを書いていきましょう。
コード
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
client_id ="YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
ccm = SpotifyClientCredentials(client_id = client_id, client_secret = client_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)
「CLIENT ID」と「CLIENT SECRET」と書いてあるところは、さっき表示した文字列を貼り付けてください。
曲の検索
曲の検索をしてみましょう。
results = spotify.search(q="Shape of you", limit=1, type="track", market="JP", offset=0)
for track in results["tracks"]["items"]:
song_name = track["name"] #曲名
artist_name = track["artists"][0]["name"] #アーティスト名
album_name = track["album"]["name"] #アルバム名
release_date = track["album"]["release_date"] #リリース日
popularity = track["popularity"] #人気度
duration_ms = track["duration_ms"] #曲の長さ(ms)
track_id = track["id"] #トラックID
preview_url = track["preview_url"] #プレビューurl
album_image = track["album"]["images"][0]["url"] #アルバム画像url
print(song_name, artist_name, album_name, release_date, popularity, duration_ms, track_id, preview_url, album_image)
「results」の定義の「limit」は検索する曲の数、「market」は市場、「offset」は検索結果の何番目の曲か(0から始まる)を表しています。
「market」は指定がないとNone、「offset」も同様にすると0になります。
今回はアーティスト名・人気度・曲の長さなどを取得しましたが、他にもたくさんあるのでこちらのサイトで見てみるといいかもしれません。
Spotify APIの楽曲データで分析するBTSの世界的人気 - Qiita タイトルから興味をそそられる。
需要があるかわかりませんが、SpotifyのHTML用埋め込みコードは次のコードで取得できます。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
songs = [
"I knew you were trouble",
"Timber",
"Living My Life",
"woke up in love",
"body back",
"tie me down"
]
client_id ="YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
ccm = SpotifyClientCredentials(client_id = client_id, client_secret = client_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)
for song_name in songs:
results = spotify.search(q=song_name, limit=1, type="track", market="JP", offset=0)
for track in results["tracks"]["items"]:
track_id = track["id"]
print('<iframe style="border-radius:12px" src="https://open.spotify.com/embed/track/{track_id}?utm_source=generator" width="100%" height="152" frameBorder="0" allowfullscreen="" allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture" loading="lazy"></iframe>'.format(track_id=track_id))
50曲くらいを一気に取得できたので気持ちよかったです。
曲の検索だけでなく、プレイリスト作成・アーティスト情報の取得など、何でもできるので興味のある方はやってみると面白いと思います。
やり方(JS)
Spotifyでのアプリ作成やどんな情報を取得できるのかなどは、先ほどのやり方(python)で説明したので、わからない場合はそっちを見てください。
言語が変わっただけなので、曲の検索のコードを載せておきます。
const songs = [
"I knew you were trouble",
"Timber",
"Living My Life",
"I ain't worried",
"woke up in love",
"body back",
"tie me down",
]
const CLIENT_ID = 'YOUR_CLIENT_ID';
const CLIENT_SECRET = 'YOUR_CLIENT_SECRET';
async function getAccessToken() {
const response = await fetch('https://accounts.spotify.com/api/token', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': `Basic ${btoa(`${CLIENT_ID}:${CLIENT_SECRET}`)}`
},
body: 'grant_type=client_credentials'
});
const data = await response.json();
return data.access_token;
}
async function searchTrack(query) {
const access_token = await getAccessToken();
const response = await fetch(`https://api.spotify.com/v1/search?q=${query}&type=track&limit=1`, {
headers: {
'Authorization': `Bearer ${access_token}`
}
});
const data = await response.json();
console.log(`Track ID: ${data.tracks.items[0].id}`);
console.log(`Album Name: ${data.tracks.items[0].album.name}`);
console.log(`popularity: ${data.tracks.items[0].popularity}`);
console.log(`artist name: ${data.tracks.items[0].artists[0].name}`);
console.log(`track name: ${data.tracks.items[0].name}`);
console.log(`release date: ${data.tracks.items[0].album.release_date}`);
console.log(`duration(ms): ${data.tracks.items[0].duration_ms}`);
}
for(let i = 0;i < songs.length;i++){
searchTrack(songs[i]);
}