0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

みんかぶ投資信託売れ筋ランキングの上位10ファンドの基準価額、利回りを指定時間にLINEへ通知する

Last updated at Posted at 2024-02-24

概要

みんかぶ投資信託売れ筋ランキング
https://itf.minkabu.jp/ranking/best_ranking
の上位10ファンドの基準価額と利回りを、指定時間にLINEへ通知する方法です。

IMG_3706.jpg

背景

現職で投資信託を販売する中で、基準価額や利回りの情報を理解しておく必要がある。毎朝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関数を作成する。

スクリーンショット 2024-02-24 15.24.32.jpg

2. 「基本設定」を開き、タイムアウトの時間を1分に設定する。

スクリーンショット 2024-02-24 15.26.11.jpg

3. 「コードソース」を開き、lambda_function内にPythonコードをペーストする。
※変更点2箇所

def main():
#この部分を下記に変更
def lambda_handler(event,context)
if __name__ == "__main__":
    main()
#この部分を消去

スクリーンショット 2024-02-24 15.30.30.jpg

4. 「レイヤー」を追加する。
Lambdaではrequestsやbeautifulsoup4等の外部ライブラリを利用するにはレイヤーを用意する必要がある。

スクリーンショット 2024-02-24 15.36.09.jpg

今回は有志の方々が作成したLambda用のPythonライブラリレイヤーを使用する。

「List of ARNs」の中から「Python3.12」を選択し、自分のリージョンを選択すると以下のようにライブラリごとのARNが表示される。
requestsとbeautifulsoup4のARNをコピーし、Lambdaにペーストする。

スクリーンショット 2024-02-24 15.34.47.jpg

Amazon EventBridge の設定

1. 「ルールを作成」を選択。
スクリーンショット 2024-02-24 15.37.43.jpg

2. 「名前」を入力し、「スケジュール」を選択。
スクリーンショット 2024-02-24 15.38.17.jpg

3. 「定期的なスケジュール」を選択し、実行間隔を設定する。
今回は毎朝7時にLINEへと通知するため、以下のように入力する。
スクリーンショット 2024-02-24 15.39.05.jpg

4. 「Invoke」を選択する。
スクリーンショット 2024-02-24 15.40.10.jpg

5. Lambdaで設定した名前を選択する。
スクリーンショット 2024-02-24 15.40.24.jpg

6. その後何も変更せず進んでいくと、以下のようにスケジュールが設定される。
スクリーンショット 2024-02-24 15.41.35 2.jpg

以上でAWS Lambda と Amazon EventBridge の設定が完了したため、みんかぶ投資信託売れ筋ランキングの上位10ファンドの基準価額、利回りが毎朝7時にLINEへと通知される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?