發現 app service並不是最好的選擇,我們還有更好的選擇可以使用。
使用 Azure Functions:
https://docs.microsoft.com/zh-tw/azure/azure-functions/functions-overview
首先要準備好:
Azure 訂用帳戶
。Visual Stadio Code
安裝Azure Functions
直接在VS Code內安裝:
安裝完畢後,就可以看到旁邊多一個icon:
然後就登入Azure,他會跳轉到網頁中,登入完成後就會告訴我們完成,並可關閉視窗:
當然還要安裝Azure Functions Core Tools
,不安裝的話,執行前會有這樣的錯誤提示:
可參考官方教學:2:建立適用於 Azure Functions 的 Python 函式,這邊先不管測試執行,只要看到這個就表示順利完成:
這個部分,希望可以定期去抓每天的盤後資訊,所以就以Day16_saveApiStockToDb.py為基準發展。我們會改範本產生的__init.py__
這個檔案
安裝必要的套件,大部分都是在【Day16】每日資料匯入資料庫看過,不過多了logging
和azure.functions
,其中logging
是方便我們在server端看log,而azure.functions
是官方建議import進來的。
import logging
import requests
import pandas
import pyodbc
import datetime
import time
from io import StringIO
import azure.functions as func
create_new_header
和save_data_to_azure_db
是原本就有的function,有變動的地方就只是把print變成logging
。
原則上是跟之前的做法都一樣,只是多了個回傳值,因為我們是http request的方式進來,當然要有個http response回傳,告訴前端處理的狀況。因此我們接收儲存到Azure SQL server的結果,根據這個結果回傳值。
回傳的程式碼就加上:
if r:
return func.HttpResponse(
f"{datetime.datetime.now().strftime('%Y-%m-%d')}: stock recored.",status_code=200)
else:
return func.HttpResponse(
f"{datetime.datetime.now().strftime('%Y-%m-%d')}: stock recored FAILSE.",status_code=400)
當成功的時候就記錄說成功囉~
然後檢查我們的Azure SQL server是否真的有資料進來,看看是不是今天寫入的:
看來是的,建立時間為:2020-10-08 15:50:59.533
,換算成UTC+8
就是今天!
後記:
已經第30天,已達標鐵人賽的目標,但是還沒有比較自動化收集資料,後續將會寫到一個段落再結束它!
會以比較沒有壓力的方式進行,這幾天幾乎都忙得不像話XDD