MENU
このブログのテーマはこちら ⇒ SWELL公式HP

Pythonファイルをバッチファイルとタスクマネージャで自動で実行する方法

  • URLをコピーしました!

自分が持っている株(米国ETF)の価格を円換算して自動でLINEに送ってくれるpythonプログラムを作成しました。

あわせて読みたい
初心者がPythonでスクレイピングのプログラムを作ってみた という人はスクレイピングからやったらいいと思うよ。 この記事を読むと分かること スクレイピングって何? 便利な使い道 Pythonでスクレイピングする方法   【Pyt...

このPythonプログラムを毎日指定した時間に動くように設定してみました。

目次

作ったPythonプログラム

ちなみに作ったPythonプログラムがこれ↓

#requests、BeautifulSoupを使う宣言
import requests
from bs4 import BeautifulSoup

#情報を取得するURL
TARGET_URL_VTI = "https://www.bloomberg.co.jp/quote/VTI:US"
TARGET_URL_VT = "https://www.bloomberg.co.jp/quote/VT:US"

#requestsモジュールでTARGET_URL_VTIのHTMLを取得
html_VTI = requests.get(TARGET_URL_VTI)
#取得したHTMLを解析するシステムに渡す(BeautifulSoupの機能の1つ)
soup = BeautifulSoup(html_VTI.content, "html.parser")
#変数priceにdiv class=priceを指定
VTIprice = soup.find('div', class_='price')

#同じ操作をVTで
html_VT = requests.get(TARGET_URL_VT)
soup = BeautifulSoup(html_VT.content, "html.parser")
VTprice = soup.find('div', class_='price')

#変数priceを表示しなさい
print(VTIprice.text+"$")
print(VTprice.text+"$")

#為替の情報を取得するURL
TARGET_URL_yen = "https://nikkei225jp.com/fx/"

#requestsモジュールでTARGET_URL_yenのHTMLを取得
html = requests.get(TARGET_URL_yen)
#取得したHTMLを解析するシステムにHTMLを渡す(BeautifulSoupの機能の1つ)
soup = BeautifulSoup(html.content, "html.parser")
#変数dollarにdiv class=if_curを指定
dollar = soup.find_all('div', class_='if_cur')
#変数dollarを表示しなさい
print(dollar[2].text+'円')

#LINEに価格を送信
url = "https://notify-api.line.me/api/notify"
#自分ののLINEのトークン
token = "トークン"
headers = {"Authorization" : "Bearer "+ token}
#送りたいメッセージ(株価(USD)×為替レート)
message = "ただ今の為替"+(dollar[2].text+'円')+"VTI価格"+(VTIprice.text+"$")+"VT価格"+(VTprice.text+"$")+"VTI価格(円換算)"+(str(float(VTIprice.text)*float(dollar[2].text))+'円')+"VT価格(円換算)"+(str(float(VTprice.text)*float(dollar[2].text))+'円')
payload = {"message" :  message}
r = requests.post(url, headers = headers, params=payload)

作り方は別の記事で説明してます。

あわせて読みたい
初心者がPythonでスクレイピングのプログラムを作ってみた という人はスクレイピングからやったらいいと思うよ。 この記事を読むと分かること スクレイピングって何? 便利な使い道 Pythonでスクレイピングする方法   【Pyt...

ただ、Pythonプログラムを作っても、動かすためにクリックするのは人力です。

せっかく自動で情報を取得してくれるファイルを作ったのに、手動で実行しないといけないのは面倒くさい。

ということで、株価の円換算価格を自動取得するpythonファイルを自動で実行できるようにしたいと思います!

Pythonプログラムを自動で動かす方法

Pythonプログラムを自動で動かすにはいくつか必要なものがあります。

  1. Pythonプログラム
  2. バッチファイル
  3. タスクスケジューラ

Pythonプログラムが必須なのは当然ですね。

バッチファイルとタスクスケジューラって何?

説明します。

タスクスケジューラって何?

Windowsに標準で入っている、一度設定するだけで仕事を自動化できる神ソフト。

僕もこの時まで存在を知りませんでした。
バッチファイルって何?

コマンドプロンプト上で動くファイル(拡張子は「.bat」)。バッチファイル上の処理を順番に行っていくだけのファイル。

一度作っておけば色んな作業をダブルクリックだけで行うことができる。

バッチファイルによくやる作業を羅列しておくと、バッチファイルを1つ動かすだけで順番に処理してくれます。

これらをどうやって使うのかを見ていきましょう!

バッチファイル(.bat)でpythonファイルを実行

タスクスケジューラで「.py」のファイルを直接実行してもいいんですが、なぜか上手くいかないことがあったので、バッチファイルを作っていきます。

タスクスケジューラで「.pyファイル」を動かすのではなく、「.pyファイルを動かせ」という命令が書かれた「.batファイル」を動かすというわけです。

指示する順番
タスクスケジューラ → .batファイル→ .pyファイル

ちょっと回りくどいですが、こっちの方がうまくいきました。それではさっそく作っていきましょう。

メモ帳を開いて以下のコードをコピペしましょう!

意味は考えないことが大事です。

とりあえず動けばOK。

