前一篇我們透過各家交易所的文件確定了我們所需要的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出來的資料會是字串,不是字典,無法被使用。
結果:
____
另外
# 呼叫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,需要另外處理。