0
2

More than 3 years have passed since last update.

# 毎月壁紙を自動で変えたい!

Last updated at Posted at 2021-08-30

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)

image.png

ダウンロードできました!

壁紙設定

壁紙のダウンロードまで完了したので、次は壁紙を設定します。

    import ctypes
    ctypes.windll.user32.SystemParametersInfoW(20, 0, dst_path, 0)

これも基本コピペです。壁紙が格納されている絶対パスを指定します。
これで、うまく壁紙が変更できました!

Windowsタスクスケジューラの設定

壁紙ダウンロードから設定までできたので、Windowsのタスクスケジューラで毎月1日に実行するようにします。
基本はこの記事の通りです。

参考までに、設定方法を貼っておきます。

1. 基本タスクの作成

タスクスケジューラを起動し、「基本タスクの作成」を選択
選択後、タスク名を設定。

image.png

2. トリガーの設定

Monthly(毎月)を選択

image.png

3. トリガーの詳細設定

開始日と時間を設定。
今日の日付(2021/8/30)の朝9:00から開始することにしました。

image.png

スケジュールを実行する月を選択。
毎月なので、全部選択です。

image.png

何日に実行するかを決めます。
とりあえず毎月1日に実行しようと思います。

image.png

4. 操作の設定

もちろん、「Start a program」です。

image.png

実行するプログラムを選択します。

image.png

①実行するコード(.py)を選択し、絶対パスを入力
②実行するコード名(.py)を入力
 ※①で選択したファイル名と同一です。
③python3が格納されている絶対パスを入力
 絶対パスは以下のコマンドで確認することができます。

$ py --list-path
Installed Pythons found by C:\Windows\py.exe Launcher for Windows *

5. 完了

チェックボックスを有効化し、完了です。
これでWindowsスケジュールに追加されるので、毎月1日に壁紙が変わるはずです。

image.png

ちなみに

ちなみに、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

image.png

「Date modified」が 2021/7/30 になっているのが確認でき、無事に壁紙も変わりました。

さいごに

初めてのPythonにはじめてのQiitaでした。
プログラミング自体もかなーーーーり久しぶりでしたが、意外と何とかなりました。
9/1にきちんと壁紙が変わるか楽しみです。
毎月の壁紙URLが変わってしまうとうまく動かないので、エラー画面とか出たほうがいいのかな~。と思ったり。
うまく動いてなさそうならまた考えます。

追記

使ってみていくつか課題が見つかったので、次の記事でまとめました。(2021/9/13)

参考サイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2