オタクの落書き(改)

オタクがぶつぶつ言うだけ

spotifyのAPIで遊ぶ:その1

5000年前くらいにSpotifyAPI覗いてヨクワカンネって諦めていたが、仕事で簡単なサーバ立ててAPI用意して~~っていうコード眺めていたらそのことを思い出した。 業務中にググってたら以前より話が分かる。流石に基礎知識と地力(主に検索力)もついてきたんやなって感動して帰宅してうっかりコードを書いた。

というのは嘘で下のやつをほぼ丸パクリしただけ。

qiita.com

f:id:someone34o2:20210906220336p:plain

キャッキャッ

当然ここまででは面白くないので更に一歩。これもほぼ受け売り。

qiita.com

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

# 見せられないよ
client_id = ''
client_secrtet = ''

credential = SpotifyClientCredentials(client_id, client_secrtet)

spotify = spotipy.Spotify(client_credentials_manager = credential)

target = 'spotify:playlist:2z2W7reNxF9PbJBmfUTvkA'
targets = spotify.playlist_tracks(target)

cnt = 0
for element in targets['items']:
    try:
        track_name = element['track']['name']
        track_id = element['track']['id']
        track_feature = spotify.audio_features(track_id)
        if track_feature == [None]:
            continue
        print(track_name)
        print(track_feature)
        cnt = cnt + 1
    except Exception as ex:
        print(ex)
        continue

print('found features of {} tracks'.format(cnt))

対象をこの前の勝負プレイリストにしてドン。playlist要素がややこしくてfeaturesを取得するまでに時間がかかった。

まともなリファレンスがなくて片っ端からそれっぽいの探していくやつ嫌い(見逃しているだけという説もありそう)

https://github.com/plamere/spotipy/blob/master/spotipy/client.py

f:id:someone34o2:20210906225517p:plain

tryの範囲クソだろ Qiitaリンクの投稿を見ると分かるけど結構色んなパラメータがあって面白そう。とれてるんだけどなんで辞書が要素1のリストに入って返ってくるんだ…?たまにaudio_featuresがとれないのがあるんだけど"track_feature==None"で拾えなくてキレそう。と思ってGithub眺めてたらどうやら引数にリスト渡せるらしい。(最初からちゃんと読め)

最初はアーティスト単位(当然楠木ともりさん)で曲のid拾ってやってたんだけどなぜか全部Noneだったんだよな…。有志が作った全曲プレイリストを↑のコードに渡したら(一部の曲を除いて)普通に取れたので謎。後でid比較して確認してみようか。

とりあえず今日はここまで。分布出してみたりとか、平均値を雨の方と比べてみるとかしたら面白いかも。多分続く、多分ね(自己暗示)