私は、毎日デスクトップの壁紙に xkcd の漫画を追加するプログラムを作成したいと思っています。そのために、以下の一連の手順を実行して機能を実現しました。
Python スクリプトの作成#
ウェブスクレイピングを使用して xkcd の漫画を取得する#
xkcd のウェブサイトの構造は非常にシンプルで、単に HTML 内のコミック画像のリンクを見つければよいです。以下のコードを使用します:
url = 'https://xkcd.com/'
try:
# requestsライブラリを使用してウェブページを取得
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
# bs4.BeautifulSoupを使用してHTMLを解析
soup = BeautifulSoup(r.text, 'lxml')
imgs = soup.find_all('img')
# 各画像リンクの中からxkcdの漫画リンクを見つける
for i in imgs:
src = str(i.get('src'))
if '/comics/' in src:
if src.startswith('//'):
src = 'https:' + src
# 漫画画像を取得して保存
imgfile = requests.get(src)
imgfile.raise_for_status()
with open('./resources/xkcd.jpg', 'wb') as f:
f.write(imgfile.content)
f.close()
print('xkcdの画像を取得しました')
break
else:
raise Exception(f'{url}にコミックが見つかりませんでした')
# 例外が発生した場合は例外情報を保存
except Exception as e:
print('xkcdの画像の取得に失敗しました')
with open(f'crash.log', 'a') as f:
# current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f'[{current_date}]:', e, file=f)
f.close()
PIL ライブラリを使用して壁紙を編集する#
他の画像処理ライブラリ、例えば OpenCV でも可能です。
# 背景を開く
wallpaper = Image.open('./resources/background.jpg')
# xkcdの画像を開く
xkcd = Image.open('./resources/xkcd.jpg')
wallpaper_xkcd = xkcd.resize((2 * xkcd.width, 2 * xkcd.height)).convert('RGB')
# ここではxkcdの漫画を壁紙の右上に配置します
wallpaper.paste(wallpaper_xkcd, box=(wallpaper.width * 15 // 16 - wallpaper_xkcd.width, wallpaper.height // 16))
# 壁紙を保存
with open('./wallpaper.jpg', 'wb') as f:
wallpaper.save(f)
f.close()
Windows API を使用して壁紙を変更する#
必要な Windows API を見つけるのは困難な作業でしたが、文心一言に助けを求めました。また、ChatGPT も使用できます。
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, os.path.join(script_path, 'wallpaper.jpg'))
以下の図はプレビュー効果で、壁紙の右上に xkcd の漫画が追加されていることがわかります。
スクリプトを Windows タスクに追加する#
プログラムの設定が完了したら、定期的に実行するために Windows タスクに追加する必要があります。
Windows の検索機能(ショートカットキー:Windows+Q)を使用して、「タスクスケジューラ」を見つけます。右側の「操作」で「タスクの作成」をクリックして設定します。具体的な設定方法は、参考資料の「windows 定時実行 exe ファイル」を参照してください。
トリガーの設定#
必ずトリガーを設定してください。そうしないと、タスクはいつ実行されるべきかわかりません。私は毎日 23:00 に実行するように設定しました。
操作のパラメータの設定#
- プログラムまたはスクリプト:システムに Python がインストールされている場合、「プログラムまたはスクリプト」には
python
と入力するか、python.exe のパスを入力します。 - 引数の追加:「引数の追加」にはスクリプトのパスを入力します。(実際にはすべてを「プログラムまたはスクリプト」に入力することもできますが、システムが自動的に引数を分割します)
- 開始位置:必ず設定してください。そうしないと、プログラムが正しく実行されない場合があります。このパラメータはスクリプトのパスに設定します。
これで Windows で自動的にデスクトップ壁紙を編集することができます。
参考資料#
- Windows 10 の壁紙:如何找到 win10 系统当前使用的壁纸位置(この方法は Windows API を使用せずに実現されており、非推奨です)
- タスクの設定:windows 定時実行 exe ファイル
- タスクの実行時にエラーが発生する場合:WIN10 设置计划任务执行报(0x1)调用的函数不正确或调用了未知函数
- 文心一言:文心一言