【Python】Spotifyを利用してMP3をダウンロードする方法

【Python】Spotifyを利用してMP3をダウンロードする方法 ツール

「Spotifyで確認できる音楽をダウンロードしたい」
「怪しいサイトを使わずにP3ファイルをダウンロードしたい」
「spotDLのインストールに失敗してしまう・・・」

このような場合には、spotify_dlがオススメです。
この記事では、spotify_dlのインストールについて解説しています。

本記事の内容

  • spotify_dlとは?
  • spotify_dlのシステム要件
  • spotify_dlのインストール
  • spotify_dlの動作確認

それでは、上記に沿って解説していきます。

spotify_dlとは?

spotify_dlは、Spotifyから曲をダウンロードするためのコマンドラインツールです。
Pythonのライブラリとして提供されています。

ただし、勘違いしてはいけないことがあります。
spotify_dlは、Spotifyから楽曲をダウンロードするわけではないことです。

SpotifyのAPIからは、メタデータを取得しているだけです。
そして、そのメタデータをもとにYouTubeから該当する楽曲をダウンロードしています。

つまり、spotify_dlはYouTubeから音声をダウンロードしているのです。
その際に、yt-dlpをspotify_dlは利用しています。

yt-dlpについては、次の記事で説明しています。

以上、spotify_dlについて説明しました。
次は、spotify_dlのシステム要件を説明します。

spotify_dlのシステム要件

現時点(2022年7月末)でのspotify_dlの最新バージョンは、8.3.0となります。
この最新バージョンは、2022年4月20日にリリースされています。

サポートOSに関しては、以下を含むクロスプラットフォーム対応です。

  • Windows
  • macOS
  • Linux

サポート対象となるPythonのバージョンは、以下となっています。

  • Python 3.6
  • Python 3.7
  • Python 3.8
  • Python 3.9
  • Python 3.10

一応、以下のPython公式開発サイクルに準拠してはいます。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

ただし、Python 3.6は2021年末でサポート期限が切れています。
そのため、ここではPython 3.7を推奨しておきます。

以上、spotify_dlのシステム要件を説明しました。
次は、spotify_dlのインストールを説明します。

spotify_dlのインストール

検証は、次のバージョンのPythonで行います。

$ python -V
Python 3.10.2

spotify_dlのインストールの際は、Pythonの仮想環境を利用することを推奨します。
理由は、spotify_dlの依存するパッケージ数が多いからです。

Python仮想環境については、次の記事で解説しています。

まずは、現状のインストール済みパッケージを確認しておきます。

$ pip list
Package    Version
---------- -------
pip        22.2
setuptools 63.2.0
wheel      0.36.2

次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。

python -m pip install --upgrade pip setuptools

では、spotify_dlのインストールです。
spotify_dlのインストールは、以下のコマンドとなります。

pip install spotify-dl

spotify_dlのインストールには、少し時間がかかります。
終了したら、どんなパッケージがインストールされたのかを確認します。

$ pip list
Package            Version
------------------ ---------
Brotli             1.0.9
certifi            2022.6.15
charset-normalizer 2.1.0
commonmark         0.9.1
idna               3.3
mutagen            1.45.1
pip                22.2
pycryptodomex      3.15.0
Pygments           2.12.0
requests           2.28.1
rich               12.0.1
sentry-sdk         1.5.12
setuptools         63.2.0
six                1.16.0
spotify-dl         8.3.0
spotipy            2.19.0
urllib3            1.26.11
websockets         10.3
wheel              0.36.2
yt-dlp             2022.7.18

spotify_dlが多くのパッケージに依存していることを確認できます。
だからこそ、Python仮想環境の利用を推奨しています。

以上、spotify_dlのインストールを説明しました。
次は、spotify_dlの動作確認を説明します。

spotify_dlの動作確認

spotify_dlの動作確認には、Spotify Web APIの認証情報が必要です。
Spotify Web APIにおける認証情報については、次の記事で説明しています。

上記記事を参考にして、次の情報を用意します。

  • Client ID
  • Client Secret

そして、これらの認証情報を環境変数に設定する必要があります。
各環境での設定方法は、以下となります。

Linux:
export SPOTIPY_CLIENT_ID='your-spotify-client-id'
export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret'

Windows Powershell:
$env:SPOTIPY_CLIENT_ID='your-spotify-client-id'
$env:SPOTIPY_CLIENT_SECRET='your-spotify-client-secret'

Windows CMD:
set SPOTIPY_CLIENT_ID='your-spotify-client-id'
set SPOTIPY_CLIENT_SECRET='your-spotify-client-secret'

環境変数に設定ができたら、次のコマンドで楽曲をダウンロードできます。

