見出し画像

超高画質のアルバムジャケット画像(アルバムアート)を、アーティスト単位で、ごっそり手に入れる方法

あなたは高画質のアルバムアートが欲しい時、どんな方法で探しますか?
シンプルにGoogleで画像検索でしょうか?
私も以前はそうでしたが、ハズレも多かったりして、けっこうめんどくさかったです。

最近になって Apple が超高画質のアルバムアートを持っていることに気づきました。

アーティスト次第・アルバム次第ではありますけど、Appleが持っているのは、最大だと 3000x3000という特大サイズです。
3000x3000なら画像もめちゃめちゃキレイ。PCの壁紙にしてもいいくらいです。
たまに600x600が最大というのもありますけど、1400x1400以上が当たり前で、3000x3000も決して珍しくはないんです。

それで、ここしばらくは、Apple Music のサイトを開き、アルバム表示して、ブラウザのソース表示機能を使って画像のURLを抜き出し、その画像を表示させてから保存・・・というスタイルに変わりました。
これなら画像のクオリティーは文句無しです。
とは言え、これもなかなかめんどくさい (汗)

と、不便を感じていたところ、ついに iTunes APIという仕組み(無料で使える公式のデータ提供の仕組み)を使えば、チマチマ調べなくても、アーティスト単位でサクッとまとめて教えてもらえる・・・というところにたどり着きました。

画像のURLがまとめて取得できるなら、自動でまとめてダウンロードすることもできるんじゃないの?
と思い立ち、Windows用の Power Automate Desktopという無料のアプリを使って、高画質のアルバムアートを自動で集める仕組みを作ったのです。

アーティスト名を入力して、ポチポチっとするだけで、あとは放ったらかし。そのアーティストのアルバム(シングル・EP含む)をPower Automate が全部引っ張り出してきて、入手可能な最大サイズで次から次へとダウンロード・・・ということまでできるようになりました。

そのレシピをここで大公開します。

図解入りで超わかりやすく説明しますので、一度も Power Automate を使ったことがない人でも大丈夫です。
Power Automate の起動ができ、その後 Microsoftアカウントでサインインさえできれば十分です。
ここまでできる人なら、私がお渡しするレシピを Power Automate にコピペし、一部だけ書き換えすれば、すぐに使えるようになります。


Windows 11なら最初から含まれているため、「Power Automate」という名前で、スタート画面の検索窓から検索して起動できると思います。
インストールされてないPCの方は、マイクロソフトのストアで、Power Automate を検索してください。

「マイクロソフトのストアって何?」「検索ってどうやるの?」のようにこの時点ですでに難しい方、あるいはMacだからどうしようもない方は、Chromeの拡張機能もありますので、そちらをご利用ください。
(但し、「アーティスト単位でまとめてダウンロード」ができるのはこちらだけです。)
Power Automate版:まとめてダウンロード可能。アーティスト名検索のみ。
Chrome拡張機能版:画像を確認しながら一つ一つダウンロード。アーティスト名検索とアルバム名検索の両方が可能。正方形の切り出し機能付き。
Chrome拡張機能版の入手はこちらから



1. 導入手順

Power Automate を起動して、Microsoftアカウントでサインインすると以下のような画面になっていると思いますので、この状態から説明します。

色々なことを自動化できる便利なツールですが、動作は「もっさり」なので、サクサク動くことは期待しないでお使いください。

まず、以下のように新しいフローを作成します。フローを作るというより「フローを入れる箱を準備する」のように考えてください。

フローの意味は後でわかるのでまずはこの通りに

作成ボタンをクリックしたあと少し待つと、以下のような画面が出てきます。難しい箇所は全部無視でOKです。


以下がコピペするコード(レシピ)になります。
黒いエリアの中にマウスをもっていくと「右上の隅」にコピーボタンが現れるので、クリックしてコピーしてください。

