AmazonMusicからSpotifyに移行したばかりですが、
移行できてない数曲を調べたいのと今後のためにエクスポートテストしておくことにしました。
いつも通りここからは自己責任で。
SpotifyのアカウントはあるのでAPIを使えるようにするために開発者登録。
https://developer.spotify.com/dashboard/login
ざっくり登録して
CLIENT_ID と CLIENT_SECRET を入手。
基本的な手順はここに書かれている通り。
サーバーを立てるというのがメンドくさいなあ・・て思ってたけど、それくらいしか方法がない感じ。
https://developer.spotify.com/documentation/web-api/quick-start/
ローカルサーバーを立てる
https://nodejs.org/ja/
node.js をインストール。
https://github.com/spotify/web-api-auth-examples
をgit clone。
git cloneした authorization_code をプロジェクトにコピー。
さらにルートにある package.json をプロジェクトの authorization_code の中にコピー。
package.json があるフォルダに移動して
$ npm install
これで必要なモジュールがインストールされる。
次に app.js 内の以下を変更する。
var client_id = 'CLIENT_ID'; // Your client id
var client_secret = 'CLIENT_SECRET'; // Your secret
var redirect_uri = 'REDIRECT_URI'; // Your redirect uri
CLIENT_ID、CLIENT_SECRET は Spotify Developer で確認できる。
REDIRECT_URI は http://localhost:8888/callback に設定。
次に Spotify Developer のアプリ側も設定が必要。
https://developer.spotify.com/dashboard/applications
アプリケーション -> EDIT SETTINGS から Redirect URIs に以下を追加。
- http://localhost:8888
- http://localhost:8888/callback
$ node app.js
これでサーバーが起動する。
認証
プロジェクトに api-authorization.py を作成して認証を通す。
USER_NAMEの部分が引っかかりやすい。(プロフィール画面に表示されるランダムな文字列を指定)
$ python api-authorization.py
# -*- coding: utf-8 -*-
import spotipy
import spotipy.util as util
USER_NAME = '123456789' # アカウント情報のランダムな文字列
CLIENT_ID = 'XXXXXXXXXXXXXXXX'
CLIENT_SECRET = 'YYYYYYYYYYYYYYYY'
REFIRECT_URI = 'http://localhost:8888/callback'
SCOPE = 'user-library-read' # 必要なスコープ設定
token = util.prompt_for_user_token(
USER_NAME,
scope=SCOPE,
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
redirect_uri=REFIRECT_URI)
sp = spotipy.Spotify(auth=token)
print('ok')
ブラウザが立ち上がって認証画面となる。
同意すると「Authentication status: successful」と表示が出る。
api-authorization.py を実行したフォルダに .cache-XXXXXXXX ファイルが出来ていて
これがあれば認証が必要なAPIは使えるように。
サーバーはCTRL+Cで停止してOK。
リスト取得
プロジェクトに api-mysongs.py を作成してリストアップ。
$ python api-mysongs.py
# -*- coding: utf-8 -*-
import spotipy
import spotipy.util as util
USER_NAME = '123456789' # アカウント情報のランダムな文字列
CLIENT_ID = 'XXXXXXXXXXXXXXXX'
CLIENT_SECRET = 'YYYYYYYYYYYYYYYY'
REFIRECT_URI = 'http://localhost:8888'
SCOPE = 'user-library-read' # 必要なスコープ設定
if __name__ == "__main__":
# トークン発行
token = util.prompt_for_user_token(
user_name=USER_NAME,
scope=SCOPE,
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
redirect_uri=REFIRECT_URI)
sp = spotipy.Spotify(auth=token)
# APIオプション
limit = 50
offset = 0
# ログ出力
f = open('spotifyLibrary.txt','w', encoding='UTF-8')
while True:
# Get User's Saved Tracks
results = sp.current_user_saved_tracks(limit,offset,'JP')
# 合計曲数
total = results['total']
# 取得した曲の詳細
for idx, item in enumerate(results['items']):
print(str(offset+idx) + "/" + str(total) )
track = item['track']
f.write( track['name'] + "\t" + track['artists'][0]['name'] + "\n" )
# 終了判定
offset = offset + limit
if offset >= total:
break
f.close()
spotifyLibrary.txt という名前で作成される。
まとめ
AmazonMusicからSpotifyに移行できていない曲が判明しました。
大半は手動で追加しましたが、一部の曲はSpotifyにも存在しなかったです。