spotify_dl -l SpotyfyのURL -o 保存先ディレクトリ

今回は、アルバムを対象にしてダウンロードしてみましょう。
別にアルバムだけというわけではなく、楽曲、プレイリストでも構いません。

ダウンロード対象となるアルバムのURLは、以下。
https://open.spotify.com/album/3dHpUUUw783S8gByoLIXMN

このアルバムには、2曲の楽曲が含まれています。
よって、結果的には2曲をダウンロードすることになります。

実際に実行した結果は、以下。
「tmp」ディレクトリにダウンロードしたファイルを保存するように指定しています。

$ spotify_dl -l https://open.spotify.com/album/3dHpUUUw783S8gByoLIXMN -o ./tmp
[19:00:40] Starting spotify_dl v8.3.0                                                                                                                    spotify_dl.py:68
Saving songs to 口笛 directory
Fetched 2 of 2 songs from the album 口笛 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
[download] Downloading playlist: Mr.Children - 口笛 Lyrics
[youtube:search] query "Mr.Children - 口笛 Lyrics": Downloading web client config
[youtube:search] query "Mr.Children - 口笛 Lyrics" page 1: Downloading API JSON
[youtube:search] Playlist Mr.Children - 口笛 Lyrics: Downloading 1 videos of 1
[download] Downloading video 1 of 1
[youtube] Qxxvqbk7dik: Downloading webpage
[youtube] Qxxvqbk7dik: Downloading android player API JSON
[info] Qxxvqbk7dik: Downloading 1 format(s): 251
[download] Destination: tmp/口笛/Mr.Children - 口笛.webm
[download] 100% of 5.77MiB in 00:00
[SponsorBlock] Fetching SponsorBlock segments
[SponsorBlock] No segments were found in the SponsorBlock database
[ModifyChapters] SponsorBlock information is unavailable
[ExtractAudio] Destination: tmp/口笛/Mr.Children - 口笛.mp3
Deleting original file tmp/口笛/Mr.Children - 口笛.webm (pass -k to keep)
[download] Finished downloading playlist: Mr.Children - 口笛 Lyrics
[download] Downloading playlist: Mr.Children - Heavenly kiss Lyrics
[youtube:search] query "Mr.Children - Heavenly kiss Lyrics": Downloading web client config
[youtube:search] query "Mr.Children - Heavenly kiss Lyrics" page 1: Downloading API JSON
[youtube:search] Playlist Mr.Children - Heavenly kiss Lyrics: Downloading 1 videos of 1
[download] Downloading video 1 of 1
[youtube] aETzztW9kmU: Downloading webpage
[youtube] aETzztW9kmU: Downloading android player API JSON
[info] aETzztW9kmU: Downloading 1 format(s): 251
[download] Destination: tmp/口笛/Mr.Children - Heavenly kiss.webm
[download] 100% of 5.64MiB in 00:00
[SponsorBlock] Fetching SponsorBlock segments
[SponsorBlock] No segments were found in the SponsorBlock database
[ModifyChapters] SponsorBlock information is unavailable
[ExtractAudio] Destination: tmp/口笛/Mr.Children - Heavenly kiss.mp3
Deleting original file tmp/口笛/Mr.Children - Heavenly kiss.webm (pass -k to keep)
[download] Finished downloading playlist: Mr.Children - Heavenly kiss Lyrics

2曲分のダウンロードが終わりました。
「tmp」の中身を確認。

$ tree ./tmp/
./tmp/
└── 口笛
    ├── Mr.Children - Heavenly kiss.mp3
    ├── Mr.Children - 口笛.mp3
    └── downloaded_songs.txt

1 directory, 3 files

アルバム名「口笛」でディレクトリが作成されています。
その「口笛」ディレクトリの中に、音声ファイルを確認できます。

音声ファイル以外に、「downloaded_songs.txt」があります。
このファイルの内容は、以下となります。

$ cat ./tmp/口笛/downloaded_songs.txt 
youtube Qxxvqbk7dik
youtube aETzztW9kmU

このファイルには、YouTube上の動画IDが記載されています。
それぞれの楽曲は、以下のURLからダウンロードしているということですね。

口笛
https://www.youtube.com/watch?v=Qxxvqbk7dik

Heavenly Kiss
https://www.youtube.com/watch?v=aETzztW9kmU

Spotify上から音声(動画)をダウンロードしているわけではありません。
あくまで、Spotify上ではダウンロードする対象を選ぶだけです。

そのことが、「downloaded_songs.txt」を見ると再確認できます。
また、アルバム以外では、楽曲、プレイリストもダウンロードを確認できました。

以上、spotify_dlの動作確認を説明しました。

タイトルとURLをコピーしました