rem  --- 作業フォルダをバッチファイルのパスに設定 ---
cd /d %~dp0
rem  --- プログラムの実行 ---
python %~dp0\scraping-prototype.py
意味も知りたい

そんな人のために軽く内容を説明しておきます。

rem:この行がコメントになる。(実行されない)
cd:change directory(チェンジディレクトリ)の略。コマンドプロンプトが参照しているディレクトリを移動する。
%~dp0:バッチファイルがあるディレクトリ
一番下の行:バッチファイルがあるディレクトリの「scraping-prototype.py」を実行する。

このテキストファイルを「auto_python.bat」という名前で保存します。

 

ディレクトリの考え方が初心者には結構な難所です。

ディレクトリの考え方を初心者なりにまとめた記事はこちら

あわせて読みたい
Python初心者がつまづきやすいディレクトリを初心者が説明してみた。 そうですよね。 今までパソコンを触る機会はそれなりにあった僕でもIT企業に入社して初めて聞く単語でした。 ただ、ディレクトリは理解しておかないと、プログラミング...

 

ちなみに僕は詳しい人に聞いてプログラムを書いてます。

それが一番確実。

バッチファイルの拡張子は「.bat」

今回のバッチファイルの書き方では「.pyファイル」と「.batファイル」は同じディレクトリ(フォルダ)に保存していないと動きません。バッチファイルを書いて自分でディレクトリを設定できる人は別のディレクトリにおいてもOK。

名前は拡張子を「.bat」で保存。

このbatファイルがきちんと動くか、1度実行してみましょう!

ダブルクリックしてみて動けばOK。

←バッチファイルのアイコン

一瞬コマンドプロンプトの黒い画面がぱっと出てきて消えて、pythonファイルが実行されたはずです。

実行されなかった人はコピペミスかファイル保存場所のミスです。(断言)

実行された内容を目で確認したい場合は、batファイルの最後に「pause」と付け加えてみましょう。

rem  --- 作業フォルダをバッチファイルのパスに設定 ---
cd /d %~dp0
rem  --- プログラムの実行 ---
python %~dp0\scraping-prototype.py
pause

コメント部分が文字化けして気持ち悪いけど、きちんと実行してpauseの部分で止まりましたね!

@echo offと書けばこの気持ち悪い文字化けを消すことができます。

@echo off

コマンドプロンプト画面にバッチファイルに書いたコマンドを復唱(表示)させないようにするための指示。一番最初に書けば、そのファイルのコマンドが全て復唱されない。

○○をしなさい!
はい!
@echo off
rem  --- 作業フォルダをバッチファイルのパスに設定 ---
cd /d %~dp0
rem  --- プログラムの実行 ---
python %~dp0\scraping-prototype.py
pause

※1行だけ非表示にしたい場合は、非表示にしたいコマンドの先頭に@をつけます。

これでpythonファイルを実行するbatファイルが完成です。

次にタスクスケジューラーでこの.batファイルを自動実行するように設定していきます。

タスクスケジューラでbatファイルを自動実行

タスクスケジューラって初めて使うわ
僕もそう

けど、やってみると意外と簡単です。

 

タスクスケジューラと検索して実行。

画面下部の検索窓で検索

 

「タスクスケジューラライブラリ」→「基本タスクの作成」をクリック。

 

このタスクの名前と説明を入力します。

名前は自分が分かるように名前を付けましょう。今回は「株価自動送信」とでもしておけばOK。

説明はタスクの内容を簡単に書いておきます。

僕は「auto_python.bat→scraping-prototype.py実行」と書いて、どんなプログラムが実行されるか書いてます。

後で見返した時にパッと理解できるように

 

実行するタイミングを選択。タスクを実行したい時間を指定します。

1つだけ注意点があります

夜中などPCをシャットダウンしている時間帯は実行できません
もし、夜中に一瞬起動して実行した後シャットダウンして欲しいのであれば、BIOS設定が必要です。

 

タスクはプログラムの開始。

 

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

直接検索でも、「参照」から選択してもOK

 

これで設定は完了です!

本当に実行されるの?

本当に実行されるか不安な人は、数分後を設定して実行されるか確認してみましょう。

タスクスケジューラ ライブラリで目当てのタスクをダブルクリックすれば編集可能です。

 

まとめ

これで自動でプログラムが実行できるようになりました!

しかし1つ問題があります。

PCがシャットダウンされている時はタスクマネージャは働きません。

深夜などPCの電源が落ちている時間帯に実行して欲しい場合は、PCの電源を自動でONにするプログラムが別で必要になります。

つまり、BIOSを使った設定です。

やり方は別の記事に書いているので参考にしてください。

あわせて読みたい
PCが自動で毎日決まった時間に起動し、作業終了後シャットダウンする設定方法 PCが自動で起動して、勝手に作業をして、勝手にシャットダウンする設定をしたい。 寝てる間に面倒な作業を勝手にやって欲しい。 そういった願いがある人に朗報です。 こ...

 

BIOSの設定が終わってやっと自動化と言えます。

続けてBIOSの設定まで終わらせちゃいましょう!

 

こんな感じ!

カッパ

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次