選択の痕跡

音楽・テクノロジー・哲学

「Spotify API」を初めて使って、プレイリストをコピーしてみる

はじめに

自分は音楽をSpotifyで聴いています。サービスが日本でローンチしたのが2016年ですが、確か2017年から結構な頻度で使っています。
前はiTunesYoutubeでも音楽を聴くことがそこそこありましたが、今は音楽に触れる機会は、ほぼSpotifyのみです。
そんなわけでSpotifyに触れ続ける毎日なのですが、やはり毎日使っていると、それなりに細かい不満がたくさん出てきます。
そこで、その不満を解決するために、SpotifyAPIを自分でたたいて解決してみようと思いました。
今回は、まず初めてSpotify APIを実行し、簡単に出来そうなプレイリストのコピーまでやってみます。
※色んな方の記事を参考にさせていただきました。ありがとうございました。ググれば大体誰かしらノウハウを公開してくれている世の中です。。。

Spotify APIPythonで実行する

自分はPythonが少し使えるので、Pythonで書きたいなと思い、色々ググってみました。参考になりそうな記事がいくつかありましたが、入門としては以下の記事がとても参考になりました。

qiita.com

まずはこの記事の通りにやってみればよいと思います。APIの登録方法部分は割愛されているので、そこで迷うようであれば以下を参考にすればよいと思います。

dev.classmethod.jp

とりあえず、何かしら実行して、結果が出てきたので、第一関門はクリア。
ここで押さえておきたいポイントは以下の辺りかと思います。

  • SpotifyAPIPythonで使う場合には、「Spotipy」というライブラリを使用します。Spotify Web APIのための軽量のPythonライブラリです。
    Spotipyの使い方は以下の公式ドキュメントが参考になります。これだけだと使い方のイメージがいまいち湧かないですが、サンプルコードが大体GitHubに上がっているので、とりあえず見てみて、コピペで動かしてみるとよさそうです。

spotipy.readthedocs.io

github.com

  • 認可の種類について、自分は少しハマったので、覚えておいたほうが良いかもしれません。
    用途に応じて三種類の認可方式が用意されておりますが、重要なのはユーザデータにアクセスするときには、"Authorization Code"というタイプを利用する必要があることです。
    細かい点や書き方は、公式ドキュメントを参考にしましょう。最初は戸惑うかもしれないので、色々ググったり、試したりして、認可の通し方には慣れたほうが良さそうです。自分もまだ理解しきれていませんが。。。

spotipy.readthedocs.io

なぜプレイリストをコピーしたいか?

それでは、やりたいことをやっていこうと思います。
今回のやりたいことは、"プレイリストをコピーする"です。
そもそもなぜこんなことがしたいか?を簡単に記載します。
普通はあまりやりたいことがないと思いますが、たまにこれをやりたい時があるのです。

以下はiPhoneで曲をプレイリストに追加するときのスクリーンショットです。
f:id:shogomusic:20200126014401p:plain:w200

特段特殊な点はないと思いますが、自分は聴きたい曲を「☆now」というプレイリストに入れて管理しています。
ここで、新しいプレイリストを作成してみます。すると。。。
f:id:shogomusic:20200126014406p:plain:w200

新しく作成した「test」プレイリストが「☆now」の上に出来ました。色々探してみたのですが、この画面の並び順の変更方法は分からず、どうやら"プレイリストに追加"画面でのプレイリストは、プレイリスト作成日の降順で固定されているようです。
この時に問題が発生します。

1. プレイリスト追加先を間違えやすくなる
プレイリストが新しく作成される度に、追加したいプレイリスト「☆now」の場所が変わってしまいます。
☆をつけて分かりやすくしているものの、ちょっと押し間違えて追加してしまうこと必至です。間違えちゃうと割と面倒です。
2. 多くのプレイリストが作成されると、スクロールが必須になる
まぁ数個の位置が変わるレベルなら、我慢すればいいだけです。しかし10個ぐらい追加されてしまうと、スクロールをしなければいけなくなってしまいます。これは面倒すぎます。

2が発生すると流石に我慢ならないので、これまでは手動でプレイリストを作り直すことをしていたのですが、これがまた面倒。半年に1回ぐらいしか機会はないものの、プレイリストをコピーする機能は見当たらなかったので、手動でやることになりますが、プレイリストを見比べながら、少しずつ曲を追加していくという何とも非効率な作業です。
これをAPIをうまく使えば、自動化出来るのではないかと考えました。

プレイリストをコピーしてみる

簡単にロジックを記載します。
単純なコピー機能はAPIにもなかったので、以下のような手順にしました。

  1. 「☆now」のプレイリストのIDを特定する
  2. 「☆now」を「☆now_日付」リネームする
  3. 「☆now」の名前で新規プレイリストを作成する
  4. 「☆now_日付」に入っている曲を抽出し、同じ曲を「☆now」に追加する

こんな感じのロジックで、非常に単純なものですが、自分のやりたかったことは達成できそうです。
実際に作成したソースコードはページ最下部に貼っておきます。
(全く綺麗にコードではないことは分かっているので、大変恐縮ですがまぁ一応動くと思うということで公開しておきます。。。 )
このソースコードを実行した後に、"プレイリストを追加"画面に遷移すると、以下のようになります。
良い感じです。
f:id:shogomusic:20200126014418p:plain:w200

今回はとりあえずSpotifyAPIが使ってみたかったという目的もあったのですが、十分達成できましたし、ちゃんと問題も解消できました。
今後も、SpotifyAPIを活用して、自動化だったり、データ分析をしていければと考えています。