Savify は、選択したプロバイダー (デフォルトでは YouTube) から曲をダウンロードし、Spotify からメタ情報を取得する Python ライブラリです。クエリが与えられると、Savify は曲を検索し、最高320 kb/sの品質で MP3 形式にダウンロードします。また、アプリケーションはすべての曲にid3v2 タグをスクレイピングして書き込みます。タグには、タイトル、アーティスト、年、アルバム、さらにはカバーアートも含まれます。
Savify は、Spotify のすべてのトラック、アルバム、プレイリストのリンクをサポートしています。さらに、統合された検索機能があるため、Spotify リンクがない場合でも、曲名を入力するだけで Savify がダウンロードします。
mp3 だけでなく、Savify はダウンロードして他のファイル タイプに変換することもできます。アプリケーション内で、すべてのデバイス間で最大限の互換性を実現するために、曲をダウンロードする形式と品質を指定できます。利用可能な形式: mp3、aac、flac、m4a、opus、vorbis、wav。タグとカバーアートは、mp3 形式でダウンロードされた曲にのみ適用されます。
このライブラリは Spotify TOS にいかなる形でも違反していないことに注意してください。曲は Spotify から直接リッピングされるのではなく、youtube-dl Python ライブラリを使用して YouTube や Soundcloud などの他のソースからダウンロードされます。 Spotify は、ダウンロードされた曲ファイルに埋め込まれる正確なメタ情報を収集するためにのみ使用されます。
公式の Docker Hub イメージ リポジトリにアクセスし、最新の Docker イメージを取得します: https://hub.docker.com/repository/docker/laurencerawlings/savify
質問やフィードバックがある場合は、Discord サーバーに参加してください
Savify は、オープンソースの FFmpeg ライブラリを利用して、ダウンロードした曲にメタデータを変換して書き込みます。 FFmpeg がコンピュータにインストールされ、システム PATH に追加されていることを確認してください。ここのチュートリアルに従ってください。
Savify を使用して個人用 Spotify プレイリストをダウンロードする場合は、その公開設定が「パブリック」に設定されていることを確認してください。これは、Savify が Spotify API を使用してプレイリストから曲の詳細を取得できるようにするためです。
Windows を使用している場合は、事前にパックされた最新の実行可能パッケージをダウンロードできます (Savify API キーを提供する必要がないため、これをお勧めします)。または、Python ライブラリをダウンロードし、CLI を使用してモジュールを直接実行できます。
ここにアクセスして最新の Savify.exe をダウンロードし、次のものが揃っていることを確認してください。
FFmpegがダウンロードされ、パスに追加されました
Spotify API 認証情報が環境変数に追加されました
これで完了です。準備は完了です。以下の使用例を参照してください。
$ pip install -U savify
リポジトリのクローンを作成し、ルート ディレクトリにいることを確認します。次のビルドコマンドを実行します。
$ docker build -t savify:dev .
現在、Savify は Spotify URL と検索クエリのみをサポートしていますが、Spotify URI のサポートは将来追加される予定です。
リリース ページから最新の Savify.exe をダウンロードした場合は、ターミナルを開いてバイナリと同じディレクトリに移動し、次を実行できます。
$ Savify.exe
Python パッケージを使用していて、savify がサイト パッケージにインストールされており、pip フォルダーが PATH (デフォルトでそのはずです) にある場合は、どこからでも次のコマンドを実行できます。
$ savify
ヘルプを実行するには:
$ savify --help
上記のデフォルトを使用すると、次のようになります。
$ savify "https://open.spotify.com/track/4Dju9g4NCz0LDxwcjonSvI"
独自のオプションを指定する:
$ savify "https://open.spotify.com/track/4Dju9g4NCz0LDxwcjonSvI" -q best -f mp3 -o "/path/to/downloads" -g "%artist%/%album%"
検索クエリを使用する場合:
$ savify "You & I - Bru-C" -t track -q best -f mp3 -o "/path/to/downloads" -g "%artist%/%album%"
使用可能な変数: %artist%, %album%, %playlist%
例えば:
$ savify "You & I - Bru-C" -o /path/to/downloads -g "%artist%/%album%"
次のディレクトリ構造でダウンロードされます。
/パス/へ/ダウンロード | |- /Bru-C | |- /オリジナルサウンド | |- Bru-C - あなたと私.mp3
クエリの種類: | 追跡 |
---|---|
品質: | 最高 |
形式: | mp3 |
パス: | Windows: HOME/AppData/Roaming/Savify/ダウンロード Linux: HOME/.local/share/Savify/downloads MacOS: HOME/ライブラリ/アプリケーションサポート/Savify/ダウンロード |
グループ化: | グループ化なし |
その他の使用例については、ドキュメントを参照してください。
他のコンテナのネットワークに接続することもできるコンテナ内で savify を実行します。これは、savify の複数のインスタンスを実行する場合や、ダウンロードに VPN を使用する場合に便利です。独自に構築した Docker イメージまたは公式の Docker イメージを使用できます。必ず正しい Docker イメージ名とタグを使用してください。
$ docker run laurencerawlings/savify:latest
引数が指定されていない場合、コンテナはヘルプ ページを出力します。引数を追加するだけです。ダウンロードが永続的に行われるように、必ずホストからフォルダーをマウントしてください ( -v
) - pwd
現在のディレクトリをマウントするために使用されます - 完了したらコンテナーを削除します ( --rm
)。環境変数 ( -e
) を使用して、Spotify クライアント ID とシークレットを指定する必要があります。
$ docker run --rm -v "`pwd`:/root/.local/share/Savify/downloads" -e SPOTIPY_CLIENT_ID=クライアント_id -e SPOTIPY_CLIENT_SECRET=client_secret laurencerawlings/savify:latest "https://open.spotify.com/playlist/..."
ログを保存したい場合は、次の引数を docker run コマンドに追加するだけで、ログ ディレクトリをマウントできます: -v "./logs:/root/.local/share/Savify/logs"
シェルスクリプトで自動化します。
$ nano savify.sh
#!/bin/bashdocker run --rm -v "`pwd`:/root/.local/share/Savify/downloads" -e SPOTIPY_CLIENT_ID=クライアント_id -e SPOTIPY_CLIENT_SECRET=client_secret laurentrawlings/savify:最新の $1
次に、次のように実行します。
$ sh savify.sh "https://open.spotify.com/track/4Dju9g4NCz0LDxwcjonSvI"
また、スクリプトが接続できる VPN コンテナがあるかどうかを確認する VPN チェックが統合された Docker スクリプトを使用してクイックスタートするオプションもあります。このスクリプトは cron でスケジュールするのに最適です。
$ wget https://github.com/laurencerawlings/savify/latest/download/savify-docker-scripts.zip $ unzip savify-docker-scripts.zip && rm savify-docker-scripts.zip $ cd savify-docker-scripts/
次に、設定ファイルを好みのテキスト エディタ (nano を推奨します) で編集し、保存し (nano での変更を保存するには Ctrl + X、Y)、名前をconfig.sh
に変更する必要があります。
$ nano template.config.sh $ mv template.config.sh config.sh
その後、スクリプトを実行できます。
$ bash一括ダウンロード.sh
Savify Python モジュールを使用するには、API にアクセスするための独自の Spotify 開発者アプリケーションが必要です。これを行うには、ここからサインアップしてください。新しいアプリケーションを作成したら、クライアント ID とシークレットをメモしてください。次の 2 つの方法で ID とシークレットを Savify に渡すことができます。
次に、2 つの環境変数をシステムに追加する必要があります。
SPOTIPY_CLIENT_ID
SPOTIPY_CLIENT_SECRET
これを行う方法を調べるには、特定のオペレーティング システム用のオンライン チュートリアルを見つけてください。これを完了したら、必ずシェルを再起動してください。
Savify オブジェクトを作成するときに、タプルを使用して ID とシークレットを渡すことができます。
s = Savify(api_credentials=("CLIENT_ID","CLIENT_SECRET"))
パッケージを環境にインストールします。
$ pip install savify
Savify をインポートして使用します。
from savify import Savifyfrom savify.types import タイプ、形式、品質 = Savify()# Spotify URLs.download("SPOTIFY URL")# 検索クエリ# タイプ: TRACK、ALBUM、PLAYLISTs.download("QUERY"、query_type=Type.追跡)
オプションのコンストラクター引数を節約します (デフォルトについては上記を参照)。
インポートログ savify からインポート Savify savify.types からインポート タイプ、形式、品質 savify.utils から PathHolder をインポート # 品質オプション: WORST、Q32K、Q96K、Q128K、Q192K、Q256K、Q320K、BEST # 形式オプション: MP3、AAC、FLAC、M4A、OPUS、VORBIS、WAV Savify(api_credentials=None、quality=Quality.BEST、download_format=Format.MP3、path_holder=PathHolder(downloads_path='path/for/downloads')、group='%artist%/%album%'、quiet=False、skip_cover_art =False、log_level=logging.INFO)
youtube-dl オプションを手動でカスタマイズする:
from savify import Savifyoptions = {'cookiefile': 'cookies.txt'}Savify(ydl_options=options)
独自のロガーを渡します。
from savify import Savifyfrom savify.logger import Loggerlogger = Logger(log_location='path/for/logs', log_level=None) # サイレント出力Savify(logger=logger)
group 引数は、出力パス内でダウンロードした曲を並べ替えるために使用されます。パス文字列に使用できる変数は、%artist%、%album%、および %playlist% です。変数は曲のメタデータに置き換えられます。たとえば、上記の Savify オブジェクトでダウンロードされた曲は、次のようなパスに保存されます: path/for/downloads/Example Artist/Example Album/Example Song.mp3
Savify への追加を試してみたい場合は、ここの手順を使用してください。そこから、Savify をより良くすると思われる追加を行うことができます。
Savify を開発している場合は、pip パッケージをローカルにインストールして、変更を加えてテストできるようにします。ルート ディレクトリから次を実行します。
$ pip install -e .
その後、Python モジュールを実行できます。
$ savify
このパッケージは、Cookiecutter と audreyr/cookiecutter-pypackage プロジェクト テンプレートを使用して作成されました。