在本文中,我们将访问这些API,同时提供有关如何在Python中使用REST,GraphQL和WebSockets的示例代码。
数据源和API
DeFi Pulse(REST)
DeFi Pulse具有各种可用的出色数据。您需要一个API密钥。使用免费帐户,您每个月将获得2,000 API积分。我将DeFi Pulse数据用于汽油价格,历史TVL和其他重要指标。
锁定总价值(TVL)是受欢迎的指标。我们可以断言,由于将价值锁定在协议中,因此基础令牌的价值应上升。如果TVL随着时间的推移持续增长,并且代币失去价值,那么对于基本面感兴趣的人,我们可能会说代币被低估了。当然,这可能取决于令牌是否与协议相关。治理够了吗?
这是使用标准REST + JSON格式的DeFi Pulse查询示例。
import requests
import json
# input your token here
api_key = 'your_key_here'
url = 'https://data-api.defipulse.com/api/v1/defipulse/api/GetHistory?api-key=' + api_key
response = requests.get(url)
result = json.loads(response.text)
# loop over, index, etc.
print(result[0])
这将提供带有Unix时间戳的类似于以下的输出。如果需要转换,请使用Python日期时间库。
{'timestamp':'1608098400','tvlUSD':14894699241,'tvlETH':25581278.215543162,'BTC':155978.23200100005,'ETH':7087137.655439175,'DAI':880970620.1700982}
您可以很容易地从JSON中获取单个数据。您可以执行result [0] [‘tvlUSD’]并从上方返回14894699241。
其他流行的端点包括:
DEX.AG用于来自分散交易所(DEX)的数据
ETH加油站的汽油价格
Rek.to进行BitMEX清算
流动资金提供者(LP)的Pools.fyi收益
图表(GraphQL)
Graph使用GraphQL样式查询。这是我最喜欢使用的API类型。这是使用gql Python库的简单示例。我在上一篇文章中更详细地介绍了Graph。这是一种幼稚的方法,可以随着时间的推移获取Uniswap的交易量,流动性和交易数量。
从 gql 导入 gql,客户端
来自 gql。运输。请求 导入 RequestsHTTPTransport
sample_transport = RequestsHTTPTransport(
url = 'https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2',
验证= True,
重试= 5,
)
客户 = 客户(
运输= sample_transport
)
流动资金 = []
音量 = []
交易 = []
x = 11276855
而 x > 11250000时:
查询 = gql('''
询问 {
uniswapFactory(id:“ 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f”,块:{number:''' + str(x)+ '''}){
totalVolumeUSD
totalLiquidityUSD
txCount
}
}
''')
响应 = 客户。执行(查询)
liquidity_value = response [ 'uniswapFactory' ] [ 'totalLiquidityUSD' ]
volume_value = response [ 'uniswapFactory' ] [ 'totalVolumeUSD' ]
transaction_value = 响应[ 'uniswapFactory' ] [ 'txCount' ]
流动资金。插入(0,liquidity_value)
音量。追加(volume_value)
交易。追加(Transactions_value)
x = x - 1000
打印(x)
打印(流动性)
从上面的查询中,我们收集流动性和数量数据。我们可以使用它来进行类似以下的操作,跟踪随时间变化的流动性与交易量。
链数据
尽管可以使用许多资源来获取链式数据,但我还是结合使用了自己在操作节点和BlockCypher时获得的数据。BlockCypher的免费计划每天将为您提供2000个请求。BlockCypher有很多替代方案,因此请找出最适合您的方案。
您可以执行以下操作,例如打开网络套接字以实时获取链中交易数据。或者,您可以执行标准的REST来查询各种链数据。这是我通常走的路线。
您可以获取所有信息,从交易数据到智能合约的更详细信息,再到您正在寻找的任何东西。如果您进行了足够的搜索,很可能会找到所需的数据。这就是开放金融生态系统的美。
curl -s https://api.blockcypher.com/v1/eth/main/contracts/0eb688e79698d645df015cf2e9db5a6fe16357f1?token=YOURTOKEN
我们可以在终端中使用以上内容来测试端点。该特定端点的输出非常酷。
这是输出中的一小部分,展示了该地址的智能合约方法。输出中的一小部分,展示了该地址的智能合约方法。
/* this function is executed at initialization and sets the owner of the contract
function mortal()
{
owner = msg.sender;
}
/* Function to recover the funds on the contract
function kill()
{
if(msg.sender==owner)suicide(owner);
}
交换数据
我认为没有免费资源可提供低延迟,高质量的交换数据。如果有人告诉我。我使用Polygon的$ 50 /月套餐交换数据。使用免费计划,您可以获得每分钟5次API调用和2年历史的一天结束数据。
显然,您可以从付费计划中获得更多细粒度的信息。
您还可以直接使用交换API来访问其数据。需要一些额外的工作来汇总各种交流,但值得一试,具体取决于您的用例。
如果您需要更多的白标解决方案,Kaiko可能就是我要走的路线。一如既往,DYOR。
替代方案:Nomics(免费的非报价水平数据),Kaiko(2周的试用期),CoinAPI(每天100个免费请求)
Web套接字
大多数可用资源都将允许WebSockets。这样,我们就可以打开连接以获取数据,而不必不断轮询服务。如果您比REST更喜欢这种方法,请看下面的示例代码……该API将包含其自己的文档,用于说明所需的格式和参数。
import asyncio
import websockets
async def hello(uri):
async with websockets.connect(uri) as websocket:
x = await websocket.send({"action": "auth", "params": "api_key"})
y = await websocket.recv()
print(y)
await websocket.send({"action": "subscribe", "params": "data_to_subscribe_to"})
asyncio.get_event_loop().run_until_complete(
hello('wss://'))
其他资源
沙丘分析
我是Dune Analytics的忠实粉丝。如果以上编程对您来说是一门外语,您仍然可以使用Dune进行加密分析。这是一种简单的分析工具,可让您想起Tableau之类的产品。
我经常使用Dune进行自己的分析。这是一个相对较新的产品,但他们一直在添加越来越多的有用数据。
运行自己的节点
如果您要运行自己的以太坊节点,则相对简单。但是,存档节点将花费您几TB的存储空间,而完整的节点将为您运行数百GB的存储空间。
对于大多数我不推荐。如果您需要节点的功能,那么像Infura这样的服务将为您提供所需的全部功能,而麻烦却很少。Infura最近还增加了对ETH 2.0和Filecoin的支持。
让我知道您经常使用的一些其他数据源。
现在,我们已经研究了许多数据源,我们将开始深入研究如何使用这些数据在以后的文章中找到独特的见解。
需要加入区块链技术交流群吗,请扫描下方二维码,助手将邀请您进群。
作者:链三丰,来源:区块链研究实验室
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。