iTerm2で会社の株価を表示するコンポーネント作ってみた


何を作ったか

iTerm2でコンソール上にステータスバーを表示することができるようになりました🎉🎉🎉
また、独自に作成したコンポーネント (スクリプト)も登録・利用できるようになりせっかくなのでなにか作ってみようと思い今回作成しました。

(※会社はてきとうに選びました)

どうやって作るか

iTerm2のコンポーネントの作り方は他の記事を参照してください!

大変参考にさせていただきました→ 【iTerm2】ステータスバーのコンポーネントを自作してみた

プログラムとしてはシンプルで、Yahooファイナンスのページから表示したい会社を検索し、情報を埋めているだけです。
以下、ソースコード貼っておきます。

ソースコード

以下、読み替えて使ってください。

  • identifier ... 一意に定まるなにか。
    • 例えば com.rindo.iterm2.stock_info
  • security_code ... 証券コード
#!/usr/bin/env python3

import iterm2
import re
import requests
from bs4 import BeautifulSoup


async def main(connection):
    component = iterm2.StatusBarComponent(
        short_description="XX株価",
        detailed_description="株価を表示します",
        knobs=[],
        exemplar="会社 12億円 ¥3,456 前日比: +78 (+9%)",
        update_cadence=60,
        identifier="{identifier}"
    )

    @iterm2.StatusBarRPC
    async def coro(knobs):
        SECURITY_CODE = {security_code}
        URL = "https://m.finance.yahoo.co.jp/stock?code={}.T"

        res = requests.get(URL.format(SECURITY_CODE))
        soup = BeautifulSoup(res.text, "html.parser")

        company = soup.find("h2", class_="title").string
        price = soup.find("dd", class_="priceFin").string

        cap = soup.find("div", class_="stockDetail").find_all("dd")[12].string
        cap = re.sub(',|百万円', '', cap)
        cap = int(cap) * 1000000
        cap = float(cap) / 100000000

        down = soup.find("dd", class_="deltaDown")
        up = soup.find("dd", class_="deltaUp")
        change = ""
        if up is not None:
            change = up.string
        else:
            change = down.string

        return "{} {}億円 ¥{} 前日比: {}".format(company, cap, price, change)

    await component.async_register(connection, coro)

iterm2.run_forever(main)