概要
みんかぶ投資信託売れ筋ランキング
https://itf.minkabu.jp/ranking/best_ranking
の上位10ファンドの基準価額と利回りを、指定時間にLINEへ通知する方法です。
背景
現職で投資信託を販売する中で、基準価額や利回りの情報を理解しておく必要がある。毎朝LINEに情報が届くように設定することで、確認する手間をなくすことができると思った。
スクレイピング
みんかぶのURLから情報を取得するコードは以下の通り
import requests
import bs4
URL = "https://itf.minkabu.jp/ranking/best_ranking"
LINE_NOTIFY_TOKEN = ""
def main():
line_notify = LineNotify()
ranking_html = requests.get(URL)
soup = bs4.BeautifulSoup(ranking_html.text, "html.parser")
fund_name_list = []
price_list = []
rimawari_list = []
for i in range(10):
data = soup.find_all("div", attrs={"class": "ranking_name"})[i].text
fund_name_list.append(data.replace("\n", ""))
for i in range(20):
data = soup.find_all("td", attrs={"class": "tar wsnw"})[i].text
if i % 2 == 0:
price_list.append(data.replace("\n", ""))
else :
rimawari_list.append(data.replace("\n", ""))
for i in range(10):
send_data = (
"\n" + str(i+1) + "位"
"\n" + "ファンド名:" + fund_name_list[i] +
"\n" + "基準価額 :" + price_list[i] +
"\n" + "利回り :" + rimawari_list[i]
)
line_notify.send(send_data)
class LineNotify:
def __init__(self):
self.line_notify_token = LINE_NOTIFY_TOKEN
self.headers = {"Authorization": f"Bearer {self.line_notify_token}"}
def send(self, data):
data = {"message": f" {data}"}
requests.post("https://notify-api.line.me/api/notify", data=data, headers=self.headers)
if __name__ == "__main__":
main()
requestsでHTMLの情報取得→bs4で解析→リストに格納→LINE Notify APIを叩いてLINEへ通知 という流れ。
基準価額と利回りはtdタグのclass名が一緒だったため、一旦まとめて取得し、取得の順番が奇数か偶数かによって条件分岐をかけることによってそれぞれの値を取得した。
AWS Lambda と Amazon EventBridge による定期実行
毎朝決まった時間にLINEへ通知が来るようにするため、AWS Lambda と Amazon EventBrige を使って定期実行する。
AWS Lambda の設定
1. 「関数の作成」を選択し、Lambda関数を作成する。
2. 「基本設定」を開き、タイムアウトの時間を1分に設定する。
3. 「コードソース」を開き、lambda_function内にPythonコードをペーストする。
※変更点2箇所
def main():
#この部分を下記に変更
def lambda_handler(event,context)
if __name__ == "__main__":
main()
#この部分を消去
4. 「レイヤー」を追加する。
Lambdaではrequestsやbeautifulsoup4等の外部ライブラリを利用するにはレイヤーを用意する必要がある。
今回は有志の方々が作成したLambda用のPythonライブラリレイヤーを使用する。
「List of ARNs」の中から「Python3.12」を選択し、自分のリージョンを選択すると以下のようにライブラリごとのARNが表示される。
requestsとbeautifulsoup4のARNをコピーし、Lambdaにペーストする。
Amazon EventBridge の設定
3. 「定期的なスケジュール」を選択し、実行間隔を設定する。
今回は毎朝7時にLINEへと通知するため、以下のように入力する。
6. その後何も変更せず進んでいくと、以下のようにスケジュールが設定される。
以上でAWS Lambda と Amazon EventBridge の設定が完了したため、みんかぶ投資信託売れ筋ランキングの上位10ファンドの基準価額、利回りが毎朝7時にLINEへと通知される。