株価速報、利確ライン、損切りラインをLINEで通知してくれるbotがあればいいな~と思い、LINE Notifyを使って開発した記録。
1.【Python】LINE Notifyで株価速報botを作る #1 ~アカウント連携&手動通知編~
2.【Python】LINEで株価速報bot#2 ~Herokuを使って自動通知編~
LINE Notify 公式サイト
やったこと
プログラムを実行すると、ソフトバンクグループとヤフーのリアルタイム株価を自分のLINEアカウントに通知してくれるbotの作成。
開発環境
言語: Python 3.6.5
フレームワーク: Jupyter Notebook
OS: Windows 10
ブラウザ: Google Chrome
サンプルコード
import requests
import urllib.request as urlreq
from bs4 import BeautifulSoup
def main():
url = "https://quote.nomura.co.jp/nomura/cgi-bin/parser.pl?QCODE=9984&TEMPLATE=nomura_tp_kabu_01&MKTN=T&LINK=&SHEET=&ROW="
r = urlreq.Request(url)
with urlreq.urlopen(r) as r:
r = r.read()
soup = BeautifulSoup(r, "html.parser")
spans = soup.find_all("span")
for tag in spans:
try:
string_ =tag.get("class").pop(0)
if string_ in "stock_summary-number":
softbankgr_stock = tag.text
break
except:
pass
url1 = "https://quote.nomura.co.jp/nomura/cgi-bin/parser.pl?QCODE=4689&TEMPLATE=nomura_tp_kabu_01&MKTN=T&LINK=&SHEET=&ROW="
r1 = urlreq.Request(url1)
with urlreq.urlopen(r1) as r1:
r1 = r1.read()
soup = BeautifulSoup(r1, "html.parser")
spans = soup.find_all("span")
for tag in spans:
try:
string_ =tag.get("class").pop(0)
if string_ in "stock_summary-number":
yahoo_stock = tag.text
break
except:
pass
print(softbankgr_stock)
print(yahoo_stock)
message = '\r\n' + 'ソフトバンクグループの株価は' + str(softbankgr_stock) + '\r\n' + 'ヤフーの株価は' + str(yahoo_stock)
url2 = "https://notify-api.line.me/api/notify"
token = "#発行したアクセストークンをここに入れる"
headers = {"Authorization" : "Bearer "+ token}
payload = {"message" : message}
r2 = requests.post(url2 ,headers = headers ,data=payload)
if __name__ == '__main__':
main()
LINE Notifyとアカウント連携
今回はLINEに株価速報を通知するために、簡単にLINEアカウントにメッセージを送れるAPIである、 LINE Notifyを使用する。
アカウント連携の方法は、以下リンクのパーソナルアクセストークンを発行するを参考にしてください。
コマンドラインから LINE にメッセージを送れる LINE Notify
以下のように自分のLINEアカウントとLINE Notifyが連携できたら、準備完了。画像はアカウント情報を隠してます。各々自分のLINEアカウントと連携してください。連携が完了すると、**アクセストークンが発行されるので必ずメモしておいてください。**後で使用します。
必要なライブラリのインポート
import requests
import urllib.request as urlreq
from bs4 import BeautifulSoup
・requests・・・urlを開くためのライブラリ。株価をスクレイピングで取得する際に使用。
・urllib.request・・・urlを開くためのライブラリ。株価をスクレイピングで取得する際に使用。
・BeautifulSoup・・・Beautiful Soupは、HTMLやXMLのファイルからデータを抽出(スクレイピング)するためのPythonライブラリ。
株価をスクレイピングして取得
def main():
url = "https://quote.nomura.co.jp/nomura/cgi-bin/parser.pl?QCODE=9984&TEMPLATE=nomura_tp_kabu_01&MKTN=T&LINK=&SHEET=&ROW="
#野村証券の株価掲載サイトを指定
r = urlreq.Request(url)
#リンクを取得
with urlreq.urlopen(r) as r:
r = r.read()
#リンクを開き読み込む
soup = BeautifulSoup(r, "html.parser")
# Webページのソースコードをパース
spans = soup.find_all("span")
# spanのついたクラスをすべて取得
for tag in spans:
try:
string_ =tag.get("class").pop(0)
if string_ in "stock_summary-number":
softbankgr_stock = tag.text
break
#ソフトバンクグループの株価データが格納されているタグを見つける
except:
pass
#データが見つからない場合は何もしない
#以下ヤフーの株価も同様
url1 = "https://quote.nomura.co.jp/nomura/cgi-bin/parser.pl?QCODE=4689&TEMPLATE=nomura_tp_kabu_01&MKTN=T&LINK=&SHEET=&ROW="
r1 = urlreq.Request(url1)
with urlreq.urlopen(r1) as r1:
r1 = r1.read()
soup = BeautifulSoup(r1, "html.parser")
spans = soup.find_all("span")
for tag in spans:
try:
string_ =tag.get("class").pop(0)
if string_ in "stock_summary-number":
yahoo_stock = tag.text
break
except:
pass
#デバッグ用に株価を表示
print(softbankgr_stock)
print(yahoo_stock)
今回は例としてソフトバンクグループとヤフーの株価を取得していく。野村証券の銘柄詳細(ソフトバンクグループ) 、野村証券の銘柄詳細(ヤフー) からスクレイピングで取得する。
取得した株価をLINEのメッセージ形式にして送信
message = '\r\n' + 'ソフトバンクグループの株価は' + str(softbankgr_stock) + '\r\n' + 'ヤフーの株価は' + str(yahoo_stock)
#LINEで送信するメッセージを作成
url2 = "https://notify-api.line.me/api/notify"
#LINE Notify APIのURLを取得
token = "#発行したアクセストークンをここに入れる"
#自分のLINEアカウントのアクセストークンを取得
headers = {"Authorization" : "Bearer "+ token}
#リクエストヘッダの指定
payload = {"message" : message}
#メッセージデータの格納
r2 = requests.post(url2 ,headers = headers ,data=payload)
#メッセージの送信
LINEアカウントに送信するメッセージは**[株価速報]**とタイトルをつけてわかりやすくしている。アクセストークンの指定は、先ほどメモしてもらったアクセストークンを入れてください。メモし忘れた場合は、もう一度アカウント連携をやり直してください。
実行
if __name__ == '__main__':
main()
# main関数の実行
リアルタイム(プログラムの実行時)の株価を取得できる。取得する株価の銘柄を変更したい場合は、スクレイピング先のURLを変更してください。
雑感
・現状は逐一プログラムを実行しないと株価が取得できない。
・一時間ごとにLINEで通知するなどの機能が欲しい。
・株価が暴落・急騰などしたらアラートを送信する機能も欲しい。
・LINEが便利なAPIを公開してくれているので、LINEとの連携は簡単だった。
参考文献
・野村証券銘柄検索
・Python, Beautiful Soupでスクレイピング、Yahooのヘッドライン抽出
・urllib.request --- URL を開くための拡張可能なライブラリ
・Python, Requestsの使い方
・コマンドラインから LINE にメッセージを送れる LINE Notify
・Google Apps ScriptからLINE NotifyでLINEにメッセージを送る
・PythonからLINE NotifyでLINEにメッセージを送る
・BeautifulSoupを使って、ブログ記事の情報をいろいろ絞り込んでみた
・HTMLからタグを抽出!BeautifulSoupによるWebスクレイピング入門【Python】
・【超便利&お手軽】Python + LINE NotifyでLINEメッセージ送信