基于Python与GraphQL的链上数据分析实战

概述

读者可前往我的博客获得更好的阅读体验。

本文主要介绍如何通过免费且高效的的基于GraphQL的basement进行部分链上数据分析实战。本文不要求读者具有GraphQL相关经验,但要求读者会使用Python中的Pandas库,这是本文主要使用的数据分析工具。换言之,本文适用于了解数据分析而不了解链上数据获取的读者。本文会涵盖以下内容:

  1. GraphQL检索数据基础入门
  2. Basement的基础API实战

在阅读本文前,读者最好安装一个支持GraphQL请求方法的API调试工具,在此处,我个人使用的是Postman软件,但读者选择其他软件亦可。本文使用了新兴 Web3 链上数据API提供商basement,此处我们使用的是免费版,无需 API Key 等配置,具体限制参考下图:

Basement Price

关于Basement的优势可参考Mirror 文章

第一个请求

在进行第一个请求前,我们需要了解关于GraphQL最基础的一些概念,首先GraphQL实质上是一种类似SQL的数据检索语言,当然其学习难度低于SQL。当我们进行一次GraphQL请求时,我们将GraphQL语言编写的检索方法放在POSTbody中,直接发送POST请求到终端API节点即可。

我们给出一个来自GraphQL 官网的检索示例,索引请求如下:

{
  hero {
    name
  }
}

返回如下:

{
   
  "data": {
   
    "hero": {
   
      "name": "R2-D2"
    }
  }
}

由此可见,GraphQL的检索是简单且易读的,基本遵从以下规则:

{
    所需要的对象 {
        对象属性
    }
}

值得注意的是在现实世界中存在大量对象嵌套的情况,比如以下数据:

{
   
    "data": {
   
        "address": {
   
            "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
            "profile": {
   
                "name": "vitalik.eth"
            }
        }
    }
}

可抽象化为以下情况:

{
    data对象 {
        address 对象 {
            address 属性
            profile 对象 {
                name 属性
            }
        }
    }
}

关于如何获得这些信息,一个方法是查询文档,本次实战使用的Basement它的文档中给出了这些信息,如下图:
Basement Object Doc

我们可以通过点击其中的蓝色链接确定每个Object中的属性是否嵌套了另一个Object

显然,在以太坊区块链上遍历获得address数据是不显示的,我们在此处需要引入一种方法筛选我们所需要的address,这就是参数机制,读者可在此处找到相关文档。在Basement中大量的对象必须与参数一同使用。在Basement文档中参数被表示为Arguments

最后我们介绍一个执行检索的入口,即Query对象,这些对象用于作为检索的入口与query关键词配合。这些作为检索入口的Query对象类型列表可以在此处文档找到。

有了上述简单的基础学习,我们就可以开始构建我们第一个GraphQL索引,如下:

query Test {
    address(address: "vitalik.eth") { 
        address
        profile { 
            name 
            avatar
        } 
        tokens(limit: 3) {
            contract
            name
            tokenId
        }
    }
}

此处我们选择了入口检索对象为address,此对象的参数仅有 1 个,即为addressaddress参数必须为字符串类型,可以为正常的 16 进制编码的以太坊地址,也可以是ENS地址。我任选了几个属于address的属性进行检索,完整的属性列表可以在此处查询。

query后的Test是为本次查询所取的名字,并不重要,读者甚至可以删去此字段,直接使用query关键词

请求的API的URL为https://beta.basement.dev/v2/graphql,读者使用了Postman进行请求的截图如下:

Graphql Postman

返回的结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WongSSH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值