更新於 2023/08/23閱讀時間約 6 分鐘

【筆記】用Python呼叫API (二):呼叫API

前一篇我們透過各家交易所的文件確定了我們所需要的API,此篇會根據獲得的文件進行呼叫我們需要的API資料,並取出我們要的資料,先處理ACE的部分。

根據【筆記】用Python呼叫API (一):透過API文件找到需要的API 取得的資訊進行呼叫API,首先先匯入我們需要的套件

# ​用於簡化發送http請求和處理http響應
import requests

# 只有價格是沒有意義的,配上時間才能比較價格是多少
from datetime import datetime

# 看API資料結構時候會用到​
import json

接著,先不寫時間,把呼叫API的流程建立起來

# 定義一個變數為url,把網址放在裡面​
url = "https://ace.io/polarisex/oapi/v2/list/tradePrice"

# 定義一個變數為​response,用requests的get方法,請求url裡面的網址,它會響應這個請求運行的數據跟元數據
response = requests.get(url)

# 如果程式狀態回應是200,​那回應將會解析成json格式的數據,存在變數data中
if response.status_code == 200:
data = response.json()

# 如果不是狀態回應不是200,則印出狀態碼
else:
print("壞了,根本就不能用啊,ERROR CODE:",response.status_code)

# 印出來​
print(data)

結果:

有點難看,我們先讓它排列一下才能取出要的值,這時候就需要用到額外導入的json

# 定義一個變數為url,把網址放在裡面​
url = "https://ace.io/polarisex/oapi/v2/list/tradePrice"

# 定義一個變數為​response,用requests的get方法,請求url裡面的網址,它會響應這個請求運行的數據跟元數據
response = requests.get(url)

# 如果程式狀態回應是200,​那回應將會解析成json格式的數據,存在變數data中
if response.status_code == 200:
data = response.json()
#json.dumps將程式作用的對象(像是 字典、列表)進行格式化輸出
formatted_data = json.dumps(data, indent=4, sort_keys=True)

# 如果不是狀態回應不是200,則印出狀態碼
else:
print("壞了,根本就不能用啊,ERROR CODE:",response.status_code)

# 印出來​
print(formatted_data)

這裡用了json.dumps() 函數中的indent跟sort_keys參數

分別代表的意義如下

indent:用於指定 JSON 字符串的縮進級別,讓資料比較好讀,數字代表著會縮進多少空格。

sort_keys:JSON 的輸出中的鍵值(keys)是否按照字母排序,後面填布林值(True或是False)。


結果:


這樣看起來就好觀察了,這裡我們會發現結構是一個大括號{ }包住不同的幣對,不同的幣對裡面包著各自的資訊,裡面的資訊我們需要的是last_price,所以要改寫成這樣:

import requests
from datetime import datetime


url = "https://ace.io/polarisex/oapi/v2/list/tradePrice"
response = requests.get(url)

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

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

# 如果程式狀態回應是200,​那回應將會解析成json格式的數據,存在變數data中
if response.status_code == 200:
data = response.json()
# 定義變數為ACE_usdt_twd,它取得data內USDT/TWD的last_price
ACE_usdt_twd = data.get("USDT/TWD").get("last_price")

# 變數字串化
print(f"ACE 的USDT/TWD匯率: {ACE_usdt_twd}")

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


原本寫的 formatted_data = json.dumps(data, indent=4, sort_keys=True) 要註解掉或是刪掉,因為經過dumps出來的資料會是字串,不是字典,無法被使用。

結果:

原本的地方多了一個逗點,沒看到Orz,放新的


____

另外

# 呼叫​get("USDT/TWD"),再呼叫get("last_price")
ACE_usdt_twd = data.get("USDT/TWD").get("last_price")

上面這條可以寫成下面這樣

#​ 索引data內的["USDT/TWD"],再索引["last_price"]
ACE_usdt_twd = data["USDT/TWD"]["last_price"]


一樣都可以取得我們要的值,只是差別在於用上面的方式,如果我們要取得的鍵突然不見了,它會回傳 None,下面的方式同樣的情況會引發KeyError,需要另外處理。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.