Local_Stock_Main.py
Last updated
Last updated
此為程式進入點,同時控制流程走向。
所有的機敏資訊(包含資料庫連線資訊、API Token、LINE Notify Token)存放在 .bin 檔案中,程式一開始會先解密,之後將個模組所需要的資訊以參數方式傳遞。詳細加解密請參考:。
接下來會先判斷程式執行當日在 [dbo].[Stock_WorkDay]
裡是否為股市營業日,若為營業日才接續以及。
import pyodbc
import pandas
from datetime import datetime
from module.Local_Stock_Meta import *
from module.Local_Stock_Quote import *
from module.Local_Stock_Line_Notify import *
from module.Decrypt_Data import *
'''
==================================================================================================================
Author: Skylar Ma
------------------------------------------------------------------------------------------------------------------
Description: Get the stock price information.
------------------------------------------------------------------------------------------------------------------
Version Date Note
1.0 2023-05-27 Init.
2.0 2024-01-27 Use RSA Decrypt to get .bin connection string.
==================================================================================================================
'''
def main():
# 實作公鑰加密,私鑰解密
server_name = decrypt_data_and_print(r"C:\Local_Stock_Main\info1.bin", r"C:\Local_Stock_Main\private.pem")
database = decrypt_data_and_print(r"C:\Local_Stock_Main\info2.bin", r"C:\Local_Stock_Main\private.pem")
account = decrypt_data_and_print(r"C:\Local_Stock_Main\info3.bin", r"C:\Local_Stock_Main\private.pem")
pwd = decrypt_data_and_print(r"C:\Local_Stock_Main\info4.bin", r"C:\Local_Stock_Main\private.pem")
api_token = decrypt_data_and_print(r"C:\Local_Stock_Main\info5.bin", r"C:\Local_Stock_Main\private.pem")
line_token = decrypt_data_and_print(r"C:\Local_Stock_Main\info6.bin", r"C:\Local_Stock_Main\private.pem")
pic_folder = r"C:\Local_Stock_Main\Chart"
now = datetime.today().strftime('%Y-%m-%d')
# 開啟 SQL Server 連線
cnxn = pyodbc.connect("DRIVER={0};SERVER={1};DATABASE={2};UID={3};PWD={4}".format('SQL Server', server_name, database, account, pwd))
cursor = cnxn.cursor()
# 查詢當日是否為股市營業日
query = "SELECT isWorkDay FROM [Stock_API].[dbo].[Stock_WorkDay] WHERE Date = '{0}';".format(now)
df = pandas.read_sql(query, cnxn)
for index, item in df.iterrows():
if item['isWorkDay'] == "N":
print(f"今天 {now} 非股市營業日")
# 關閉 SQL Server 連線
cursor.close()
cnxn.close()
else:
# step 2. 取得個股基本資訊
main_meta(server_name, database, account, pwd, api_token)
# step 3. 取得當日個股交易資訊
main_quote(server_name, database, account, pwd, api_token)
# step 4. 發送資料
query_table(server_name, database, account, pwd, line_token, pic_folder)
# 關閉 SQL Server 連線
cursor.close()
cnxn.close()
main()