Python 示例
这个实践展示了如何编写一个简单程序,使用 快照 内容服务器提供的。
我们将使用 Decentraland 基金会的服务器,地址是 peer.decentraland.org,并以 Python 3 作为我们选择的语言。
我们将这样做:
查询内容服务器的状态。
选择并下载一个 快照 ,其中包含实体列表。
打印所有引用实体的类型和 ID。
让我们先做一些准备来开始编写脚本。我们只会使用标准库模块,但在实际代码中,你可能会想用一个更方便的 HTTP 客户端(比如 requests 库)。
# 发起一个 HTTP GET 请求,返回一个类似文件的 HTTP 响应。
def fetch(path):
url = f"https://peer.decentraland.org/{path}"
headers = { "User-Agent": "urllib" } # 在某些服务器上很重要(如果为空,会返回 403 Forbidden)
request = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(request)
return response我们这个简单的辅助函数会发起一个 HTTP GET 请求,并返回类似文件的响应对象。没什么花哨的。让我们用它来访问 /about 端点并检查服务器状态:
# 检查服务器状态:
about = json.load(fetch('about'))
if not about['healthy']:
print("Server not healthy!")
sys.exit(1)如果我们能通过这一点,说明服务器正在运行(我们得到了一个 200 响应),并且报告自己处于正常工作状态。我们可以请求当前的快照集合(它以 JSON 数组格式返回):
快照文件(尤其是时间范围更长的那些)可能非常大。为了快速试验,我们先按 numberOfEntities:
要下载内容,我们需要 hash 字段,来自 快照。我们通过将它附加到内容根路径来获取文件 URL:
我们选中的文件足够小,可以缓存在内存中,但让我们假装不知道这一点,直接流式读取它。第一行是快照头,后面的每一行都包含一个 JSON 对象。
让我们检查一下头部,这是个好习惯:
现在我们可以逐行读取响应,处理快照中的所有实体了。就我们这个简单目的而言, 处理 是指打印实体类型和 ID:
这个循环将开始流式读取、解析并打印如下内容,直到快照处理完毕:
干杯!我们已经使用快照系统探索了 Decentraland 中一些可用的内容。
最后更新于