Skip to content
sho10case
Go back

radikoの次はこれ!Spotify APIで「自分専用の音楽環境」を自動化・アプリ化する(Python & Kotlin)

こんにちは、ショウです!

以前、radiko API を使用してラジオを聴く方法をご紹介しましたが、覚えていらっしゃいますでしょうか?「音を制御する」というエンジニアならではの遊びは、一度ハマると奥が深いものです。

radiko で「非公式 API の面白さ」を体験した方に次にお勧めしたいのが、世界最大の音楽プラットフォーム 「Spotify API」 の活用です。

Spotify は公式 API が非常に充実しており、標準的な OAuth 2.0 認証を学ぶのにも最適です。今回は、Python による自動化と Kotlin による Android アプリ連携の両面から、Spotify API をハックする楽しさをお伝えします!


1. Spotify API の難所「認証(OAuth 2.0)」を攻略する

Spotify API を使う上で、多くの人が最初に躓くのが OAuth 2.0 による認証です。radiko の独自認証とは異なり、標準的ですが手順が少し複雑です。

事前準備:Developer Dashboard での登録

  1. Spotify for Developers にログイン。
  2. 「Create App」からアプリを登録し、Client IDClient Secret を取得。
  3. Redirect URI を設定(例:http://localhost:8888/callback)。ここがコードと一致していないとエラーになるので注意です。

2. 【Python編】自動化スクリプトで再生履歴を操る

バックエンドでデータを処理したり、定期実行したりする場合は Python が最強です。ライブラリ spotipy を使えば、複雑な認証フローを数行で記述できます。

再生履歴を取得するサンプルコード

以下のスクリプトは、最近聴いた 5 曲をターミナルに表示します。

import spotipy
from spotipy.oauth2 import SpotifyOAuth

# 認証設定
sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
    redirect_uri="http://localhost:8888/callback",
    scope="user-read-recently-played"
))

print("--- 最近聴いた曲 ---")
results = sp.current_user_recently_played(limit=5)
for i, item in enumerate(results['items']):
    track = item['track']
    print(f"{i+1}: {track['name']} / {track['artists'][0]['name']}")

「今日聴いた曲を自動でログに残す」「特定の条件でプレイリストを自動生成する」といったツールが、これだけで作れてしまいます。


3. 【Kotlin編】Android アプリに「自分専用リモコン」を組み込む

Android エンジニアなら、アプリから直接 Spotify をコントロールしたいですよね。公式の Spotify Auth SDKApp Remote SDK を組み合わせることで、シームレスな連携が可能になります。

① AndroidManifest.xml の設定

Android では、認証後にブラウザからアプリへ戻ってくるための「カスタムスキーム」を定義する必要があります。

<activity android:name="com.spotify.sdk.android.auth.AuthorizationReceiverActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Redirect URI と一致させる -->
        <data android:scheme="sho10case" android:host="callback" />
    </intent-filter>
</activity>

② 認証リクエストと結果の受け取り

最新の Kotlin 開発では、ActivityResultLauncher を使ってスマートに結果を受け取ります。

// 認証リクエストの作成
val request = AuthorizationRequest.Builder(
    CLIENT_ID, 
    AuthorizationResponse.Type.TOKEN, 
    "sho10case://callback"
).apply {
    setScopes(arrayOf("user-read-playback-state", "user-modify-playback-state"))
}.build()

// 認証画面の起動
AuthorizationClient.openLoginActivity(this, REQUEST_CODE, request)

// 結果のハンドリング(onActivityResult 等で)
val response = AuthorizationClient.getResponse(resultCode, data)
when (response.type) {
    AuthorizationResponse.Type.TOKEN -> {
        // アクセストークン取得成功!これを API 実行に使用します
        val token = response.accessToken
    }
    AuthorizationResponse.Type.ERROR -> { /* エラー処理 */ }
    else -> { /* 中断など */ }
}

③ App Remote による再生制御

トークンを取得できたら、App Remote SDK で Spotify アプリ本体を操作できます。

// App Remote SDK での接続例
SpotifyAppRemote.connect(context, connectionParams, object : Connector.ConnectionListener {
    override fun onConnected(appRemote: SpotifyAppRemote) {
        // 特定のプレイリストを再生開始
        appRemote.playerApi.play("spotify:playlist:37i9dQZF1DX2sUQpS0tGqi")
    }
    override fun onFailure(throwable: Throwable) { /* 接続失敗時の処理 */ }
})

スマホを振ったら曲をスキップする、タイマー終了に合わせてお気に入りの曲を流す、といった「自分専用の音楽体験」が実現できます。


4. エンジニアならではの応用アイデア

API を使いこなせれば、アイデアは無限に広がります。

  • アプリ連動: 自作のアプリ と連動し、インターバル中に BGM のテンポを自動で上げる。
  • スポーツ観戦連動: お気に入りチーム(NBA 等)が得点した瞬間だけ、特定の効果音や曲を流す。
  • サーバーレス化: Python スクリプトを Go に移植し、Cloud Run 等で「毎日のおすすめ曲」を自分宛に LINE 通知する。

まとめ:公式ドキュメントを「ハック」する楽しさ

radiko が「解析」の面白さだったのに対し、Spotify は 「公式ドキュメントを読み解き、いかに型安全で堅牢なコードに落とし込むか」 という、プロフェッショナルな開発の醍醐味を味わえます。

音楽体験を自分の手で作り変えるのは、エンジニアにとって最高に贅沢な遊びです。ぜひ皆さんも、自分だけの音楽環境を構築してみてください!


あわせて読みたい記事:



Related Posts