我們已經取得證交所資料,但是在金融分析中,需要大量的歷史資料。總不能每次都ㄧ個月份一個月份的去新增吧?
這次就是要用簡單的批次做法,把程式碼改寫方便我們更自動的取得與處理資料。
本篇程式碼:Day19_batchSaveApiStockToDb.py
首先把我們主要的作業變成一個funciton,再結合先前的取欄位名稱
和匯入到Azure SQL server
,就是三個主要功能。
這邊的做法,就是帶入股票代碼
以及年月
,格式為yyyymm
,到時候股票和日期都是可以變動的數字。
def get_stock_history_data(stock_symbol, his_month):
# API位置
# address = "http://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data"
stock = stock_symbol
date = his_month
address = f"https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date={date}&stockNo={stock}"
# 取得資料
response = requests.get(address)
# 解析
# 有幾個部分:stat, date, title, fields, data, notes
data = response.text # 這是json格式的資料
a_json = json.loads(data) # 轉成dict
df = pandas.DataFrame.from_dict(a_json["data"]) # 轉成dataframe
# 修改欄位名稱
new_headers = create_new_header(a_json["fields"])
df.columns = new_headers # 設定資料欄位的名稱
# print(df)
_ = save_data_to_azure_db(stock, df)
print("===finished===")
我們這邊互叫上面的程式。
時間區間使用pandas.date_range()
,可以設定開始
與結束
還有時間區間
,以及時區
。這邊使用從2010-1-1
開始,一直到今天,而時間區間為一個月
。
這樣我們就有股票和所要取得的月份,如此可以順利的呼叫API並把資料放進去囉
# 時間不能太早:{"stat":"查詢日期小於99年1月4日,請重新查詢!"}
# 取得從2010-1-1到現在的所有月份,用此可以取得資料
date_list = (
pandas.date_range(
"2010-1-1",
datetime.datetime.now().strftime("%Y-%m-%d"),
freq="MS",
tz="Asia/Taipei",
)
.strftime("%Y%m%d")
.tolist()
)
print(date_list)
for data_date in date_list:
print(f"start({datetime.datetime.now().strftime('%m%d-%H%M%S')}): {data_date}")
get_stock_history_data("2330", data_date)