**REGION ユーザー設定のエリア:ダウンロードするフォルダの設定は必須です。その他はお好みで変更してください。
/# 設定① 以下の「変数の設定」項目で、「downloadFolderPath」 に ダウンロードするフォルダのパス(場所のこと)を設定してください
例) C:\\Users\\あなたのPC上のユーザー名\\Downloads (値の入力欄のみ変更)#/
SET downloadFolderPath TO $'''C:\\Users\\あなたのPC上のユーザー名\\Downloads'''
/# 設定② 以下の「変数の設定」項目で、希望の解像度 「resolution」 を変更可能です。(値の入力欄に半角の数字)設定値を3000にしておくと、最大サイズのリクエストになります。3000のものがあれば3000がダウンロードでき、ない場合は一番大きいサイズでダウンロードされます。
#/
SET resolution TO 600
# 設定③ ベテランアーティストでなければ、以下の「変数の設定」項目で、取得件数の上限 「limit」 の値は100ぐらいでもいいかもしれません。減らせばその分早く終わります。上限は200件分なで200より多くすることはできません。
SET limit TO 20
**ENDREGION
Display.InputDialog Title: $'''アーティスト名を入力してください''' Message: $'''日本人の場合は、姓と名の間に半角スペースを入れた方が、より多くヒットします。(但し、例外もあります)''' InputType: Display.InputType.SingleLine IsTopMost: True UserInput=> UserInput ButtonPressed=> ButtonPressed
IF IsNotEmpty(UserInput) THEN
    Text.Replace Text: UserInput TextToFind: $'''[\\\\/:\\*\\?\\\"<>\\|]''' IsRegEx: True IgnoreCase: False ReplaceWith: $'''_''' ActivateEscapeSequences: False Result=> folderName
    IF (Folder.IfFolderExists.DoesNotExist Path: $'''%downloadFolderPath%\\%folderName%''') THEN
        Folder.Create FolderPath: downloadFolderPath FolderName: folderName Folder=> NewFolder
    END
    SET dataBase TO ['日本のデータベースで検索', 'アメリカのデータベースで検索']
    Display.SelectFromListDialog.SelectFromList Title: $'''データベース選択''' Message: $'''選択してください''' List: dataBase IsTopMost: True AllowEmpty: False SelectedItem=> SelectedItem SelectedIndex=> SelectedIndex ButtonPressed=> ButtonPressed3
    Variables.CreateNewDatatable InputTable: { ^['AlbumName', 'ArtUrl'], [$'''''', $''''''] } DataTable=> AlbumList
    Variables.DeleteRowFromDataTable DataTable: AlbumList RowIndex: 0
    IF Contains(SelectedItem, $'''日本''', False) THEN
        Web.InvokeWebService.InvokeWebService Url: $'''https://itunes.apple.com/search?term=%UserInput%&country=JP&media=music&entity=album&attribute=artistTerm&limit=%limit%''' Method: Web.Method.Get Accept: $'''application/json''' ContentType: $'''application/json''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False FailOnErrorStatus: False EncodeRequestBody: True UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False TrimRequestBody: True ResponseHeaders=> WebServiceResponseHeaders Response=> WebServiceResponse StatusCode=> StatusCode
    ELSE IF Contains(SelectedItem, $'''アメリカ''', False) THEN
        Web.InvokeWebService.InvokeWebService Url: $'''https://itunes.apple.com/search?term=%UserInput%&country=US&media=music&entity=album&attribute=artistTerm&limit=%limit%''' Method: Web.Method.Get Accept: $'''application/json''' ContentType: $'''application/json''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False FailOnErrorStatus: False EncodeRequestBody: True UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False TrimRequestBody: True ResponseHeaders=> WebServiceResponseHeaders Response=> WebServiceResponse StatusCode=> StatusCode
    END
    IF IsNotEmpty(WebServiceResponse) THEN
        Variables.ConvertJsonToCustomObject Json: WebServiceResponse CustomObject=> JsonAsCustomObject
        IF IsNotEmpty(JsonAsCustomObject) THEN
            LOOP FOREACH CurrentItem IN JsonAsCustomObject.results
                # 大量のリストから無関係なアルバムを取り除く作業をしています。
                Text.Replace Text: UserInput TextToFind: $'''%' '%''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''%''%''' ActivateEscapeSequences: False Result=> ReplacedName
                IF Contains(CurrentItem.artistName, UserInput, True) THEN
                    Variables.AddRowToDataTable.AppendRowToDataTable DataTable: AlbumList RowToAdd: [CurrentItem.collectionName, CurrentItem.artworkUrl100]
                ELSE IF Contains(CurrentItem.artistName, ReplacedName, True) THEN
                    Variables.AddRowToDataTable.AppendRowToDataTable DataTable: AlbumList RowToAdd: [CurrentItem.collectionName, CurrentItem.artworkUrl100]
                END
            END
            IF IsNotEmpty(AlbumList) THEN
                LOOP FOREACH CurrentRow IN AlbumList
                    Text.Replace Text: CurrentRow['ArtUrl'] TextToFind: $'''100x100''' IsRegEx: False IgnoreCase: False ReplaceWith: $'''%resolution%x%resolution%''' ActivateEscapeSequences: False Result=> imgUrl
                    SET albumTitle TO CurrentRow['albumName']
                    Text.Replace Text: albumTitle TextToFind: $'''[\\\\/:\\*\\?\\\"<>\\|]''' IsRegEx: True IgnoreCase: False ReplaceWith: $'''_''' ActivateEscapeSequences: False Result=> fileName
                    Web.DownloadFromWeb.DownloadToFile Url: imgUrl FilePath: $'''%downloadFolderPath%\\%folderName%\\%fileName%.jpg''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False DownloadedFile=> DownloadedFile
                    Web.DownloadFromWeb.DownloadToFile Url: imgUrl FilePath: $'''%downloadFolderPath%\\%folderName%\\%fileName%.jpg''' ConnectionTimeout: 30 FollowRedirection: True ClearCookies: False UserAgent: $'''Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.21) Gecko/20100312 Firefox/3.6''' Encoding: Web.Encoding.AutoDetect AcceptUntrustedCertificates: False DownloadedFile=> DownloadedFile
                    WAIT 5
                    # 待機中です。短時間で大量のリクエストを送ると制限を受けるため、ゆっくりにしています。他のことをしながら気長にお待ちください。
                END
                Display.ShowMessageDialog.ShowMessage Title: $'''ダウンロード終了''' Message: $'''結果があまりに少ない場合、以下をご確認ください。
