17
NASAの壁紙自動切り替えツールの作り方

私たちの頭上に輝く星々は、常に驚きと知識の源でした。子供の頃、人類を月に送り込み、アポロ13号を無事地球に帰還させたアポロ計画について学びました。 

宇宙は美しく、星雲、恒星、惑星、その他の天体で満ち溢れています。そして幸運なことに、NASAは電波望遠鏡、天文台、衛星から毎日撮影された画像を無料で閲覧できるリソースを提供しています。このハウツーでは、NASAの無料サービスを利用して、Windows 10および11の壁紙を最新の天文画像に変更する方法を学びます。

NASA APIキーの取得

NASAのリソースは非常に簡単に利用できますが、そのリソースを最大限に活用するにはAPIキーが必要です。API(アプリケーション・プログラミング・インターフェース)とは、企業(この場合はNASA)が提供するリソースをアプリケーションが利用するための手段です。このインターフェースにより、2台以上のマシンが相互に通信し、リクエストを送信できるようになります。このプロジェクトでは、NASA APIを使用して、毎日の天文画像(APOD)を取得します。

1.ブラウザでNASAのAPIページにアクセスし、APIキーを登録します。APIキーは無料で、NASAの数千ものリソースにアクセスできます。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

2. API キーをメールで確認し、手元に保管してください。ただし、誰とも共有しないでください。

Python環境の設定

プロジェクトコードに追加機能を提供するために、2つのPythonライブラリ(モジュール)をインストールする必要があります。1つ目はWin11Toastです。これはWindows 10および11用のポップアップ通知ツールで、アプリ実行時に成功/失敗のメッセージを表示するために使用します。2つ目はpyinstallerです。これはPythonプロジェクトとその依存関係を単一の実行ファイルにパッケージ化する非常に便利なツールです。以前は、このアプリ用のGUIであるAuto Py to Exeを使用して実行ファイルを作成しましたが、このハウツーではシンプルな実行ファイルのみが必要です。

このハウツーを始める前に、Windows 10 / 11 コンピューターに Python がインストールされていることを確認してください。これについてはハウツー記事をご覧ください。

Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。

1.コマンドプロンプトを開きます。Windowsキーを押して「CMD」と入力し、Enterキーを押します。

2. Python パッケージ化ツールである pip を使用して、2 つのライブラリをインストールします。

pip install win11toast
pip install pyinstaller

プロジェクトコードの作成

APIキーとPython環境の設定が完了したら、プロジェクトコードの作成を開始できます。今回はThonny Pythonエディタを使用していますが、他のエディタでも構いません。Notepad++やMicrosoftのVS Codeも優れた代替エディタです。

1.空のプロジェクトページで、3つのライブラリをインポートすることから始めます。RequestsはNASA APIからデータをリクエストするために使用します。Ctypesは、コードからWindows DLLに変更を加えるために使用します。Win11toastは「toast」のみをインポートし、Windowsでポップアップ通知を表示するために使用します。

import requests
import ctypes
from win11toast import toast

2. 「url」というオブジェクトを作成し、APIリクエストURLとAPIキーをそこに保存します。APIキーはURL内の「=」の後、引用符で囲んだまま記述してください。

url = "https://api.nasa.gov/planetary/apod?api_key=YOUR_API_KEY_HERE”

3.オブジェクト「r」を作成し、NASA API へのリクエストから返されたデータを格納するために使用します。

r = requests.get(url)

4.オブジェクト「r」にデータが存在するかどうかを確認する最初の条件テストを作成します。もし存在する場合、一連のタスクが実行されます。

if r:

5. 「APOD」というオブジェクトを作成し、APODのJSONデータを保存するために使用します。これにより、その日のAPOD画像のURLがJSONオブジェクトの値として保存されます。

 APOD = r.json()['url']

6. 「pic」というオブジェクトを作成し、APODオブジェクトを使ってNASA APIから画像をリクエストします。これによりファイルはメモリにダウンロードされますが、まだディスクにファイルとして書き込まれていません。

pic = requests.get(APOD, allow_redirects=True)

7. APODの更新が動画ではなくJPEG画像であることを確認するための条件付きテストを追加します。その日に画像がない場合、Windowsに通知が表示され、ユーザーに通知されます。NASAはAPODを毎日更新していますが、YouTube動画で更新される日もあります。このエラー処理テストがないと、動画での更新があった場合にコードが失敗します。

 if "jpg" not in APOD:
toast("No image for today, must be a YouTube video 📺") 

NASAの壁紙スイッチャーのエラーメッセージ

