如何使用 Bitquery 获取波场(TRON)项目的实时数据

如何使用 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 还通过 DiscordTelegram 机器人提供原始区块链数据,你可以将其无缝集成到你的应用程序中。
在某一步卡住了?
如果你在查询或实现过程中遇到问题,可以在我们的 Telegram 频道上直接发消息,Bitquery 会在查询和项目方面为你提供帮助。
为你的项目提供实时支持
Bitquery 还可以与你现有的云基础设施(如 AWS、谷歌云)、数据仓库产品进行定制集成。
你也可以通过我们的表单联系我们,说明你的确切特定需求,或者发送邮件至 sales@bitquery.io。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值