寫完一陣子發票查詢 API,突然某天在網路上搜尋到 tw_invoice,真是相見恨晚
(不過也不算太晚XD) 雖然作者沒有提供如何使用的說明,但只要理解 class 怎麼寫其實很好上手。
https://github.com/tomy0000000/tw-invoice
最重要的可以查看 tw_invoice/app_client.py
起手式如下,將財政部申請的 ID 和 KEY 提供 AppAPIClient 做初始化,我們就可以開始用他的方法
import tw_invoice
from datetime import date
twi = tw_invoice.AppAPIClient(app_id="YOUR_APP_ID",
api_key="YOUR_APP_KEY")
接著我們要看有哪些方法的話可以查看 get 開頭的方法
如下,我們僅需要輸入 function 的參數 invoice_term 就可以呼叫該方法
def get_lottery_numbers(
self, invoice_term: str
) -> Union[LotteryNumberResponse, dict]:
"""查詢中獎發票號碼清單 v0.2"""
URL = build_api_url("invapp")
VERSION = 0.2
if not validate_invoice_term(invoice_term):
raise ValueError(f"Invalid invoice_term: {invoice_term}")
data = {
"version": VERSION,
"action": "QryWinningList",
"invTerm": invoice_term,
"UUID": self.uuid,
"appID": self.app_id,
}
results = check_api_error(
self.session.post(URL, data=data, timeout=self.timeout)
)
if not self.skip_validation:
results = LotteryNumberResponse.parse_obj(results)
return results
還記得昨天查紙本電子發票嗎?我們要輸入一大堆參數,包含 version、generation、uuid 等等,這些參數你通通不用管,套件已經包你準備好啦!
此外,這個套件支援重複嘗試(而這個嘗試機制是用 HTTPAdapter),不用像昨天自己額外寫一個裝飾器。僅需要在初始化的時候提供 max_retries 的參數,如果沒有提供也沒關係,default 是 20 也是一個不小的數字。
接著明天我會介紹怎麼使用查詢紙本電子發票,敬請期待!