#はじめに
音楽定額サービスであるSpotifyをよく使っているのですが、そのSpotifyのAPIがあるということで使ってみることにしました。
また、開発環境は無料で使えるGoogle Colaboratoryを使用しました。
Googleのアカウントさえあれば無料で使えてブラウザ上で動くのと、すぐに結果が表示されるのでわかりやすかったです。
他の方のコードを参考に色々といじってみたので、その備忘録として残します。
#APIキーの取得
Spotify APIを使うにはSpotifyのアカウントが必要なので、持っていない方は取得しておきましょう。
こちらから登録できます。
SpotifyのAPIキーはSpotify for Developersから発行できます。
Spotifyのアカウントでログインして「DASHBOARD」に進むと「CREATE A CLIENT ID」というボタンがあるのでクリック。必要な情報を入力すれば、OAuth2認証に必要なClient IDとClient Secretが入手できると思います。
OAuth2がわからなかったので、以下の記事で勉強しました。
#楽曲の情報取得
Spotifyの楽曲情報には色々な情報があるようなので、まずは楽曲情報を取得しました。
今回はサカナクションの「忘れられないの」のIDを設定しました。
曲のIDの取り方はSpotifyの曲の「・・・」のボタンから「曲のリンクをコピー」で曲のURLがコピーされるので、そのIDを使いました。
まずはSpotifyのAPIを扱うためのライブラリである「spotipy」をインストール。
ドキュメントはこちらにあるみたいです。
!pip install spotipy
また、リストや辞書を整形して出力する「pprint」もインストールしました。
発行したCLIANT IDと発行したCLIANT SECRETを設定し、Spotifyの**「audio_feature」**というもので、曲の情報を取得しています。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pprint
client_id = '発行したCLIANT ID'
client_secret = '発行したCLIANT SECRET'
client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
# 曲のidを設定
result = spotify.audio_features('7a3LbQFgp7NCuNcGlTgSsN')
pprint.pprint(result)
実行するとこんな感じに色々と情報が返ってきました。
[{'acousticness': 0.35,
'analysis_url': 'https://api.spotify.com/v1/audio-analysis/7a3LbQFgp7NCuNcGlTgSsN',
'danceability': 0.642,
'duration_ms': 238000,
'energy': 0.645,
'id': '7a3LbQFgp7NCuNcGlTgSsN',
'instrumentalness': 0.00349,
'key': 6,
'liveness': 0.191,
'loudness': -7.358,
'mode': 0,
'speechiness': 0.0375,
'tempo': 172.1,
'time_signature': 4,
'track_href': 'https://api.spotify.com/v1/tracks/7a3LbQFgp7NCuNcGlTgSsN',
'type': 'audio_features',
'uri': 'spotify:track:7a3LbQFgp7NCuNcGlTgSsN',
'valence': 0.917}]
アコースティック感や踊れる曲なのかという情報などが色々と設定されてるみたいです。
以下の記事で「audio_features」についてわかりやすく解説されています。
Spotifyでトップチャートの曲(と自分の曲)の分析
#アーティスト情報取得
次にアーティストの情報を取得していきたいと思います。
name = 'sakanaction'
result = spotify.search(q='artist:' + name, type='artist')
pprint.pprint(result['artists'])
実行結果がこちら
[{'external_urls': {'spotify': 'https://open.spotify.com/artist/0hCWVMGGQnRVfDgmhwLIxq'},
'followers': {'href': None, 'total': 331802},
'genres': ['j-pop', 'j-rock', 'japanese r&b'],
'href': 'https://api.spotify.com/v1/artists/0hCWVMGGQnRVfDgmhwLIxq',
'id': '0hCWVMGGQnRVfDgmhwLIxq',
'images': [{'height': 640,
'url': 'https://i.scdn.co/image/094163b308bdcd3f5668977c20d41c8455b9705e',
'width': 640},
{'height': 320,
'url': 'https://i.scdn.co/image/a4213b3f5446bdebe55d0f203a396fc2a66cefd4',
'width': 320},
{'height': 160,
'url': 'https://i.scdn.co/image/9722d7a67e4be3656cbc14fc58fb60b7ca2a5ddd',
'width': 160}],
'name': 'Sakanaction',
'popularity': 67,
'type': 'artist',
'uri': 'spotify:artist:0hCWVMGGQnRVfDgmhwLIxq'}]
フォロワー数やジャンル、画像、人気度などアーティストに関する様々な情報を取得することができました。
#類似アーティストの取得
次は似ているアーティストを取得し、そのアーティストの人気やジャンルも表示していきます。
各アーティストには固有のidが振られており、そのidを使って類似のアーティストを取得することができます。
固有idはSpotifyのアーティストのURLに記載されています。
例えばサカナクションの場合
https://open.spotify.com/artist/0hCWVMGGQnRVfDgmhwLIxq
このURLの0hCWVMGGQnRVfDgmhwLIxq
の部分が固有のidになります。
また、pythonのformat関数を使い、文字列を出力しました。
【Python入門】format関数で文字列の書き方
# アーティスの固有idから類似アーティストを取得
result = spotify.artist_related_artists('アーティストの固有id')
for artist in result['artists']:
artist_name = artist['name']
popularity = artist['popularity']
genres = artist['genres']
info = 'アーティスト名: {0} - 人気: {1} ジャンル: {2}'.format(artist_name, popularity, genres)
print(info)
実行結果がこちら
アーティスト名: The Sharehappi from J Soul Brothers III from EXILE TRIBE - 人気: 31 ジャンル: ['j-pop']
アーティスト名: Awesome City Club - 人気: 48 ジャンル: ['j-pop', 'j-rock', 'japanese city pop', 'japanese r&b']
アーティスト名: King Gnu - 人気: 66 ジャンル: ['j-pop', 'j-rock', 'japanese alternative rock', 'japanese r&b']
アーティスト名: Sambomaster - 人気: 52 ジャンル: ['anime', 'j-pop', 'j-rock']
アーティスト名: never young beach - 人気: 50 ジャンル: ['j-indie', 'j-rock', 'japanese alternative rock', 'japanese city pop', 'japanese r&b']
アーティスト名: Base Ball Bear - 人気: 48 ジャンル: ['anime', 'j-indie', 'j-pop', 'j-pop girl group', 'j-poprock', 'j-rock', 'japanese alternative rock']
アーティスト名: cero - 人気: 45 ジャンル: ['j-rap', 'j-rock', 'japanese alternative rock', 'japanese city pop', 'shibuya-kei']
アーティスト名: Soutaiseiriron - 人気: 45 ジャンル: ['j-indie', 'j-pop girl group', 'j-rock', 'japanese alternative rock', 'shibuya-kei']
アーティスト名: Chatmonchy - 人気: 50 ジャンル: ['anime', 'j-indie', 'j-pop', 'j-rock', 'japanese alternative rock']
アーティスト名: Yogee New Waves - 人気: 46 ジャンル: ['j-indie', 'japanese alternative rock', 'japanese city pop', 'japanese r&b']
アーティスト名: tofubeats - 人気: 53 ジャンル: ['j-rap', 'japanese alternative rock', 'japanese city pop', 'japanese r&b']
アーティスト名: Suchmos - 人気: 54 ジャンル: ['j-pop', 'j-rock', 'japanese alternative rock', 'japanese city pop', 'japanese r&b']
アーティスト名: Fujifabric - 人気: 51 ジャンル: ['anime', 'j-indie', 'j-pop', 'j-rock', 'japanese alternative rock']
アーティスト名: Quruli - 人気: 54 ジャンル: ['j-pop', 'j-rock', 'japanese alternative rock', 'japanese city pop', 'japanese jazz', 'japanese r&b']
アーティスト名: Ohashi Trio - 人気: 52 ジャンル: ['j-acoustic', 'j-pop', 'japanese city pop', 'japanese jazz', 'japanese r&b']
アーティスト名: BUMP OF CHICKEN - 人気: 63 ジャンル: ['anime', 'anime score', 'j-pop', 'j-rock', 'japanese alternative rock']
アーティスト名: Nulbarich - 人気: 56 ジャンル: ['j-pop', 'japanese alternative rock', 'japanese city pop', 'japanese r&b']
アーティスト名: Tokyo Incidents - 人気: 54 ジャンル: ['j-pop', 'j-rock']
アーティスト名: Gesu No Kiwami Otome - 人気: 56 ジャンル: ['j-pop', 'j-rock']
アーティスト名: Supercar - 人気: 39 ジャンル: ['j-indie', 'j-pop', 'j-rock', 'japanese alternative rock', 'japanese city pop', 'japanese shoegaze', 'shibuya-kei']
類似のアーティスト名と人気、ジャンルを取得することができました。
#まとめ
今回はSpotify APIでできる楽曲の情報やアーティスト情報など色々取得することができました。
楽曲情報にはアコースティック感や踊れる曲、曲の過激さなどかなりの情報が含まれていて、この情報が高機能なサービスに繋がっているんだな〜と感じました。
また、アーティスト情報や類似のアーティストの情報も僕的にはかなり参考になるので、使ってみてよかったです!
また、Spotify APIを使って何かやってみようと思います。
#参考
以下の記事を参考にさせていただきました。ありがとうございました。
Spotifyでトップチャートの曲(と自分の曲)の分析
Spotify APIで遊んでみる