Qiitaはじめました
いろんな調べごとでお世話になってたQiita, まさかの初投稿です。
うまく書けるかドキドキです。
備忘として、やったことをメモしていければなーと思います。
毎月壁紙を自動で変えたい!
いろんなところで配布されているカレンダー入りの壁紙、かわいくて使いたいけど手動で毎月変えるのが面倒なので、Pythonを使って自動で変えるプログラムを作ってみました。
今回は東京ディズニーリゾートで配布している壁紙を使いたいと思います。
初めてのPythonでしたが意外と簡単にできました。
環境
- Windows10
- Python 3.9.6
はじめに
まず初めに、画像をダウンロードするコードを書いてみます。
といっても、コピペです。
※この辺のお勉強はこれから頑張ります。。。
import os
import pprint
import time
import datetime
import urllib.error
import urllib.request
def download_file(url, dst_path):
try:
with urllib.request.urlopen(url) as web_file:
data = web_file.read()
with open(dst_path, mode='wb') as local_file:
local_file.write(data)
except urllib.error.URLError as e:
print(e)
URL
ダウンロードしたい壁紙のURLを確認します。
https://media2.tokyodisneyresort.jp/home/tdr/wallpaper2021/08/wallpaper_202108_1.jpg
どうやら、"~/wallpaper yyyy/mm/wallpaper_yyyymm_1.jpg" の書式のようです。
現在の西暦と月を引用できればURLはわかりそうです。
なので、まずは今日の日付を取得しました。
#--- import Today's date ---
dt_now = datetime.datetime.now()
print(dt_now.strftime('%Y/%m/%d'))
$ python wallpaper_test.py
2021/08/30
今日の日付が取れました。
西暦取得時に、4桁取る場合は Y を大文字にし、
下2桁だけでよい場合は、y を小文字で書けば良いみたいです。
print(dt_now.strftime('%y/%m/%d'))
$ python wallpaper_test.py
21/08/30
これを使って、URLを作っていきます。
URLを基に、取得した西暦と月を当てはめていきます。
#--- url make ---
dsite1 = 'https://media2.tokyodisneyresort.jp/home/tdr/wallpaper'+dt_now.strftime('%Y/%m/')
dsite2 = 'wallpaper_'+dt_now.strftime('%Y%m')+'_1.jpg'
url = dsite1+dsite2
print('url: '+url)
$ python wallpaper_test.py
2021/08/30
url: https://media2.tokyodisneyresort.jp/home/tdr/wallpaper2021/08/wallpaper_202108_1.jpg
うまく作れてそうです。
格納先指定
ダウンロード後に画像を格納するパスを指定します。
dst_path
でパスを指定する際、パスを文字列として扱うために r または R を先頭につけます。
これがないと、\U や \a がエスケープシーケンスとみなされてしまうため、エラーが発生します。
パスの最後には、保存する画像のファイル名まで指定します。
#--- path make ---
dst_path = r'C:\Users\ayk_f\wallpaper\wallpaper_'+dt_now.strftime('%Y%m')+'_1.jpg'
print('path: '+dst_path)
$ python wallpaper_test.py
2021/08/30
url: https://media2.tokyodisneyresort.jp/home/tdr/wallpaper2021/08/wallpaper_202108_1.jpg
path: C:\Users\ayk_f\wallpaper\wallpaper_202108_1.jpg
パスがつくれました。
壁紙ダウンロード
作ったURLと格納先を使って、今月の壁紙をダウンロードします。
#--- wallpaper download ---
download_file(url, dst_path)
ダウンロードできました!
壁紙設定
壁紙のダウンロードまで完了したので、次は壁紙を設定します。
import ctypes
ctypes.windll.user32.SystemParametersInfoW(20, 0, dst_path, 0)
これも基本コピペです。壁紙が格納されている絶対パスを指定します。
これで、うまく壁紙が変更できました!
Windowsタスクスケジューラの設定
壁紙ダウンロードから設定までできたので、Windowsのタスクスケジューラで毎月1日に実行するようにします。
基本はこの記事の通りです。
参考までに、設定方法を貼っておきます。
1. 基本タスクの作成
タスクスケジューラを起動し、「基本タスクの作成」を選択
選択後、タスク名を設定。
2. トリガーの設定
Monthly(毎月)を選択
3. トリガーの詳細設定
開始日と時間を設定。
今日の日付(2021/8/30)の朝9:00から開始することにしました。
スケジュールを実行する月を選択。
毎月なので、全部選択です。
何日に実行するかを決めます。
とりあえず毎月1日に実行しようと思います。
4. 操作の設定
もちろん、「Start a program」です。
実行するプログラムを選択します。
①実行するコード(.py)を選択し、絶対パスを入力
②実行するコード名(.py)を入力
※①で選択したファイル名と同一です。
③python3が格納されている絶対パスを入力
絶対パスは以下のコマンドで確認することができます。
$ py --list-path
Installed Pythons found by C:\Windows\py.exe Launcher for Windows *
5. 完了
チェックボックスを有効化し、完了です。
これでWindowsスケジュールに追加されるので、毎月1日に壁紙が変わるはずです。
ちなみに
ちなみに、PCの日付を変えたらほかの月の壁紙もダウンロードできました。
$ python wallpaper_test.py
2021/07/30
url: https://media2.tokyodisneyresort.jp/home/tdr/wallpaper2021/07/wallpaper_202107_1.jpg
path: C:\Users\ayfukui\Box\wallpaper\wallpaper_202107_1.jpg
「Date modified」が 2021/7/30 になっているのが確認でき、無事に壁紙も変わりました。
さいごに
初めてのPythonにはじめてのQiitaでした。
プログラミング自体もかなーーーーり久しぶりでしたが、意外と何とかなりました。
9/1にきちんと壁紙が変わるか楽しみです。
毎月の壁紙URLが変わってしまうとうまく動かないので、エラー画面とか出たほうがいいのかな~。と思ったり。
うまく動いてなさそうならまた考えます。
追記
使ってみていくつか課題が見つかったので、次の記事でまとめました。(2021/9/13)
参考サイト
- PythonでWeb上の画像などのファイルをダウンロード(個別・一括) - note.nkmk.me
- 【Python】エラー:unicode error “unicodeescape”の原因と解決方法 - OFFICE54
- Pythonで現在時刻・日付・日時を取得 - note.nkmk.me
- Python3でWindowsの壁紙を変更する - Qiita
- #WindowsタスクスケジューラでPythonを走らせる - Qiita
- Markdown記法 サンプル集 - Qiita
- 【Python】Windowsタスクスケジューラで定期的に自動実行する方法(EXEファイル) - OFFICE54