ターミナルからコマンドを使用し「iTunes Store」で購入した楽曲ファイルのみ抽出したい
現在「ミュージック」アプリの楽曲保存フォルダはiTunes Media>Musicとなっております。
このMusic以下の楽曲のうち、iTunes Storeで購入したもののみを抽出したいです。
タグなどから抽出できるのでしょうか?
(出力する際はフルパスがわかると助かります。)
Windows, Windows 11 (22631)
Apple の脅威の通知と金銭目当てのスパイウェアへの対策について
Apple の脅威の通知と金銭目当てのスパイウェアへの対策についてが公開されました。
Apple の脅威の通知と金銭目当てのスパイウェアへの対策についてが公開されました。
現在「ミュージック」アプリの楽曲保存フォルダはiTunes Media>Musicとなっております。
このMusic以下の楽曲のうち、iTunes Storeで購入したもののみを抽出したいです。
タグなどから抽出できるのでしょうか?
(出力する際はフルパスがわかると助かります。)
Windows, Windows 11 (22631)
こんな感じの JXA スクリプトでどうでしょうか?
ファイル名
purchased.applescript
コード
#!/usr/bin/osascript -l JavaScript
//
// usage: osascript -l JavaScript purchased.applescript
//
'use strict';
ObjC.import('iTunesLibrary');
function run() {
const err = $();
const library = $.ITLibrary.libraryWithAPIVersionError('1.0', err);
if (library.isNil()) {
throw new Error(`error: ${err.localizedDescription.js}`);
}
const purchased = library.allMediaItems.js.filter(i => /\u{8CFC}\u{5165}|Purchased/iu.test(i.kind.js));
const locations = purchased.map(x => x.location.path.js);
const sorted = $(locations).sortedArrayUsingSelector('localizedStandardCompare:');
return ObjC.deepUnwrap(sorted).join('\n');
}
# purchased が使えるはずなんですが何故か手元の環境では期待どおりの結果が得られないので、種類に「購入」または「Purchased」が含まれるか否かで判別しました。
まず、ファイルの保存についてですが、前掲のコードをテキストエディットなどのテキストエディタにコピペし、テキストエンコーディング: UTF-8、改行: LF、ファイル名: purchased.applescript で保存。その際、リッチテキストではなく、標準テキストで保存してください。
次に、実行方法。例えば purchased.applescript を ~/Desktop に置いた場合は Terminal から次のように実行します。
osascript -l JavaScript ~/Desktop/purchased.applescript
そうすると、ファイルのパスのリストが表示されます。(抽出はパスのみです)
mediainfo コマンドだったらこんな感じのシェルスクリプトでいけそうです。購入済みか否かは「PurchaseDate」情報の有無で判別しました。
なお、「${HOME}/Music/Music/Media.localized」 のところは適宜書き換える必要があります。
#!/bin/zsh
#
# usage: zsh purchased.sh
#
rootdir="${HOME}/Music/Music/Media.localized"
find "${rootdir}" -type f | while read f; do
purchasedate=$(mediainfo --Output='General;%PurchaseDate%' "${f}")
if [[ -n "${purchasedate}" ]]; then
echo "${f}"
fi
done
正しくはこちらになります。
抽出条件を「購入」にしたスマートプレイリストを作るとか。
ターミナルで抽出したいのです。
詳細なスクリプトありがとうございます。
大変心苦しいのですが、JXAスクリプトというものに馴染みがなく、
今回のスクリプトの実行方法や処理方法をお教えいただけないでしょうか…?
ん??
>Windows, Windows 11 (22631)
PCのOS/機種はこれであってますか?
>ターミナルで抽出したいのです。
Win11のターミナルって? PowerShell?? WSLのbash?? まさかのDOS窓?
まずはあなたの環境をちゃんとみんなに伝えないと。。。。
前掲のスクリプトは Parallels Desktop 上の macOS Ventura 13.6.4 で動作確認しました。Sonoma は未導入なので動くかどうか分かりません。(多分動くとは思うのですが...)
もし、ダメな場合は mediainfo CLI 版をインストールして、情報を取得するシェルスクリプトを書くと良いかもしれません。
無事やりたいことが実現できました。
このような素晴らしいプログラムを作成いただき、本当に感謝しかありません。
ありがとうございました。
ターミナルからコマンドを使用し「iTunes Store」で購入した楽曲ファイルのみ抽出したい