自分が持っている株(米国ETF)の価格を円換算して自動でLINEに送ってくれるpythonプログラムを作成しました。
この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ファイルを自動で実行できるようにしたいと思います!
Pythonプログラムを自動で動かす方法
Pythonプログラムを自動で動かすにはいくつか必要なものがあります。
- Pythonプログラム
- バッチファイル
- タスクスケジューラ
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」という名前で保存します。
ディレクトリの考え方が初心者には結構な難所です。
ディレクトリの考え方を初心者なりにまとめた記事はこちら
ちなみに僕は詳しい人に聞いてプログラムを書いてます。
今回のバッチファイルの書き方では「.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
rem --- 作業フォルダをバッチファイルのパスに設定 ---
cd /d %~dp0
rem --- プログラムの実行 ---
python %~dp0\scraping-prototype.py
pause
※1行だけ非表示にしたい場合は、非表示にしたいコマンドの先頭に@をつけます。
これでpythonファイルを実行するbatファイルが完成です。
次にタスクスケジューラーでこの.batファイルを自動実行するように設定していきます。
タスクスケジューラでbatファイルを自動実行
けど、やってみると意外と簡単です。
タスクスケジューラと検索して実行。
「タスクスケジューラライブラリ」→「基本タスクの作成」をクリック。
このタスクの名前と説明を入力します。
名前は自分が分かるように名前を付けましょう。今回は「株価自動送信」とでもしておけばOK。
説明はタスクの内容を簡単に書いておきます。
僕は「auto_python.bat→scraping-prototype.py実行」と書いて、どんなプログラムが実行されるか書いてます。
実行するタイミングを選択。タスクを実行したい時間を指定します。
もし、夜中に一瞬起動して実行した後シャットダウンして欲しいのであれば、BIOS設定が必要です。
タスクはプログラムの開始。
実行するプログラムを選択します。
これで設定は完了です!
本当に実行されるか不安な人は、数分後を設定して実行されるか確認してみましょう。
タスクスケジューラ ライブラリで目当てのタスクをダブルクリックすれば編集可能です。
まとめ
これで自動でプログラムが実行できるようになりました!
しかし1つ問題があります。
深夜などPCの電源が落ちている時間帯に実行して欲しい場合は、PCの電源を自動でONにするプログラムが別で必要になります。
つまり、BIOSを使った設定です。
やり方は別の記事に書いているので参考にしてください。
BIOSの設定が終わってやっと自動化と言えます。
続けてBIOSの設定まで終わらせちゃいましょう!
こんな感じ!
カッパ