【筆記】用Python呼叫API (四):呼叫API模組化

更新於 發佈於 閱讀時間約 10 分鐘
上一篇我們完成所有預定要呼叫API的程式,但因爲寫法結構導致不好管理,此篇會透過函式進行模組化,減少重覆的程式碼。

【筆記】用Python呼叫API (三):完成剩下的呼叫API 的內容

首先導入需要的套件

import requests
import json
from datetime import datetime
from bs4 import BeautifulSoup

API跟爬蟲畢竟不是一樣的東西,寫法不同,沒有重複部分,所以還是會分開寫

接著,定義函式(Function):

# 定義名為​usdt_twd_api的函式,這個函式可以接收三個數據
# 分別是url、headers、body,其中headers、body可以是空的
def usdt_twd_api(url, headers=None, body=None):
# 如果headers是空的,傳空字典
if headers is None:
headers = {}
# 如果body是空的,傳空字典
if body is None:
body = {}

if body:
# 如果body不是空的,requests使用post
response = requests.post(url, headers=headers, json=body)
else:
# 如果body是空的,requests使用get
response = requests.get(url, headers=headers)
# 因為GET跟POST的請求都是定義為response,所以無論是透過GET還是POST請求,都會返回到 response
return response

這裡我們用了def跟return,先透過def定義一個函式,函式回傳的結果可以透過return存在response,這個架構可以處理呼叫get、post方法的api,但我們這次只使用到get方法就是了

接下來,把請求的網址放上來:

# 定義一個變數名為 api_array,它用來放各個網址的陣列
api_array = [

{
"name": "ACE",
"url": "https://ace.io/polarisex/oapi/v2/list/tradePrice",
"headers": None,
"body" : None
},

{
"name": "MAX",
"url": "https://max-api.maicoin.com/api/v2/tickers",
"headers": None,
"body" : None
},

{
"name": "BitoPro",
"url": "https://api.bitopro.com/v3/tickers/usdt_twd",
"headers": None,
"body" : None
},
]

這裡用了陣列,呼叫由上到下依序呼叫,這樣如果需要加或是改,只要改這個位置就可以了

再來就是呼叫API跟處理每個API需要取出的值:

def process_response(api_name, data):
# ACE,USDT/TWD的資料結構處理
if api_name == "ACE":
specific_value = data.get("USDT/TWD").get("last_price")
return specific_value
# MAX,USDT/TWD的資料結構處理
if api_name == "MAX":
specific_value = data.get("usdttwd").get("last")
return specific_value
# BitoPro,USDT/TWD的資料結構處理
if api_name == "BitoPro":
specific_value = data.get("data").get("lastPrice")
return specific_value
#如果api_name 不是ACE、MAX、BitoPro,回傳None
return None

把所有三個交易所幣對價格取出的值都放在specific_value,底下加一個防呆,如果不是設定的三個交易所回None,因為如果不回任何東西,即便現在可能沒問題,但也會在未來某天修改別的地方時,出現不可預期的錯誤

接下來要開始把數據印出來了,先放上時間:

# 獲取當下時間
current_time = datetime.now()

# 格式化當下時間並印出
formatted_time = current_time.strftime("%Y-%m-%d %H:%M:%S")
print(f"\n請求時間:{formatted_time}\n")

這塊都沒改,就不講了

再來利用for迴圈逐一讀取api_array 這個我們上面放網址的陣列:

# 利用for迴圈遍歷​api_array內的url、headers、body
for api_info in api_array:
url = api_info["url"]
headers = api_info["headers"]
body = api_info["body"]
# ​定義一個變數為response,它調用了usdt_twd_api函式,函式裡面執行了API請求
# 數據資料來源是api_array,已透過for迴圈撈過一輪,包含url、headers、body
response = usdt_twd_api(url, headers=headers, body=body)

定義了api_info為for的變數,根據設定,我們可以拿api_info來處理API的相關資訊,包含url、headers、body

接下來就是響應是否成功跟逐一印出資料:

# 如果程式狀態回應是200,​那回應將會解析成json格式的數據,存在變數data中
if response.status_code == 200:
data = response.json()
# 定義一個變數,它調用了process_response函式,它是用來取值我們要的特定值
specific_value = process_response(api_info.get("name"), data)

# 檢查api_info中的name是否有ACE、MAX、BitoPro,如果有就進入那塊程式碼
if api_info.get("name") in ["ACE","MAX","BitoPro"]:
# 被轉成浮點數後,格式化限制為小數點三位
formatted_name="{:.3f}".format(float(specific_value))
# 印出api_info中name對應的值,分別是ACE、MAX、BitoPro,並印出設定小數點三位後的價格
print(f"{api_info.get('name')} 的USDT/TWD匯率: \n{formatted_name}")

else:
print("壞了,根本就不能用啊,ERROR CODE:",response.status_code)