(画像提供:Tom's Hardware)

8. else条件を使用して、ユーザーアカウントのPicturesディレクトリにあるAPOD.jpgというファイルを開き、メモリに保存されている画像をファイルに書き込みます。ユーザーアカウント名はご自身のアカウント名に合わせて変更してください。ここではlespoです。ファイルパスには二重のバックスラッシュ(\\)を含めることを忘れないでください。そうしないと、Pythonはエスケープ文字を使用していると認識してしまいます。

 else: open("C:\\Users\\lespo\\Pictures\\APOD.jpg", "wb").write(pic.content)

9. ctypesを使用してDLLを更新し、壁紙をAPOD.jpgファイルに設定します。ファイルのフルパスを使用することを忘れないでください。

 ctypes.windll.user32.SystemParametersInfoW(20, 0, "C:\\Users\\lespo\\Pictures\\APOD.jpg", 3)

10.トーストを使って、画像が変更されたことをユーザーに知らせるポップアップメッセージを作成します。通知には絵文字を使用できます。私たちはEmojipediaから絵文字を入手しました。

 toast("Enjoy the latest image from NASA 🚀")

11. 元の if..else 条件文 (APOD が画像かビデオかを処理) に戻り、else 条件を追加して、Python REPL に「Error」を出力します。

else:
print("Error")

12.コードをapod.pyとして保存し、エディタで動作をテストします。Thonnyで「実行」をクリックすると、通知ポップアップが表示され、画像が変更されているのを確認しました。

通知が表示されません!

コードを実行すると、Python REPLで「win11toast (<winsdk Windows Foundation.HResult object at 0x0000025163E315F0>,)」というエラーが発生しましたが、これはあまり意味がありませんでした。GithubのWin11Toast Issuesを確認したところ、このエラーはポップアップ通知を非表示にした場合に発生していることがわかりました。修正は簡単でした。

1. 「設定」に移動して「システム」を選択します。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

2. 「通知とアクション」を選択し、通知をオンにします。受信する通知の粒度は、チェックボックスで調整できます。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

3.アプリケーション ウィンドウを閉じてコードを再試行し、通知が表示されることを確認します。

実行ファイルの作成

プロジェクトコードのテストと動作確認が完了したら、次は実行ファイルの作成です。これにより、任意のWindowsコンピュータにファイルをドロップするだけで動作します。pyinstallerは、アプリケーションが実行されるPython環境のスナップショットを取得します。そして、実行ファイル内に独自の環境を作成します。そのため、使用したすべてのライブラリ(requests、ctypes、win11toastなど)がファイルにパッケージ化されているため、ターゲットシステムにインストールする必要はありません。また、実行ファイルをスタートアップディレクトリにドロップすることもできますが、これについては後ほど詳しく説明します。

1.コマンドプロンプトを開きます。Windowsキーを押して「CMD」と入力し、Enterキーを押します。

2. プロジェクト コードがあるディレクトリに移動します。

3. pyinstaller を -F 引数で実行し、プロジェクトファイル名を渡します。 -F を使用すると、Python 環境全体が 1 つのファイルに圧縮されます。

pyinstaller -F apod.py

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

4.プロセスが完了するまで待ってから、コマンド プロンプトを閉じます。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

5.プロジェクトコードが保存されているディレクトリを開き、「dist」ディレクトリを探して開きます。その中に実行ファイルがあります。

6.ファイルをダブルクリックしてテストします。画像が変更されたこと、またはYouTube動画であることを示す通知がポップアップ表示されます。これは、ファイルが機能していることを示しています。

壁紙を自動的に変更する

実行ファイルをダブルクリックして壁紙を変更するのはそれほど難しくありませんが、Windows がそれを実行できたらどうなるでしょうか?実行ファイルをスタートアップディレクトリに移動し、Windows の起動時に毎回実行されるようにします。

1. Windows キーと R キーを押して実行ダイアログを開き、「shell:startup」と入力します。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

2. distフォルダからapod.exeファイルをスタートアップフォルダにコピーします。これにより、Windowsの起動時にアプリケーションが実行されるようになります。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

3.ウィンドウを閉じて Windows を再起動し、パネルの通知を確認します。

NASAの壁紙自動切り替えツールの作り方

(画像提供:Tom's Hardware)

完全なコードリスト

import requests
import ctypes
from win11toast import toast url = "https://api.nasa.gov/planetary/apod?api_key=YOUR_API_KEY_HERE”
r = requests.get(url)
if r: APOD = r.json()['url'] pic = requests.get(APOD, allow_redirects=True) if "jpg" not in APOD: toast("No image for today, must be a YouTube video 📺") else: open("C:\\Users\\lespo\\Pictures\\APOD.jpg", "wb").write(pic.content) ctypes.windll.user32.SystemParametersInfoW(20, 0, "C:\\Users\\lespo\\Pictures\\APOD.jpg", 3) toast("Enjoy the latest image from NASA 🚀")
else:
print("Error")

その他のチュートリアル

  • Windows 10と11にPythonをインストールする方法
  • Pythonで辞書を使う方法
  • Pythonで実行可能なアプリケーションを作成する方法