{"content":{"title":"如何通过 NFTScan API 按照 NFT 合约地址检索数据？","body":"<!--StartFragment-->\r\n\r\n在当前 NFT 市场还在不断扩张的背景下，各种 NFT 项目依旧是井喷式涌现，投资者和开发者都面临获取项目全貌数据的困境。公链上提取和处理大量的数据既费时又费力，缺乏全面的信息支持，将难以深入判断一个 NFT 项目的真实情况，严重制约了 NFT 数据应用的开发与投资决策，如何在海量复杂的数据中有效发掘价值，是一个亟待解决的难题。\r\n\r\n\r\n\r\nNFTScan 主站数据显示，截至 2023 年 10 月 13 日 NFTScan 目前已支持的 18 条主流区块链网络共产生：NFT 合约数量 300 多万个；NFT 资产数量 12.5 亿枚；NFT 链上记录数量 4 亿条；NFT 资产总市值：$15,609,768,860；NFT 历史总交易额：$93,122,604,064。\r\n\r\n![](https://static001.geekbang.org/infoq/2b/2b4156f39304763f923f4aaf0cf8278e.png)\r\n\r\nNFTScan 提供的 API，开发者可以实现高效自动化地获取和处理海量 NFT 数据，无需人工操作和复杂判断，大大降低了开发成本。相比自主开发监测系统，使用 NFTScan 的标准化 API 直接构建，不仅省去了复杂的设计和开发过程，也减少了后续的维护和升级成本。 API 可以轻松实现高频率监测，降低人力成本。此外，NFTScan API 返回规范化的数据格式，使得开发和优化监测工具变得更加简单高效，自定义的参数设置也让开发者可以灵活地定制属于自己的解决方案。\r\n\r\n\r\n\r\n\r\n**怎样访问 NFTScan NFT API**\r\n\r\n\r\n\r\n\r\n**创建 NFTScan 开发者账号**\r\n\r\n在开始使用 NFTScan API 之前，首先需要访问开发者网站并创建一个账户。前往 NFTScan 官方网站点击 NFTScan API “Sign Up”按钮进行注册。\r\n\r\n![](https://static001.geekbang.org/infoq/e7/e716243785661283940c7332ac4dd370.png)\r\n\r\n登录后在 Dashboard（面板）上找到自己独有的 API KAY，将其复制。访问 API 文档，将自己的 API KEY 输进 API 文档的相应位置。根据文档的指引，就可以开始使用 API 服务了。在 API 文档中，开发者可以找到多种可供选择的接口模式，根据需求来选择最合适的接口。\r\n\r\n\r\n\r\n\r\n在 Dashboard 中，开发人员还可以查看自己 API 使用情况的统计数据，帮助记录历史使用数据。不仅如此，NFTScan 还为每位注册开发者提供 1M CU 的 API 调用服务，用于请求所有的 NFT API 接口，并且 CU 永不过期，用完为止！\r\n\r\n\r\n\r\n\r\n**查看 API 文档**\r\n\r\n\r\n\r\n\r\n在成功注册开发者账号获取 API Key 后，您需要查看 NFTScan API 文档。API 文档包含了所有可以使用的 API 端点和参数，以及如何构建请求和处理响应的详细信息。请认真阅读 API 文档，并确保理解如何使用 API 来获取您需要的数据。NFTScan API 服务致力于帮助开发者改善获取 NFT 数据分析体验。\r\n\r\n\r\n\r\n\r\nNFTScan 目前拥有全网最大最全的 NFT Collection 库，已支持 Ethereum、Solana、BNBChain、Bitcoin、TON、Polygon、zkSync、Aptos、Linea、Base、Avalanche、Arbitrum、Optimism、Fantom、Moonbeam、PlatON、Cronos、Gnosis 18 条区块链的 NFT 全量数据，所涵盖的 NFT 数据全、种类丰富，提供一整套的接口来获得 ERC721 和 ERC1155 资产以及交易、项目、市场统计等信息，现在支持 50 多个针对 EVM 兼容链的公共接口，以及针对 Solana、Aptos、Bitcoin 的一批相同模型的接口，很大程度上满足了开发者索引多种类型的 NFT 数据的需求。\r\n\r\n![](https://static001.geekbang.org/infoq/e2/e2f544e0829776449074d73bc493fe7e.png)\r\n\r\n**按照 NFT 合约地址检索数据 API 类型**\r\n\r\n\r\n\r\n\r\n**1/ Get NFTs by contract：**/v2/assets/{contract_address}\r\n\r\n该接口主要返回一个合约地址下的一组 NFT，开发者只需要选择输入任意 ERC-721 或 ERC-1155 标准的 NFT 项目合约地址，就可以获取该项目下所有 NFT 资产的完整数据。查询参数可选择 \r\n\r\nlatest_trade_price/latest_trade_time/rarity_rank（rarity_rank 仅适用于 ERC-721 协议），这里我们选择最后成交价来作为查询参数。\r\n\r\n![](https://static001.geekbang.org/infoq/d9/d96c94892ea6da6b2ab8be1205d554ca.png)\r\n\r\n点击 Try it，查看返回首条数据：\r\n\r\n合约地址为 0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d，合约名称为 BoredApeYachtClub，token id 为 7856，协议标准为 erc721，mint 地址，持有者地址，元数据 json 等等全部信息。\r\n\r\n![](https://static001.geekbang.org/infoq/ae/ae3472a01cbc6e8df1a2e92ab4bbd47b.png)\r\n\r\n**2/ Get transactions by contract：**/v2/transactions/{contract_address}\r\n\r\n允许开发者通过输入任意 NFT 项目的合约地址，可获取该项目在生命周期内所有 NFT 资产的历史交易信息。利用这个接口，开发者可以跳过解析链上原始交易的繁琐过程，直接获取干净可用的结构化交易数据。查询参数可选择交易的 NFT 事件类型（Mint/Transfer/Sale/Burn），使用 ';' 分隔多个事件。\r\n\r\n![](https://static001.geekbang.org/infoq/60/601539d344b0818a242576d9c9f67596.png)\r\n\r\n这里我们选择了 Mint 的事件类型，输入自己的 api-key 之后，结果响应数据包含这笔 NFT 交易的所有关键数据，如交易哈希值、区块信息、From 和 To 地址、合约地址、交易时间戳等基础数据外，还有转账的 Token ID、交易金额和币种等 NFT 交易的特征信息。\r\n\r\n![](https://static001.geekbang.org/infoq/e6/e6ec88b6b9f6176b07d3d3cc1e3872f8.png)\r\n\r\n**3/ Get NFT owners by contract：**/v2/asset/collection/amount\r\n\r\n该接口主要返回一组协议标准为 erc-721 的 NFT 合约地址的持有者列表。开发者只需输入项目合约地址，该接口就会返回一个地址对象数组，每个对象包含持有者的钱包地址和其持有的该项目 NFT token_id。这里我们检索的是 BAYC 的持有者列表数据，可以看到共返回了 10000 个地址数据。\r\n\r\n![](https://static001.geekbang.org/infoq/ab/ab03a823a19cffd41a5bf1333b5a7b21.png)\r\n\r\n**4/ Refresh NFT metadata by contract：**/v2/refresh/metadata/contract\r\n\r\n该接口可以帮助开发者或用户提交后台刷新元数据任务，该任务审核后会刷新提交的整个合约元数据。\r\n\r\n![](https://static001.geekbang.org/infoq/a9/a904bf9b73c34192fc94c275bc6fa079.png)\r\n\r\n**构建相关 NFT API 请求**\r\n\r\n\r\n\r\n具体来说，开发者可以使用不同的语言来编写调用 NFTScan API 的代码如 Python、Java、JavaScript 等等 。例如在 Python 中，可以使用 requests 库来发起 API 请求；在 JavaScript 中可以使用 axios；在 Java 中可以用 OkHttp 或 Retrofit 等库。编写代码时，开发者只需组织好接口参数，如合约地址、API Key 等，调用对应的 NFTScan 接口，就可以方便地获取到标准化的 JSON 格式数据。\r\n\r\n\r\n\r\n\r\n下面按使用 Python 来通过 NFTScan 的 API 请求一个 NFT 合约地址的历史交易情况，可以分为以下步骤：\r\n\r\n\r\n\r\n\r\n**步骤 1：导入必要的库**\r\n\r\n首先，导入 Python 的 requests 库，将用于发起 HTTP 请求和处理响应。\r\n\r\n![](https://static001.geekbang.org/infoq/47/47caa8b5b2fac52e68b82ddbb072e989.png)\r\n\r\n**步骤 2：构建 API 请求**\r\n\r\n定义 NFTScan 的 API 基本 URL 和要查询的合约地址：\r\n\r\n![](https://static001.geekbang.org/infoq/52/527fa4e41f80d7226dad3c2111a001c7.png)\r\n\r\n**步骤 3：构建完整的 API 请求 URL**\r\n\r\n将合约地址添加到基本 URL 中，形成完整的 API 请求 URL：\r\n\r\n![](https://static001.geekbang.org/infoq/c4/c48109161947351aaa79b44b7af9942d.png)\r\n\r\n**步骤 4：发起 GET 请求**\r\n\r\n使用 requests 库发起 GET 请求并检查 HTTP 响应的状态码，状态码为 200 表示请求成功：\r\n\r\n![](https://static001.geekbang.org/infoq/b1/b1e5d0329107658010a63ca21befc0f0.png)\r\n\r\n**步骤 5：处理返回的数据**\r\n\r\n如果请求成功，解析 JSON 响应并处理历史交易数据。以下是一个示例处理历史交易数据的代码：\r\n\r\n![](https://static001.geekbang.org/infoq/45/4509509a5fa5a438066420c8eb15637c.png)\r\n\r\n以上是一个基本示例来使用 Python 来发起 Get transactions by contract API 请求的基本示例。请注意，实际的代码可能需要更多的错误处理和数据分析，具体取决于开发者的需求。\r\n\r\n\r\n\r\n\r\n***\r\n\r\n\r\n\r\n\r\n**About NFTScan**\r\n\r\n\r\n\r\n\r\n**NFTScan 成立于 2021 年 4 月份，总部位于中国香港，是全球领先的 NFT 数据基础设施服务商，目前已支持 Bitcoin、Ethereum、BNBChain、Polygon、Solana、Linea、Arbitrum、Optimism、zkSync、Aptos 等在内的 18 条主流区块链网络。NFTScan 团队致力于为数以亿计的 Web3 用户提供简洁高效的 NFT 检索服务，为新一代金融科技公司提供安全稳定的多链 NFT 索引服务，用数据来推动 NFT 生态的繁荣发展！目前，NFTScan 在为包括 CMC、Binance NFT、Bybit Web3、KuCoin、HashKey Group 、SafePal、Mask、imToken、Enjin、Coin98、OneKey、TokenPocket、AlienSwap 等在内的 4000+ 开发者提供多链 NFT 数据支持！**\r\n\r\n<!--EndFragment-->"},"author":{"user":"https://learnblockchain.cn/people/10111","address":null},"history":null,"timestamp":1697190998,"version":1}