ACE、MAX、BitoPro的數值會都需要格式化小數點三位的原因是,忘記是ACE還MAX,有些回傳的訊息如果小數點三位為0的話,會不顯示,為了好看,就都顯示三位,這樣長度就一樣了


最後再把前幾篇完成的爬蟲放在下面就完成了

# 獲取網頁的HTML內容
url = "https://rate.bot.com.tw/xrt?Lang=zh-TW"
response = requests.get(url)
html_doc = response.text

# 使用Beautiful Soup解析HTML內容
soup = BeautifulSoup(html_doc, 'html.parser')

# 找到該元素
element = soup.find('td', {'data-table': '本行即期賣出', 'class': 'rate-content-sight'})

# 提取出數字
number = element.text.strip()
formatted_number = "{:.3f}".format(float(number))
print(f"台灣銀行 的USD/TWD匯率:\n{formatted_number}\n")

結果:

raw-image


留言
avatar-img
留言分享你的想法!
avatar-img
冬霞的沙龍
22會員
18內容數
冬霞的沙龍的其他內容
2023/10/22
用程式協助尋找殖利率跟可以進場的點位
Thumbnail
2023/10/22
用程式協助尋找殖利率跟可以進場的點位
Thumbnail
2023/10/15
利用git把檔案推到github上
Thumbnail
2023/10/15
利用git把檔案推到github上
Thumbnail
看更多
你可能也想看
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
常常被朋友問「哪裡買的?」嗎?透過蝦皮分潤計畫,把日常購物的分享多加一個步驟,就能轉換成現金回饋。門檻低、申請簡單,特別適合學生與上班族,讓零碎時間也能創造小確幸。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
API(Application Programming Interface,應用程式介面)可以視為不同軟體系統之間的溝通橋梁,讓雙邊可以交換數據並執行各種功能。這篇會記錄產品經理一定要知道的幾個 API 概念,像是常見的錯誤代碼以及不同的 HTTP 方法(如 PUT、GET、POST)和實際案例說明
Thumbnail
API(Application Programming Interface,應用程式介面)可以視為不同軟體系統之間的溝通橋梁,讓雙邊可以交換數據並執行各種功能。這篇會記錄產品經理一定要知道的幾個 API 概念,像是常見的錯誤代碼以及不同的 HTTP 方法(如 PUT、GET、POST)和實際案例說明
Thumbnail
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。
Thumbnail
在這一課中,我們將學習如何在Python中使用requests模塊發送HTTP請求。 發送GET請求requests.get() 函數用於發送GET請求。
Thumbnail
在這一課中,我們將學習如何在Python中使用requests模塊發送HTTP請求。 發送GET請求requests.get() 函數用於發送GET請求。
Thumbnail
呼叫API,並透過API響應的內容取到需要的值
Thumbnail
呼叫API,並透過API響應的內容取到需要的值
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
Thumbnail
在第五課中,我們將探討 Python 中的函式(functions)。 函式是一種讓我們可以將程式碼塊組織成一個獨立、可重複使用的單元的方式。函式可以接受參數 (arguments) 並返回一個結果。
Thumbnail
前端和後端溝通,最常用就是 get 和 post 後端 先在 django 專案這邊的 views.py 內建立一個讓前端以 get 方法呼叫的 api function1 內的第一個參數是前端的 request,之後第二個參數第三個參數可以隨便你設,這倒是沒有限制 用 request.GET 這個
Thumbnail
前端和後端溝通,最常用就是 get 和 post 後端 先在 django 專案這邊的 views.py 內建立一個讓前端以 get 方法呼叫的 api function1 內的第一個參數是前端的 request,之後第二個參數第三個參數可以隨便你設,這倒是沒有限制 用 request.GET 這個
Thumbnail
你想像有一個黑盒子,它會跟你說輸入一個input,而會得出什麼Output,而你要把這個Input傳遞給黑盒子是透過http的方式
Thumbnail
你想像有一個黑盒子,它會跟你說輸入一個input,而會得出什麼Output,而你要把這個Input傳遞給黑盒子是透過http的方式
Thumbnail
Restful API 其實就是開放一個 EndPoit 的網路接口給其他人使用,並將要做的事情封裝在該接口內,不需要知道真實運作狀況,只要得到答案即可。
Thumbnail
Restful API 其實就是開放一個 EndPoit 的網路接口給其他人使用,並將要做的事情封裝在該接口內,不需要知道真實運作狀況,只要得到答案即可。
Thumbnail
網址是 API 的門面,大家使用 API 的第一步就是要看它。 第一眼就要讓人就知道這隻 API 在做什麼? 甚至因為遵循標準(目前 REST 是主流),可以類推 API 應該會有什麼功能等等。
Thumbnail
網址是 API 的門面,大家使用 API 的第一步就是要看它。 第一眼就要讓人就知道這隻 API 在做什麼? 甚至因為遵循標準(目前 REST 是主流),可以類推 API 應該會有什麼功能等等。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News