Pythonを用いてSpotifyのプレイリストを作成&再生してみる
今回は、PythonからSpotifyのAPIを叩いてみます。 まず前提条件として、SpotifyのPremium会員への登録が必要です。
実行環境
Python 3.7.0
Cliend IDの取得
My Dashboard | Spotify for Developersへアクセスします。Create An APPから必要な情報を入力すると以下のページにアクセスできます。
「Show Client Secret」をクリックし、Cliend IDとClient Sercretをメモします。
また、「Edit Setting」ボタンからRedirect URIs にhttp://example.comを追加し、「Save」ボタンを押して保存しておきます。
Python側の準備
今回は、Spotipyと呼ばれるライブラリを用いてアーティストの検索などを行なっていきます。
まずは、
pip install spotipy
でspotipyをインストールします。
名前がややこしいので注意してください。
次に、環境変数にSpotifyのClient ID、Client Secret、Redirect URIを登録します。 今回はbash_profileに記述しておきます。
$ vi ~/.bash_profile export SPOTIPY_CLIENT_ID='XXXX' export SPOTIPY_CLIENT_SECRET='XXXX' export SPOTIPY_REDIRECT_URI='http://example.com'
プレイリストの自動生成と再生
では実際にプログラムの方に入っていきます。
今回の大まかな仕様は以下の通りです。
1. 自分の好みのアーティストを一人選択する。
2. artist_related_artists
を用いて、選択したアーティストと関連性の高いアーティスト群を抽出する。
3. 関連アーティスト群からそれぞれ1曲1ずつランダムに選択し、プレイリストを作成する。
4. Spotifyと連携しているデバイスで再生する。
Spotidyと連携できるデバイスとして、個人的にはSONOS ONEがオススメです。 ワイヤレススピーカーなので部屋のどこにでも置けるのが魅力的。 音質も良く、セットアップも簡単、さらに最近IFTTT対応したというのがポイントですね。 次回は、このプログラムをIFTTT経由で動かしてみたいところ。
Sonos One スマートスピーカー Amazon Alexa搭載 ブラック
- 出版社/メーカー: Sonos
- 発売日: 2018/10/01
- メディア: エレクトロニクス
- この商品を含むブログを見る
プログラムと実行
実行コマンドは以下の通りです。
python main.py [アーティスト名]
実行すると初回のみ
Enter the URL you were redirected to:
と聞かれ、ブラウザでRedirectURIが開かれます。
URLをコピーし、そのままターミナルに貼り付ければOKです。
Point
デバイス情報と楽曲の再生はrequestsを用いて直接HTTPリクエストを送っています。spotipyから呼び出す関数が見当たりませんでした。(よくよく探せばあるのかもしれません。)
device_id = devices["devices"][0]['id']
の部分で、0番目のデバイスIDを取得しています。Spotifyと連携しているデバイスを複数お持ちの人は、数字を変えて自分が再生したいデバイスを選択して下さい。username
は自身のユーザー名に置き換えてください。確認方法は色々あると思いますが、自分はiPhoneのSpotifyアプリから 「My Library > 右上の歯車 > アカウント 」で確認しました。
import spotipy import spotipy.util as util import sys import random import subprocess import requests import json username = "XXXX" scope = 'user-read-playback-state,playlist-read-private,user-modify-playback-state,playlist-modify-public' search_str = sys.argv[1] artist_id_map={} token = util.prompt_for_user_token(username, scope) sp = spotipy.Spotify(auth=token) header = {'Authorization': 'Bearer {}'.format(token)} res = requests.get("https://api.spotify.com/v1/me/player/devices", headers=header) devices = res.json() device_id = devices["devices"][0]['id'] playlist = sp.user_playlist_create(username,"NewPlaylist") playlist_id = playlist['id'] result = sp.search(q='artist:'+search_str, limit=1) artist_id = result['tracks']['items'][0]['artists'][0]['id'] print (result['tracks']['items'][0]['id']) artist_related_artists = sp.artist_related_artists(artist_id) track_ids = [] for artist_list in artist_related_artists['artists']: result = sp.search(q='artist:'+artist_list['name'], limit=50) if len(result['tracks']['items']) > 1: track_ids.append(random.choice(result['tracks']['items'])['id']) sp.user_playlist_add_tracks(username, playlist_id, track_ids) param = {'device_id':device_id, 'context_uri':'spotify:playlist:%s' % playlist_id} res = requests.put("https://api.spotify.com/v1/me/player/play", data=json.dumps(param), headers = header)
まとめ
今回、Pythonを用いてSpotifyのAPIを叩いてみました。
途中手こずる場面もありましたが、無事Playlistの自動生成と指定したデバイスで再生できるようになりました。
次回は、このIFTTTと呼ばれるWebサービスと連携させてみようと思います。
参考
Documentation | Spotify for Developers
Welcome to Spotipy! — spotipy 2.0 documentation