はじめに

こんにちは!エクネスの24卒入社の新卒エンジニア、藤嶌です!

最近、車通勤中にSpotifyで音楽を聴くことが増えました
ただ、毎回「今日はこのアーティストとこのアーティストを聴きたいな」と思うたびに、いちいちプレイリストを手で作るのが地味に面倒……。

「それなら、プレイリスト自動で作ればよくない?」

と思い立ち、Spotify API と Python(Spotipy)を使って、テキストファイルに書いたアーティスト一覧から自動でプレイリストを作るスクリプトを書いてみました。
この記事では、その仕組みとコードを紹介します。

開発環境

今回使った環境はこんな感じです。

  • OS:MAC
  • venv(仮想環境)上で開発
  • Python:3.12.12
  • pip:25.3
  • ライブラリ:Spotipy

仮想環境は、プロジェクトディレクトリで以下のように作成しています:

python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install spotipy python-dotenv

Spotify API の準備

細かい画面は省きますが、以下は一度やっておく必要があります。

  1. Spotify Developer Dashboard でアプリを作成
  2. Client ID / Client Secret を取得
  3. Redirect URI を設定(例:http://127.0.0.1:8000/callback
  4. これらを .env ファイルに保存

.env はこんな感じで置いています:

SPOTIFY_USERNAME=自分のSpotifyユーザー名
SPOTIFY_CLIENT_ID=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
SPOTIFY_CLIENT_SECRET=yyyyyyyyyyyyyyyyyyyyyyyy
SPOTIFY_REDIRECT_URI=http://127.0.0.1:8000/callback

.env はGit管理から除外してください。
※自分のSpotifyのユーザー名はアプリから確認できます。

アーティスト一覧のテキストファイル

アーティスト名は、251208.txt のようなテキストファイルに1行ずつ書いておきます。

Artist A
Artist B (JPN)
Artist C
...

コード側では、( 以降をカットするようにしているので、

  • Artist B (JPN)Artist B

のように、補足情報をカッコ書きでつけておいてもOKです。

実際のコード

では、実際に動かしているコードがこちらです。

import os
from dotenv import load_dotenv
import spotipy
from spotipy.oauth2 import SpotifyOAuth

load_dotenv()

username = os.getenv("SPOTIFY_USERNAME")
my_id = os.getenv("SPOTIFY_CLIENT_ID")
my_secret = os.getenv("SPOTIFY_CLIENT_SECRET")
redirect_uri = os.getenv("SPOTIFY_REDIRECT_URI")

scope = (
 'user-library-read '
 'user-read-playback-state '
 'playlist-read-private '
 'user-read-recently-played '
 'playlist-read-collaborative '
 'playlist-modify-public '
 'playlist-modify-private'
)

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
 scope=scope,
 client_id=my_id,
 client_secret=my_secret,
 redirect_uri=redirect_uri,
 username=username
))

def main():
 # プレイリスト作成
 playlist = sp.user_playlist_create(username, '251130New')
 
 # テキストファイルからアーティスト名を取得
 with open('251130.txt', 'r', encoding="utf-8") as f:
 datalist = f.readlines() 

 for name in datalist:
  name = name.strip()
  if name == '':
   continue 

  # "(" より前までがアーティスト名
  if '(' in name:
   name = name[:name.find('(')]

  # アーティスト検索
  search_result = sp.search(q=name, limit=10, type='artist')
  if len(search_result['artists']['items']) == 0:
   print(f"❌ 該当なし: {name}")
   continue

  artist_id = search_result['artists']['items'][0]['id'] 

  # アルバム取得(すべて取ってくる)
  album_results = sp.artist_albums(artist_id, album_type='album', limit=50)
  album_items = album_results['items'] 

  while album_results['next']:
   album_results = sp.next(album_results)
   album_items.extend(album_results['items'])

  if len(album_items) == 0:
   print(f"❌ アルバムなし: {name}")
   continue

  # release_date で降順ソートして最新アルバムを取得
  album_sorted = sorted(album_items, key=lambda x: x['release_date'], reverse=True)

  tracks = sp.album_tracks(album_sorted[0]['id'])['items']
  if len(tracks) == 0:
   print(f"❌ トラックなし: {name}")
   continue

  # 最新アルバムの1曲目を追加
  track_id = tracks[0]['id']
  sp.user_playlist_add_tracks(username, playlist['id'], [track_id])
  print(f"✔ 追加: {name} → {tracks[0]['name']}")

if __name__ == "__main__":
main()

実行してみた結果

スクリプトを実行すると、コンソールにはこんなログが流れます:

✔ 追加: Artist A → New Song 1
✔ 追加: Artist B → Latest Track
❌ 該当なし: Unknown Artist
✔ 追加: Artist C → Brand New Day ...
  • 見つからないアーティストは としてスキップ
  • 追加できたものは と曲名まで表示

そして Spotify アプリを開くと、指定したプレイリスト名で新しいプレイリストができていて、
通勤中に聴きたいアーティストの曲がズラッと並んでいます。
手でポチポチ追加する作業から解放されました。

今後の発展アイデア

今回のスクリプトをベースに、今後は例えばこんなこともできそうです。

  • アルバムの1曲目ではなく、人気順の上位1〜3曲を追加する
  • テキストファイルとは別に、**「今日はこのジャンルだけ」**みたいなフィルタを入れる
  • 定期的に自動実行して、毎週月曜に新しい通勤用プレイリストを作る

などなど、Spotify API と Python を組み合わせると、音楽の聴き方をかなり自分好みに自動化できそうです。

個人的には、好きなアーティストの新譜が出た瞬間に、自動で通勤用プレイリストができあがるところまで持っていきたいな〜と思っています。

まとめ

  • 車通勤で毎回プレイリストを作るのが面倒だったので、Spotify API を使って自動化してみた
  • テキストファイルにアーティスト名を書いておくだけで、
    • 各アーティストの最新アルバムの1曲目を集めたプレイリストが一瞬で作れる
  • Spotipy + 仮想環境+.env で、実装も比較的シンプル

通勤や作業のお供のプレイリスト作りに時間を取られている人には、かなりおすすめな小ネタだと思います。