例1: スガシカオ(一部だけヒットします) スガ シカオ(ヒットします)
例2: 福山雅治(一部だけヒットします) 福山 雅治(ヒットします)
''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed6
            ELSE
                Display.ShowMessageDialog.ShowMessage Title: $'''アルバムが見つかりませんでした''' Message: $'''%UserInput%がアーティスト名として登録されているアルバムがピックアップできませんでした。
アーティスト名の表記や、国の指定が適切かご確認ください。''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed5
            END
        ELSE
            Display.ShowMessageDialog.ShowMessage Title: $'''アルバムが見つかりませんでした''' Message: $'''以下のような可能性はありませんか?
例1: ワン・オクロック(ヒットしません) ONE OK ROCK(ヒットします)
例2: ミセス・グリーン・アップル(ヒットしません) Mrs. Green Apple(ヒットします)
例3: テイラー・スイフト(ヒットしません) テイラー・スウィフト(ヒットします)''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True ButtonPressed=> ButtonPressed4
        END
    ELSE
        Display.ShowMessageDialog.ShowMessage Title: $'''エラー''' Message: $'''iTunes APIからのレスポンスが取得できませんでした。''' Icon: Display.Icon.None Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False ButtonPressed=> ButtonPressed2
    END
END


コピーを取ったら、またPower Automateの画面に戻ります。
「画面中央の白いエリア」を右クリックするとメニューが出てくるので、「貼り付け」を選んでクリックします。

コードを貼り付けるだけで、以下のようなフローチャートに自動変換されます。

