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 V2
  2. 三、Python 程式說明

主程式:Local_Stock_Main.py

Last updated 1 year ago

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

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

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

Local_Stock_Main.py
import pyodbc
import pandas
from datetime import datetime
import csv

from module.Local_Encryption import *
from module.Local_Stock_Meta import *
from module.Local_Stock_Quote import *
from module.Local_Stock_Line_Notify import *

def main():
    # 開啟 CSV 檔案
    with open('C:\\Local_Stock_Main\\Local_Server.csv', 'r', encoding='utf-8') as file:
        # 建立 CSV 檔案字典讀取器
        reader = csv.DictReader(file)

        # 讀取 CSV 檔案的內容
        for row in reader:
            # 將 CSV 裡面的加密資料進行解密
            server_name = aes_decrypt(row['SERVER_NAME'])
            database = aes_decrypt(row['DATABASE'])
            account = aes_decrypt(row['ACCOUNT'])
            pwd = aes_decrypt(row['PWD'])
            api_token = aes_decrypt(row['API_Token'])
            line_token = aes_decrypt(row['Line_Token'])
            pic_folder = row['Pic_Folder']




    now = datetime.today().strftime('%Y-%m-%d')

    # 開啟 SQL Server 連線
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server_name+';DATABASE='+database+';UID='+account+';PWD='+ pwd)
    cursor = cnxn.cursor()

    # 查詢當日是否為股市營業日
    query = f"SELECT isWorkDay FROM [Stock_API].[dbo].[Stock_WorkDay] WHERE Date = '{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()
加密
取得個股基本資訊
個股交易資訊