公共 API
您可能会发现从公共 API开始会更容易;这有很好的简单语法。您将需要使用JSONConverter来解析 JSON 响应。下载并添加到您的项目后,您需要转到 VBE > Tools > References 并添加对 Microsoft Scripting Runtime 的引用。
下面将向您展示如何实现一个非常简单的类,clsHTTP
来保存 XMLHTTPRequest 对象并公开一个GetJSON
用于检索 JSON 字符串的方法。
然后,我给出了一些解析指定加密货币和美元的 JSON 响应的示例。
这是非常基础的,你会想要开发它,但我知道其中一些 API 的文档可能很难掌握。
注意:这是客户端。我认为您引用的文档可能用于基于服务器端的 Web 应用程序开发。
班级clsHTTP
Option Explicit
Private http As Object
Private Sub Class_Initialize()
Set http = CreateObject("MSXML2.XMLHTTP")
End Sub
Public Function GetJSON(ByVal URL As String) As String
With http
.Open "GET", URL, False
.send
GetJSON = StrConv(.responseBody, vbUnicode)
'Debug.Print GetJSON
End With
End Function
标准模块:
Option Explicit
'Public API: https://coinmarketcap.com/api/
Public Sub GetTickerInfo()
Const BASE_URL As String = "https://api.coinmarketcap.com/v2/ticker/1/?convert="
Dim tickers(), i As Long, http As clsHTTP, jsonString As String, json As Object
tickers = Array("BTC", "ADA", "DASH")
Set http = New clsHTTP
For i = LBound(tickers) To UBound(tickers)
jsonString = http.GetJSON(BASE_URL & tickers(i))
Set json = JsonConverter.ParseJson(jsonString)("data")("quotes")
Debug.Print tickers(i) & " : " & json(tickers(i))("price")
Debug.Print "USD" & " : " & json("USD")("price")
Set json = Nothing
Next
End Sub
专业API
①在字符串中指定多重转换:
“入门计划”仅允许我指定一种转换选项(因此无法轻松查看如何捆绑货币)。如果您有升级的帐户,而不是循环,则可以在下面的代码中传递以下内容。
jsonString = http.GetJSON("https://pro-api.coinmarketcap.com/v1/global-metrics/quotes/latest?convert=BTC,ADA,DASH")
② 获取所有最新的并解析出所需的符号:
警告:就您的信用而言,这是昂贵的。如果可能,您想尝试捆绑呼叫。入门帐户每天有 200 个积分。
您可以使用 JSONConverter 解析出 JSON,您需要的内容如下:
类clsHTPP
:
Option Explicit
Private http As Object
Private Sub Class_Initialize()
Set http = CreateObject("MSXML2.XMLHTTP")
End Sub
Public Function GetJSON(ByVal URL As String) As String
With http
.Open "GET", URL, False
.setRequestHeader "X-CMC_PRO_API_KEY", "yourAPIkey"
.setRequestHeader "Accept-Encoding", "gzip"
.send
GetJSON = StrConv(.responseBody, vbUnicode)
'Debug.Print GetJSON
End With
End Function
标准模块1:
Option Explicit
Public Sub GetTickerInfo()
Dim http As clsHTTP, jsonString As String, json As Object, crypto As Object
Set http = New clsHTTP
jsonString = http.GetJSON("https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest?start=1&limit=5000&convert=USD")
Set json = JsonConverter.ParseJson(jsonString)("data") 'collection
For Each crypto In json 'dictionaries within collection
On Error Resume Next
Select Case crypto("symbol")
Case "BTC", "ADA", "DASH"
EmptyDictionary crypto
End Select
On Error GoTo 0
Next
End Sub
Public Sub EmptyDictionary(ByVal dict As Object)
Dim key As Variant
For Each key In dict.keys
Debug.Print key & " : " & dict(key)
Next
Debug.Print vbNewLine
End Sub
使用具有不同 API 的类:
以下 API 具有我认为您所追求的那种语法:
https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=ADA,USD,DASH,BTC
因此,您可以按如下方式使用该类clsHTTP
,请注意我已放弃使用 JSONConverter,Split
而是使用它来获取您想要的信息。如果您愿意,您仍然可以轻松地使用 JSONConverter。
Option Explicit
Private http As Object
Private Sub Class_Initialize()
Set http = CreateObject("MSXML2.XMLHTTP")
End Sub
Public Function GetJSON(ByVal URL As String) As String
With http
.Open "GET", URL, False
.send
GetJSON = StrConv(.responseBody, vbUnicode)
End With
End Function
标准模块如下:
Option Explicit
Public Sub GetTickerInfo()
Const BASE_URL As String = "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms="
Dim tickers(), http As clsHTTP, jsonString As String, i As Long
tickers = Array("BTC", "ADA", "DASH", "USD")
Set http = New clsHTTP
jsonString = http.GetJSON(BASE_URL & Join$(tickers, ","))
For i = LBound(tickers) To UBound(tickers)
Debug.Print tickers(i) & ":" & Replace$(Split(Split(jsonString, Chr$(34) & tickers(i) & Chr$(34) & ":")(1), ",")(0), "}", vbNullString)
Next
End Sub
即时窗口中的输出(Ctrl+ G):
