Spotify APIで自分専用の再生数ランキングを作る
Spotifyから公開されているWeb APIを用いて再生数ランキングを作りました。
公式のサンプルアプリケーションをベースにシュッと開発できたので記録として残します。
GitHub: https://github.com/yuu26jp/spotify-playback-ranking
Spotify API
Spotify APIでは、公開されている楽曲情報やユーザに紐づく再生履歴などを自由に参照できます。
更新系APIも提供されており、プレイリストの編集やプレーヤーの操作も可能です。
認証方式によって取得できる情報が異なり、APIクライアント単位の認証では楽曲の公開情報へ、Spotifyユーザ単位の認証では個人データにもアクセスできます。
楽曲のメタデータには曲の雰囲気を示すパラメータやテンポなどの数値も含まれており、レコメンドの裏側をうかがい知れたりしてなかなか面白いです。
ユーザ情報を取得する場合の例
% curl 'https://api.spotify.com/v1/me' -H 'authorization: Bearer xxxxxxxx'
{
"display_name" : "yuu26",
"external_urls" : {
"spotify" : "https://open.spotify.com/user/215mf7bo3kbazu7rdxyal5sgy"
},
"href" : "https://api.spotify.com/v1/users/215mf7bo3kbazu7rdxyal5sgy",
"id" : "215mf7bo3kbazu7rdxyal5sgy",
"images" : [ {
"url" : "https://i.scdn.co/image/ab67757000003b822e3c3382d06af425afad7813",
"height" : 64,
"width" : 64
}, {
"url" : "https://i.scdn.co/image/ab6775700000ee852e3c3382d06af425afad7813",
"height" : 300,
"width" : 300
} ],
"type" : "user",
"uri" : "spotify:user:215mf7bo3kbazu7rdxyal5sgy",
"followers" : {
"href" : null,
"total" : 1
},
"country" : "JP",
"product" : "premium",
"explicit_content" : {
"filter_enabled" : false,
"filter_locked" : false
},
"email" : "xxxxxxxx"
}
Get User’s Top Items API
公開されているAPIの一つ Get User’s Top Items で再生回数の多いアイテムを取得できます。
初期値では英語が返ってくるため Accept-Language: ja
を加えて日本語に変更。
% curl 'https://api.spotify.com/v1/me/top/tracks?limit=50&time_range=short_term' -H 'Accept-Language: ja' -H 'authorization: Bearer xxxxxxxx'
{
"items" : [ {
"album" : {
"album_type" : "SINGLE",
"artists" : [ {
"external_urls" : {
"spotify" : "https://open.spotify.com/artist/5Vo1hnCRmCM6M4thZCInCj"
},
"href" : "https://api.spotify.com/v1/artists/5Vo1hnCRmCM6M4thZCInCj",
"id" : "5Vo1hnCRmCM6M4thZCInCj",
"name" : "Official髭男dism",
"type" : "artist",
"uri" : "spotify:artist:5Vo1hnCRmCM6M4thZCInCj"
} ],
"available_markets" : [ "JP" ],
"external_urls" : {
"spotify" : "https://open.spotify.com/album/7HgPSKEcCguaAzen1GIgka"
},
"href" : "https://api.spotify.com/v1/albums/7HgPSKEcCguaAzen1GIgka",
"id" : "7HgPSKEcCguaAzen1GIgka",
"images" : [ {
"height" : 640,
"url" : "https://i.scdn.co/image/ab67616d0000b273c090f8a6263469689b070620",
"width" : 640
}, {
"height" : 300,
"url" : "https://i.scdn.co/image/ab67616d00001e02c090f8a6263469689b070620",
"width" : 300
}, {
"height" : 64,
"url" : "https://i.scdn.co/image/ab67616d00004851c090f8a6263469689b070620",
"width" : 64
} ],
"name" : "SOULSOUP",
"release_date" : "2023-12-13",
"release_date_precision" : "day",
"total_tracks" : 1,
"type" : "album",
"uri" : "spotify:album:7HgPSKEcCguaAzen1GIgka"
},
"artists" : [ {
"external_urls" : {
"spotify" : "https://open.spotify.com/artist/5Vo1hnCRmCM6M4thZCInCj"
},
"href" : "https://api.spotify.com/v1/artists/5Vo1hnCRmCM6M4thZCInCj",
"id" : "5Vo1hnCRmCM6M4thZCInCj",
"name" : "Official髭男dism",
"type" : "artist",
"uri" : "spotify:artist:5Vo1hnCRmCM6M4thZCInCj"
} ],
"available_markets" : [ "JP" ],
"disc_number" : 1,
"duration_ms" : 314469,
"explicit" : false,
"external_ids" : {
"isrc" : "JPPC02312635"
},
"external_urls" : {
"spotify" : "https://open.spotify.com/track/7r23DlIJauiYbGYojLgarV"
},
"href" : "https://api.spotify.com/v1/tracks/7r23DlIJauiYbGYojLgarV",
"id" : "7r23DlIJauiYbGYojLgarV",
"is_local" : false,
"name" : "SOULSOUP",
"popularity" : 70,
"preview_url" : "https://p.scdn.co/mp3-preview/eb03bb502bed11ea73bc2388ff3fd1bdb6737f68?cid=2c07c58bb20c4f529f5e262b85b6b1ba",
"track_number" : 1,
"type" : "track",
"uri" : "spotify:track:7r23DlIJauiYbGYojLgarV"
},
{ 以降50曲目まで…… },
]
}
time_range
パラメータで期間を指定でき、以下3つから指定できます。
short_term
: 直近4週間medium_term
: 直近6ヶ月long_term
: 利用可能な全期間
今回はこのAPIを用いて、直近1ヶ月の再生数ランキングを作りました。
公式サンプルコード
GitHub上で公開されている公式のサンプルコードを参考にします。
余談ですが、Spotify APIのPythonライブラリは「Spotipy」という名前でした。かわいい。
実装内容と動作イメージ
サンプルコードがBootstrapを用いたWebアプリとなっており、この実装を参考に構築しました。
具体的には呼び出すAPIを /v1/me/top/tracks
に変更、フロントを楽曲情報に合わせて変更した程度。
PR: https://github.com/yuu26jp/spotify-playback-ranking/pull/4/files
起動すると、まずはSpotifyでのログインを要求されます。
Spotify側の認証/認可を済ませると……
楽曲ランキングが表示されます。
まとめ
Spotify APIを用いて 再生数ランキングを確認するアプリ を作りました。
膨大なAPIドキュメントからも分かる通り、他にもさまざまな機能があり遊びがいがありそうです。
個人ブログを一度も更新しないまま年を越しそうなので年内に何か書く (宣言駆動
— yuu26/えむおん (@m_on_yu) December 28, 2023
(深く考えずにツイートで宣言したら大晦日の夜に急いで書き上げる羽目になった)
ディスカッション
コメント一覧
まだ、コメントがありません
フォローする
カテゴリー
最近の投稿
ブログについて