この時点でほぼ完成、あともう少しです。

フローの一番上のあたりは、ユーザー設定のエリアになっているので、あなたが画像を保存したいフォルダをここで設定します。

ダウンロードした画像をどこに保存するか決めたら、ファイルエクスプローラーでそのフォルダを一旦開いて下さい。
そして、そのフォルダパスを取得します。

フォルダパスとは、PC内でのフォルダの位置関係を表した住所のようなものです。フォルダパスを使って、PCに「ここに保存して」と指示を出すのです。
よくわからなくても以下の通りやればOKです。
すでにフォルダパスの取得方法をわかっておられる方は、必ずしもこの通りにする必要はありません。
既存のフォルダにするのか、新たなフォルダを作成するのかは自由です。

フォルダパスの取得方法は以下のとおりです。

これでC:¥Users¥ユーザー名¥Downloads のようなフォルダパスがコピーされます

フォルダパスをコピーしたら、また Power Automate の画面に戻ります。
以下のようにして、設定を書き換えてください。

これだけでとりあえず動作はするようになります。
最初は、少量(20枚以内)の小さな画像(600x600)で動作テストして頂きたいので、他の設定項目はまだ触れないでください。

とりあえず、一旦は保存しておきましょう。


2. 動作テスト

ダウンロードの保存先が設定できたら、まずは動作テストしてみてください。

おおまかな動作の流れ
1. スタート(フローの「実行」をクリック)
2. アーティスト名入力
3. 日本のデータで検索するか、アメリカのデータで検索するかを選択
--- これ以降は自動 ---
4. iTunes APIで検索実行
5. 集まったデータから無関係なものを除外したリストを作成
6. リストを元に順番にダウンロード実行

この3ステップで動き出します。
エラーが発生してなければ終わるまで放置してください。

エラーが出る場合は、エラーの内容を確認してください。
基本的には、保存先のパスを間違わない限り、正常に動作するはずです。

動作が終了したら、指定した保存先のフォルダを確認してみてください。
そこにアーティスト名のフォルダができあがっていて、その中に画像が保存されているはずです。


3. 通常運用

無事動作が確認できたら、以下の設定値をお好みに変えて通常運用に入ってください。

設定値を変更する際は、保存先を設定した時と同様に、ダブルクリックで編集可能になります。
この設定に使えるのは半角数字のみです。3000にカンマを入れて3,000にするのもNGです。

a) 解像度の設定は最大で 3000 まで
3000の場合、3000x3000のサイズが入手可能ですが、全てのアルバムで3000x3000の画像が用意されているわけではありません。
例えば、提供画像が最大で1400x1400しかないような場合は、3000の設定であったとしても、1400x1400のサイズでダウンロードされます。
設定値が1500の時でも同様で、提供画像が最大1000x1000のアルバムなら、1000x1000のサイズでダウンロードされます。
ダウンロードされた画像が設定値より小さいサイズだったなら、提供画像の最大がそこまでだったとお考えください。

b) 何件取得するかの設定は最大で 200 まで
若手であれば50~100で十分かもしれませんが、ベテランアーティストなら、シングルやEPまで含めると100を余裕で超えたりするので、その場合は上限200ぐらいの方がいいかもしれません。
考えるのが面倒なら200一択です。実行したら放置が基本なので、所要時間が長くなったところで大した問題ではありません。

設定を変更したら保存をお忘れなく。

動作テストOKだったのに、これらの設定を変えてからおかしくなった・・・という時は、入力した値に問題がないか確認してください。


4. Power Automate を「改めて起動した時」の操作方法

一覧から直接実行する場合、フローの準備中には大きな変化がないため、遅さが際立って感じるかもしれません。


5. アーティスト名の入力時に気をつけること

