Side Project Document
  • 如果沒能一次成功,那就叫它 1.0 版吧。
  • Stock Price for LINE Notify V1
    • 前言
    • 一、申請玉山富果 API
    • 二、申請 LINE Notify Token
    • 三、環境架設與資料表設定
    • 四、SSIS 設計
      • SSIS 流程圖
      • Move to History Table & Truncate Table
      • Foreach Loop to Get API
      • Lookup File - Chart
      • Lookup File - Quote
      • Join Table to Result Set
      • Post Result Set to LINE Notify
      • Delete Over 3 days Files
      • 事件處理常式
    • 五、安裝教學
  • Stock Price for LINE Notify V2
    • 前言
    • 一、軟體架構與流程圖
    • 二、環境架設與資料表設定
    • 三、Python 程式說明
      • 主程式:Local_Stock_Main.py
      • 取得個股基本資訊:Local_Stock_Meta.py
      • 取得個股交易資訊:Local_Stock_Quote.py
      • 將折線圖發送至 LINE Notify:Local_Stock_Line_Notify.py
      • 資料解密:Local_Encryption.py
      • 排程設定
  • Stock Price for LINE Notify V3
    • 前言
    • 一、軟體架構與流程圖
    • 二、環境架設與資料表設定
    • 三、Python 程式說明
      • Local_Stock_Main.py
      • Local_Stock_Meta.py
      • Local_Stock_Quote.py
      • Local_Stock_Line_Notify.py
      • Create_RSA_Key.py
      • Encrypt_Data.py
      • Decrypt_Data.py
      • 排程設定
      • 加碼:.py 打包成 .exe 執行檔
Powered by GitBook
On this page
  1. Stock Price for LINE Notify V3
  2. 三、Python 程式說明

Local_Stock_Main.py

Last updated 1 year ago

此為程式進入點,同時控制流程走向。

所有的機敏資訊(包含資料庫連線資訊、API Token、LINE Notify Token)存放在 .bin 檔案中,程式一開始會先解密,之後將個模組所需要的資訊以參數方式傳遞。詳細加解密請參考:。

接下來會先判斷程式執行當日在 [dbo].[Stock_WorkDay] 裡是否為股市營業日,若為營業日才接續以及。

Local_Stock_Main.py
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()
加密
取得個股基本資訊
個股交易資訊