Revision history and IPFS entry, back to latest
Makzan
IPFS What is this

Content Hash

Python 與 JSON API 應用入門:使用 Python 取得現時 LikeCoin 幣價

Makzan
·
·
在以下的例子中,我們從取得 API 網址、試運行 API、格式化 JSON 輸出、下載數據、把數據變成文字輸出。一步步的實現一個 Python 讀取網絡數據的小小程式。

在以下的例子中,我們從取得 API 網址、試運行 API、格式化 JSON 輸出、下載數據、把數據變成文字輸出。一步步的實現一個 Python 讀取網絡數據的小小程式。

最終代碼如下:

import requests
url = "https://api.coingecko.com/api/v3/simple/price?ids=osmosis,likecoin&vs_currencies=usd"

res = requests.get(url)
data = res.json()

like_usd = data["likecoin"]["usd"]
osmo_usd = data["osmosis"]["usd"]

result = f"現時 LIKE 兌美元為 {like_usd},OSMO 兌美元為 {osmo_usd}。"
print(result)

學習使用 CoinGecko API 服務查詢幣價

幣價的查詢,我們可以使用 CoinGecko,通過 Python 配合第三方 requests 套件,可以很方便地取得 JSON 格式的 API 數據。

面對任何新認識的 API 服務,首先我們可以去了解一下,例如如何認證登入、價格等。一般 API 服務會要求使用者注冊帳號及設有請求次數限額。

https://www.coingecko.com/en/api/pricing

CoinGecko 也有。其免費版不用注冊,但公平使用下,大約不超過每分鐘 50 次請求就可以了,而且也要對外說明你使用了他們的服務。

其次,我們遇到新 API 庫,也可以先讀一讀他們的說明文檔,看看是否能如願以償,合自己用。

https://www.coingecko.com/en/api/documentation

從說明文檔可見,CoinGecko 的 API 有有多不同的數據提供,可見將來我們可以使用這個 API 庫來創造更多的應用。但太多功能也有壞處,就是較難找到我們需要的那個 API 位置。幸好,CoinGecko 把最基本的詢價 API 放到列表的最頂了。就是 /simple/price

CoinGecko API 說明文件

CoinGecko 的文檔可以直接嘗試 API。揀選 /simple/price API 後,再按 Try it out,然後按指示填入兩個必要的參數:ids 及 vs_currencies。憑參數名稱最後的 s,及說明文字的 “comma separated”,我們知道兩個參數都可以給多多個幣種。

試運行 API

話說,CoinGecko 的密碼貨幣 id,不是短寫的,而是長寫,即 likecoin 及 osmosis

都填入了參數後,便可以執行及得出試運行的 API 結果:是一個結構直觀的數據結構。

試運行 API 結果

通過測試,我們可以得出今次例子的 API End Point 網址是:

https://api.coingecko.com/api/v3/simple/price?ids=osmosis,likecoin&vs_currencies=usd

當我們拿着 JSON API 網址,想預覽數據時,一般我們會找一些 JSON Formatter 來使閱讀 JSON 更方便。但其實 Firefox 瀏覽器也內置實用的 JSON 格式化瀏覽工具,除了方便閱讀外,預到太大的返回值時,亦可以做搜尋篩選。

使用 Firefox 瀏覽器輕鬆拆解返回之數據結構

Python 開發環境

接下來到 Python 部份了。

學習上,我喜歡使用 Anaconda 配合 Jupyter Notebook,因為可以隨時另開一格測試代碼而不影響正在寫的代碼結構。(當然,你使用其他 Python 開發環境也可以跟隨)

我們這次會使用 requests 的第三方庫。我們 import requests,如果出現找不到 requests 的錯誤,就是未安裝,可以通過 pip install requests` 指令來安裝。

接著,我們可以調用 requests.get(url) 。 從網絡中存取資源,主要的操作要麼是 GET,要麼是 POST,POST 一般是表單發出去的時候用,而 GET 則是取得資源時,例如在瀏覽器網址中打入網址按 Enter,就是一個 GET 請求。

所以我們使用的是 requests.get 請求。請求發出後,我們把回來的回應記下並使用。一於先把回應印出來望一望,看見狀態為 200 就是返回成功了,除了 200,4 字頭和 5 字頭的都是有錯誤發生,例如最常見的 404 找不到等。

成功返回

返回狀態是 200,代表正常返回值了,那數據值在哪?可以通過 res.text 來查看返回的內容,由於是 JSON,所以亦可以直接通過 res.json() 把返回數據轉換成 Python 的 dict 字典類型。我把數據儲存在 data 變量內。這時我們便可以通過 data["likecoin"]["usd"] 及 data["osmosis"]["usd"] 來取得數據。

成功取得 LIKE 和 OSMO 兩個兌美元幣價數值

下廚編程法:材料、加工、上菜

取得我們要的值後,就像下廚般,材料(data)準備好了,加工完成了(like_usd 及 osmo_usd),最後一步便是上菜,即是把結果輸出。

我先試試用一個句字的方式把內容印出來,例如:「現時 LIKE 兌美元為 0.4,OSMO 兌美元為 5.91。」

有了輸出構想後,將需要動態的數值部份加上 {} 及對應變量名稱,再在字串最前面加上 f,就變成了動態格式化文字(f-string)了。

上菜:把數值按需求擺放好,再輸出。

至此,一個基本的 Python 請求 JSON API 以取得最新 LIKE 及 OSMO 幣價的代碼便完成了。

最終代碼如下:

import requests
url = "https://api.coingecko.com/api/v3/simple/price?ids=osmosis,likecoin&vs_currencies=usd"

res = requests.get(url)
data = res.json()

like_usd = data["likecoin"]["usd"]
osmo_usd = data["osmosis"]["usd"]

result = f"現時 LIKE 兌美元為 {like_usd},OSMO 兌美元為 {osmo_usd}。"
print(result)

可以線上執行試運行的版本:

https://replit.com/@makzan/Example-CoinGecko-Price-API

— 麥誠 Makzan,2021-11-24。


我是麥誠軒(Makzan),除了正職外,平常我要麼辦本地賽與辦世界賽,要麼任教編程與網站開發的在職培訓。現正轉型將面授培訓內容寫成電子書、網上教材等,至今撰寫了 7 本書, 2 個視頻教學課程。

我逢星期三會不定期推出 #編程星期三,介紹 Python 或不同的編程技巧,包括自動化辦公文件處理、及網絡爬蟲等。

如果我的文章有價值,請訂閱贊助我持續創作分享。

訂閱贊助:https://liker.land/thomasmak/civic

CC BY-NC-ND 2.0