検索は「一部の一致」でもヒットしますが、それがありふれたキーワードだと欲しくないものもたくさん拾い上げてしまうことになります。
もしアーティスト名の中に他にない特徴的な部分があれば、一部の一致でも確実にヒットさせられます。
例えば 「Official髭男dism」を指定したい場合です。
「髭男」を含むアーティストは他にいないと思いますので、「髭男」と入力するだけで確実にヒットさせることができます。
アルファベットと漢字を混合で入力するのも面倒ですし、ややこしい名前はタイプミスの原因になったりしますので、合理的な検索方法を模索していただければと思います。

半角スペースの有無による結果の違い(日本人のみ)

「姓(半角スペース)名」のようにして検索した場合、「姓名」「姓(半角スペース)名」の両方が検索結果に含まれます。

  • スガシカオ(一部だけヒットします)

  • スガ シカオ(全てヒットします)

  • 福山雅治(一部だけヒットします)

  • 福山 雅治(全てヒットします)

このように、「姓(半角スペース)名」で検索した時は「姓名」の場合も含み、「姓名」で検索した時は「姓(半角スペース)名」は含まれません。
普通に考えれば「姓(半角スペース)名」で検索した方が(どちらのパターンも含むので)必ず多くなるはずなのですが、例外もあります。
以下はスペースを空けないほうがいいという例外パターンです

  • 山下達郎(全てヒットします)

  • 山下 達郎(なぜか約7割しかヒットしません)


表記違いについて

  • ワン・オクロック(正式名称でないためヒットしません)

  • ONE OK ROCK(ヒットします)

  • ミセス・グリーン・アップル(正式名称でないためヒットしません)

  • Mrs. Green Apple(ヒットします)

  • テイラー・スイフト(ヒットしません)

  • テイラー・スウィフト(ヒットします)

このようになる理由
実は、iTunes API 自体は、 ワン・オクロックでもミセス・グリーン・アップルでもテイラー・スイフトでも、ちゃんとヒットするんですが、上限数の指定が200だった場合には「無関係なものまでごちゃ混ぜで200件返ってくる」という仕様になってます。
「100件しか見つかりませんでした」と返ってくるならいいんですが、無理やり200にしてくるんです。
だからといって、アーティストごとに上限を設定するのは面倒だし、そもそも何件が適切かもわかりません。
なので、無関係なアーティストのアルバムが混ざらないようにするために、表記が違うものは排除してからダウンロードする仕組みにしています。

検索がうまくいかない時(あるはずのアルバムが出てこない時)

  • 名前の一部にするなど変化を加えて検索してみてください。

  • 外国人アーティストをカタカナで検索してヒットしない場合は、英語表記(スペルに注意)でアメリカのデータで検索してみてもいいです。

  • Apple Music ( https://music.apple.com/jp/home ) で検索し「正式名称」がどうなっているかを確かめてみてください。Apple Music は多少の表記違いでも正解に導いてくれます。そして最後に「データとして登録されている表記」が出てきます。

  • 仕様違いのChrome拡張機能版もありますので、こちらを使って「アルバム名」で検索してみてください。

ここまでやってダメな場合、アルバム自体は存在したとしても、データベース上にはないのかもしれません。


6. 利用上の注意

この方法で集め放題にはなるんですが、だからといって使いすぎると、iTunes API に余計な負担をかけることになります。
Appleさんに迷惑をかけないように、ダウンロードの間隔は意図的に遅くしてますので、間違ってもそれを改変して早くしようとはしないでください。
(頻繁に使われるならむしろ今より遅くしてほしいぐらい)

また、調子に乗って使いすぎると制限をかけられる可能性もありますので、もしそうなったら「使いすぎなんだ」と考え、しばらく休むようにしてください。

追記(2026-01-18)

Eマーク付きのアルバム、要は 「Explicit Content(露骨な表現)が含まれるもの」はこの方法では出てこないことがわかりました。
どうすれば取得できるかはわかったんですが、PowerAutomate版でそれを実装するのはややこしそうですし、最初はPowerAutomate版でまとめてダウンロードし、次からは拡張機能版で個々にダウンロード・・・という風に両方使っていただくのがベストかと思いますので、拡張機能版のみで対応する予定です。


いいなと思ったら応援しよう!