PythonでSpotifyのAPIを使ってみたがPodcastの情報は扱えなかった

Oct 17, 2021 23:15 · 1764 words · 4 minute read Python Podcast

音楽だけではなくPodcastも聴くことができるSpotifyは、開発者向けのAPIを公開してくれています。
SpotifyのAPIでPodcastの情報を取得することができるのか試してみました。

目次

最初に結論

2021年10月16日時点では、開発者向けに公開されているSpotifyのAPIからPodcastのデータにアクセスすることはできないようでした。

以降に、確認した手順や調査した内容を記載します。

Spotify for Developersにアプリ情報を登録する

Spotify for Developersでログインし、アプリ情報を登録します。

Spotify for Developers Dashboard

「CREATE AN APP」をクリックします。

作成するアプリの情報を入力します。

アプリが作成されました。
「SHOW CLIENT SECRET」をクリックして、Client idとClient secretを確認します。
これらの値は、SpotifyのAPIにアクセスするときに使います。

動作検証

取得したClient idとClient secretでAPIを使ってみます。

今回はPython向けのライブラリ「Spotipy」を使いました。
2021年10月16日時点の最新版「2.19.0」をインストールします。

Welcome to Spotipy! — spotipy 2.0 documentation

$ pipenv install spotipy

問題なくインストールできたので、早速下記のコードで動作の確認をします。

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import sys
import pprint

client_id = {Spotify for Developersで取得したCLIENT ID}
client_secret = {Spotify for Developersで取得したCLIENT SECRET}
client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

result = sp.search('検索する文字')
pprint.pprint(result)

「Rebuild」という文字で検索した結果がこちら。
APIから情報を取得できています。

{'tracks': {'href': 'https://api.spotify.com/v1/search?query=Rebuild&type=track&offset=0&limit=10',
            'items': [{'album': {'album_type': 'album',
                                 'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/1i5HhzrkpHFFDpsUYdz2Fs'},
                                              'href': 'https://api.spotify.com/v1/artists/1i5HhzrkpHFFDpsUYdz2Fs',
                                              'id': '1i5HhzrkpHFFDpsUYdz2Fs',
                                              'name': 'Carrollton',
                                              'type': 'artist',
                                              'uri': 'spotify:artist:1i5HhzrkpHFFDpsUYdz2Fs'}],
{中略}
                       'duration_ms': 106146,
                       'explicit': False,
                       'external_ids': {'isrc': 'QM2PV1501531'},
                       'external_urls': {'spotify': 'https://open.spotify.com/track/6f6b4gMqP9qxCd3zwMXhVw'},
                       'href': 'https://api.spotify.com/v1/tracks/6f6b4gMqP9qxCd3zwMXhVw',
                       'id': '6f6b4gMqP9qxCd3zwMXhVw',
                       'is_local': False,
                       'name': "At Doom's Gate",
                       'popularity': 51,
                       'preview_url': 'https://p.scdn.co/mp3-preview/5ed71d6101cf6eeed3973e39e921cddab393f27b?cid=f3a8a2548cd3471e9f69ba0e3dfe995b',
                       'track_number': 1,
                       'type': 'track',
                       'uri': 'spotify:track:6f6b4gMqP9qxCd3zwMXhVw'}],
            'limit': 10,
            'next': 'https://api.spotify.com/v1/search?query=Rebuild&type=track&offset=10&limit=10',
            'offset': 0,
            'previous': None,
            'total': 5684}}

Podcastの情報を検索する

先程のサンプルコードでPodcastのエピソードを検索してみます。

今回検索したのは、こちらのエピソード。

318: Evergreen Todo List (naan) - Rebuild | Spotify でポッドキャスト

Episodeのタイトルで検索してみます。

結果は0件。

{'tracks': {'href': 'https://api.spotify.com/v1/search?query=318%3A+Evergreen+Todo+List+%28naan%29&type=track&offset=0&limit=10',
            'items': [],
            'limit': 10,
            'next': None,
            'offset': 0,
            'previous': None,
            'total': 0}}

「Ed Sheeran」のようなArtist名でも検索することができるので、Rebuildを公開している宮川さんお名前「Tatsuhiko Miyagawa」でも検索してみます。

やはり結果は0件

{'tracks': {'href': 'https://api.spotify.com/v1/search?query=Tatsuhiko+Miyagawa&type=track&offset=0&limit=10',
            'items': [],
            'limit': 10,
            'next': None,
            'offset': 0,
            'previous': None,
            'total': 0}}

「Tatsuhiko」や「Miyagawa」で検索しても、検索結果にRebuildの情報は無し。
APIの検索結果にはPodcastの情報は含まれていないようです。

Webアプリの検索機能を調べる

Spotify for Developersで提供されているAPIの検索機能では、PodcastのEpisode情報を取得することができませんでした。
しかし、同じEpisodeのタイトルをWebアプリで検索すると、検索結果にPodcastのEpisodeが表示されています。

Webアプリの挙動から、「Webアプリは何かしらのJavaScriptフレームワークで動いており、JavaScriptから検索APIを実行している」という推測ができます。

ということで、プロキシツールを使って通信内容を確認してみました。
その結果、Webアプリではhttps://api-partner.spotify.com/に対して検索リクエストを送信しており、こちらのAPIの検索結果にはPodcastのEpisode情報が含まれていることがわかりました。

「ではWebアプリと同じAPIを使って検索すればいいのでは?」と考えるところですが、こちらのAPIには「認証用の一時的なトークン」や「sha256Hashを使った不正利用検知機能」があるようです。
「勝手に使うんじゃないぞ!」という強い意思を感じますし、おそらく利用規約で禁じられているので、これ以上はやめておきましょう。

最後に

SpotifyのAPIを使ってみましたが、提供されているAPIではPodcastの情報は取得できないことがわかりました。

Podcastの情報もAPIから扱えるようにしてくれないかな・・・。

tweet Share