如何使用 Bitquery 获取波场(TRON)项目的实时数据
Bitquery 既支持获取波场生态系统的历史数据,也支持通过实时流(V2 流式 API)获取数据。只需亚秒级的延迟,用户就可以访问波场的实时内存池数据和已确认的数据。
让我们来看看如何为你的波场项目实现实时数据获取。开发者计划为个人兴趣项目提供有限的访问权限,而对于大规模应用来说,商业计划会更合适。
先决条件:
-
GraphQL 订阅。在 Bitquery 集成开发环境(IDE)中构建一个订阅查询。
在你的应用程序中使用流式 API。
WebSocket 地址:wss://streaming.bitquery.io/eap
HTTPS 地址:https://streaming.bitquery.io/eap -
为你的应用程序创建一个访问令牌。使用该密钥进行身份验证。在 Postman 中,结合你的 OAuth 令牌,检查是否能够通过该密钥检索到数据。
示例查询:追踪实时波场代币价格
检查你是否能够在 IDE 中检索到数据。
让我们在 React 和 Python 项目中执行相同的查询。
React 实现
步骤 1: 创建一个自定义钩子,用于建立与 Bitquery API 的连接。接受 4 个参数。
使用setTimeout函数,每隔 1 秒调用 WebSocket 发送一次请求。
const useWebSocket = (url, options, query, maxRetries = 5) => {
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [isConnected, setIsConnected] = useState(false);
const [retryCount, setRetryCount] = useState(0);
useEffect(() => {
const connectWebSocket = () => {
const ws = new ReconnectingWebSocket(url, ["graphql-ws"], options);
ws.onopen = () => {
setIsConnected(true);
setRetryCount(0);
ws.send(JSON.stringify({ type: "connection_init" }));
setTimeout(() => {
ws.send(
JSON.stringify({
type: "start",
id: "1",
payload: { query },
})
);
}, 1000);
};
ws.onmessage = (event) => {
console.log("response ",event.data)
const response = JSON.parse(event.data);
if (response.type === "data") {
setData(response.payload.data);
}
};
ws.onclose = () => {
setIsConnected(false);
if (retryCount < maxRetries) {
setRetryCount(retryCount + 1);
setTimeout(connectWebSocket, 2000);
} else {
setError("Max retry attempts reached. Could not connect to Bitquery.");
}
};
ws.onerror = (event) => {
console.error("WebSocket Error:", event);
setError("WebSocket error occurred. See console for details.");
};
return () => {
ws.close();
};
};
connectWebSocket();
}, [retryCount]);
return { data, error, isConnected };
};
步骤 2: 创建一个名为Trondata的组件,并添加你的订阅查询、URL 以及相关选项,然后将它们作为参数传递给你的自定义钩子。
import React from "react";
import useWebSocket from "./useWebSocket";
import './App.css';
const Trondata = () => {
const query = `YOUR SUBSCRIPTION QUERY HERE`;
const url =
"wss://streaming.bitquery.io/eap?token=ory_*** Your OAuth Token Here ***";
const options = {
maxReconnectionDelay: 10000,
minReconnectionDelay: 1000,
reconnectionDelayGrowFactor: 1.3,
connectionTimeout: 5000,
maxRetries: Infinity,
debug: true,
};
const { data, error, isConnected } = useWebSocket(url, options, query);
步骤 3: 将你的波场数据映射到用户界面(UI)上,查看发布的实时数据。
return (
<div id="trondata">
<h1>Real Time TRON Token Price</h1>
<p id="status">Status: {isConnected ? <span id="connected">Connected</span> : <span id="disconnected">Disconnected</span>}</p>
{error && <p id="status">Error: <span id="error">{error}</span></p>}
{data ? (
<table>
<thead>
<tr>
<th>Time</th>
<th>Currency</th>
<th>Amount In USD</th>
<th>Price In USD</th>
</tr>
</thead>
<tbody>
{data.Tron.DEXTradeByTokens.map((item, index) => (
<tr key={index}>
<td>{item.Block.Time}</td>
<td>{item.Trade.Currency.Symbol}</td>
<td>{item.Trade.AmountInUSD}</td>
<td>{item.Trade.PriceInUSD}</td>
</tr>
))}
</tbody>
</table>
) : (
<p>Loading data...</p>
)}
</div>
);
};
export default Trondata;
输出
Python 实现
步骤 1: 导入所需的库,包括gql客户端、pandas和websockets。用于显示数据的可选模块有table和colorama。
步骤 2: 使用 GraphQL 通过connect设置 WebSocket 连接。
async def run_subscription():
transport = WebsocketsTransport(
url="wss://streaming.bitquery.io/eap?token= Your OAuthToken Here",
headers={"Sec-WebSocket-Protocol": "graphql-ws"})
# 建立连接
await transport.connect()
print("Connected to WebSocket")
try:
while True:
async for result in transport.subscribe(
gql("""Your Query Here""")):
if result.data:
new_data = pd.json_normalize(result.data['Tron']['DEXTradeByTokens'])
new_data = new_data.reindex(columns=expected_columns)
if tron_price.empty:
tron_price = new_data
else:
tron_price = pd.concat([tron_price, new_data], ignore_index=True)
table = tabulate(formatted_rows, headers=colored_headers, tablefmt='pretty', showindex=False)
finally:
await transport.close()
def main():
asyncio.run(run_subscription())
步骤 3: 将result.data打印在格式化的表格中,以便在控制台中查看实时数据。
现在,你已经在你的波场项目中实现了实时数据功能。
Kafka 流
波场区块链数据也可以通过 Kafka 流提供,使用订阅查询作为你所需数据的参考。
自助服务
你还可以在我们的波场浏览器或文档中查看我们预先构建的查询。将 “query” 关键字替换为 “subscription” 以获取实时数据,并集成到你当前的项目中。
参考资料
流式 API 演示链接
Bitquery 文档:如何构建去中心化应用(dApps)?
附加功能
Bitquery 还通过 Discord 和 Telegram 机器人提供原始区块链数据,你可以将其无缝集成到你的应用程序中。
在某一步卡住了?
如果你在查询或实现过程中遇到问题,可以在我们的 Telegram 频道上直接发消息,Bitquery 会在查询和项目方面为你提供帮助。
为你的项目提供实时支持
Bitquery 还可以与你现有的云基础设施(如 AWS、谷歌云)、数据仓库产品进行定制集成。
你也可以通过我们的表单联系我们,说明你的确切特定需求,或者发送邮件至 sales@bitquery.io。