vocus logo

方格子 vocus

AI打造持股法說會Telegram通知:告別錯過重要資訊的投資困境

更新 發佈閱讀 10 分鐘
投資理財內容聲明

台灣上市/櫃公司舉辦法說會,可提供投資人最新的公司營運資訊以及未來展望,即便佛系持股也不應該偏廢,過往由於資訊片斷化和自己的懶散常常漏掉持股公司的法說會消息,前幾天利用AI透過「開規格」的對話方式開發「持股法說會Telegram通知」小工具,利用Telegram(即時通訊工具)將個人持股和當天有舉辦法說會的資訊推播給自己,不漏掉關注公司的法說會消息,試行幾天體感覺得方便。

#!/usr/bin/env python3
"""
功能:從 Yahoo 奇摩股市台股法說會行事曆中抓取今日活動,
並比對與使用者 portfolio (股票代號) 是否有匹配,
若有則發送 Telegram 訊息通知「今天有開法說會」

使用方法:
python script.py portfolio.cfg

portfolio.cfg 範例如下:
5871 中租-KY
3152 璟德
6177 達麗
"""

import os
import sys
import requests
from bs4 import BeautifulSoup
from datetime import datetime
from dotenv import load_dotenv

# 讀取環境變數(優先 .env,找不到才用 export
load_dotenv()
BOT_TOKEN = os.getenv("BOT_TOKEN")
CHAT_ID = os.getenv("CHAT_ID")

def send_telegram_message(message):
url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": message}
try:
r = requests.post(url, data=payload)
r.raise_for_status()
print("Telegram 訊息發送成功")
except Exception as e:
print(f"Telegram 訊息發送失敗: {e}")

def load_portfolio(file_path):
portfolio_codes = set()
try:
with open(file_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line:
continue
parts = line.split()
if parts:
portfolio_codes.add(parts[0])
except Exception as e:
print(f"讀取 portfolio 檔案錯誤: {e}")
return portfolio_codes

def main():
if len(sys.argv) < 2:
print("Usage: python script.py portfolio.cfg")
sys.exit(1)

portfolio_file = sys.argv[1]
portfolio_codes = load_portfolio(portfolio_file)
print("Portfolio 股票代號:", portfolio_codes)

url = "https://tw.stock.yahoo.com/calendar/earnings-call"

try:
response = requests.get(url)
response.raise_for_status()
except Exception as e:
print(f"無法取得網頁資料: {e}")
return

soup = BeautifulSoup(response.text, "html.parser")
# 取得第一個 class 包含 "calendarDetail"<section>
section = soup.find("section", class_=lambda x: x and "calendarDetail" in x)
if not section:
print("找不到指定的 section (class 包含 calendarDetail)")
return

# 取得今日日期,格式需與網頁日期格式一致
today_str = datetime.now().strftime("%Y/%m/%d")
print(f"今日日期:{today_str}\n")

ul = section.find("ul")
if not ul:
print("找不到活動清單 (<ul> 元素)")
return

events = ul.find_all("li")
if not events:
print("活動清單中未發現任何資料")
return

matching_codes = []
for li in events:
container = li.find("div")
if not container:
continue
cols = container.find_all("div", recursive=False)
if len(cols) < 2:
continue

# 取出第二欄(index 1)的日期資訊,格式如 "2025/03/18 14:00"
date_text = cols[1].get_text(strip=True)
event_date = date_text.split()[0]
if event_date != today_str:
continue

company_col = cols[0]
# 股票代號通常在內部含 "Fz(14px)"<span>
code_span = company_col.find("span", class_=lambda x: x and "Fz(14px)" in x)
if not code_span:
continue

full_stock_code = code_span.get_text(strip=True)
stock_code = full_stock_code.split('.')[0]

if stock_code in portfolio_codes:
company_div = company_col.find("div", class_=lambda x: x and "Fw(600)" in x)
code_span = company_col.find("span", class_=lambda x: x and "Fz(14px)" in x)
if company_div and code_span:
company_name = company_div.get_text(strip=True)
matching_codes.append(stock_code + " " + company_name)
else:
matching_codes.append(stock_code)

if matching_codes:
matching_codes = sorted(set(matching_codes))
message = "今天有開法說會的股票:\n" + "\n".join(matching_codes)
print("Telegram 訊息內容:\n", message)
send_telegram_message(message)
else:
print("今日無您 portfolio 中的法說會活動。")

if __name__ == '__main__':
main()

有興趣自行取用


留言
avatar-img
蘇波麟投資與生活
21會員
56內容數
佛系投資.估值優先
2025/04/09
本文分享2024年10月至2025年3月VOO、SCZ、TLT的月度動量數據以及交易紀錄。回顧此期間的投資表現,發現紀律操作可以避開4月的大跌。
Thumbnail
2025/04/09
本文分享2024年10月至2025年3月VOO、SCZ、TLT的月度動量數據以及交易紀錄。回顧此期間的投資表現,發現紀律操作可以避開4月的大跌。
Thumbnail
2025/02/26
分享個人使用預估EPS自動化工具及 Telegram 通知提升效率的經驗,以紅、橘、綠燈號顯示股價與預估便宜價/昂貴價的比較結果。
Thumbnail
2025/02/26
分享個人使用預估EPS自動化工具及 Telegram 通知提升效率的經驗,以紅、橘、綠燈號顯示股價與預估便宜價/昂貴價的比較結果。
Thumbnail
2024/10/22
加速防禦雙動能策略是一個有效的風險管理方法,透過結合相對動能和絕對動能兩種方式,讓投資者在市場上漲時能夠抓住機會,而在市場下跌時則能降低風險,從而達到「進可攻,退可守」的效果。
Thumbnail
2024/10/22
加速防禦雙動能策略是一個有效的風險管理方法,透過結合相對動能和絕對動能兩種方式,讓投資者在市場上漲時能夠抓住機會,而在市場下跌時則能降低風險,從而達到「進可攻,退可守」的效果。
Thumbnail
看更多
你可能也想看
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
Thumbnail
加入免費👉Discord群組/TG Channel接收市場要聞、產業動態和更新通知。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News