案例:获取Lens Protocol所有profile的信息(同时请求多个相同的集)
语法:GraphQL,GraphQL Fragment用法,GraphQL Aliases用法
网络:在GraphQL Playground运行时不需要梯子
步骤一:查询Lens Protocol API文档,最适合批量获取profile信息的是Get profiles(即一次query可以获取多个profile),但运行后发现获取上限为50个profile。
步骤二:为了获取所有的profile,可以选择使用API中的Get profile(即一次query只能获取一个profile),并且配合GraphQL的Fragment语法和Aliases语法。
步骤三:在Get profile中,输入参数有两种选择:profile id和handle。从直觉上看,id应该是有规律排列的,而handle是用户自己输入且无规律的,因此以id作为输入更容易获得所有profile。


步骤四:本步骤说明在Lens API中,所需的profile id是什么样的:
每个profile的铸造顺序(十进制数字),其对应的十六进制数字基本为api所需profile id,但还需要一点调整。

在python中使用.hex()可以将十进制数转换为十六进制。需要注意的是,作为API的输入,如果运行.hex()后字符个数为单数,需要在‘0x’后加上一个‘0’,如下表。

步骤五:该步骤是GraphQL代码实现,具体使用到Fragment和Aliases两个语法。
Aliases语法:
为了使用Get profile来获取多个profile,有人可能会尝试使用多个query。但当点击运行按钮时会让你选择一个query执行(如下图),或者直接报错。

这时候就可以使用Aliases来解决问题(如下图)。

Fragment语法:
可以看到当我们使用Aliases时,难免会使语法中有很多重复的部分(获取相同的字段),这时就可以使用Fragment将重复部分封装。

以上代码只获取了两个profile,但我们的目标是获取所有profile。为了实现该目标,可以前往OpenSea查看目前有多少个Lens Protocal Profile NFT。撰写本文时有45070个NFT(如下图),则将1-45070对应的十六进制作为Get profile的输入,即对上方代码进行扩充。

https://zhuanlan.zhihu.com/p/40418866/
https://blog.csdn.net/weixin_39130261/article/details/118547853
对于以上内容有想要交流或值得改进的地方,欢迎联系Cheng。
