IMAGE: https://cdn-ak.f.st-hatena.com/images/fotolife/i/ikmbear/20211017/20211017210157.png
少し前にspotifyブートキャンプの課題でspotifyのプレイリストを自動作成してくれるnpm:recommendifyを作ったので、紹介します。
何を作ったの?
以下の4つの質問に答えると、それにあったSpotifyのプレイリストを作成してくれるnpmです(15曲入っています)。
- 最近聴いた曲から1~3曲
- 曲の明るさ
- アーティストの人気度
- 曲のBPM
どうして作ったの?
Spotifyのプレミアムプランに契約して、まあまあ曲は聴いているし、毎日使っているんですが、ついつい同じ曲を選んでしまうんですよね。
自分で探しに行けばいいんですけど、Spotifyの検索画面ってジャンルを選ぶと人気の曲が出てくるので、結局最近聴いた曲ばっか出てきてしまう…。
そこで「いっそのことプログラムに勝手にプレイリストを作らせてしまえばいいのでは」と思い、本npmを作成するに至りました。
どうやって使うの?
recommendify - npmにも記載がありますが、一応日本語でも記載しておきます。
※Spotifyアカウントを持っていることが前提になります。
前準備
- Spotifyの開発者Spotifyボードにログインする
- 「CREATE AN APP」を選択する。App nameとApp descriptionに適当な値を入れてチェックをし、「CREATE」を選択する
- 「EDIT SETTING」を開き、コールバックURLに
http://localhost:8888/callback
を設定する
- クライアントIDとクライアントシークレットを控えておく
実行
- recommendifyをインストールする
- 以下のコマンドを実行し、クライアントIDとシークレットを入力して、$1ンの取得を行う
- これでrecommendifyが実行可能になります!プレイリストを作成しましょう!
工夫したところは?
曲をどうやって選出するかですね。
SpotifyのWebAPIでは結構いろいろなパラメータがあって、最初はそれらを全部選べるようにもしようかと思ったのですが、ランダムな曲を選ぶのにパラメータをいくつも選ぶのはいかがなものかと思いまして、現在の形に至りました。
ガチャを回すので4手くらいが限界かなあと。
あとは一応同じ選択肢を選んでもランダムになるように、曲にはシャッフルをかけています(一応SpotifyのAPIは同じパラメータだと同じ内容を返すように見えましたが、登録されている曲のリストが変われはその限りではないとも思っています)。
難しかったところは?
アクセス$1ンが切れた場合のリフレッシュ処理に少し苦労しました。
SpotifyのアクセスSpotifyンはたしか1時間くらいで切れてしまうのですが、切れるたびにエラーになってはストレスなので、confというnpmを使ってリフレッシュSpotifyンをローカルに保存し、アクセス時にSpotifyンの有効期限が切れていれば、アクセスSpotifyンの再取得を行うようにしました。
とはいっても、何回もリトライすると無限ループに陥る可能性があるので、$1処理として実装しつつも、複数回は実行しないようにする部分に結構頭を使いました。
おわりに
個人的に結構気に入っているアプリです(本当はWebアプリとして実装できたらいいんですが…)。
皆さんもぜひダウンロードしてみてください。