# 使用python API创建/验证Golden Triples **Published by:** [dapaopao](https://paragraph.com/@dapaopao/) **Published on:** 2022-11-06 **URL:** https://paragraph.com/@dapaopao/python-api-golden-triples ## Content 项目介绍Golden是一个老牌项目了,最近B轮融资4千万美元,而且是一个明牌空投项目,最近很火所以很多人参与。关于项目的具体介绍可以查看官网,类似于维基百科。 如果你想通过UI参与那么可以查看这篇文章的详细介绍 https://mirror.xyz/syskeys.eth/G8kmnWkkCp4MLewtdpqlzOAzrONLl-DhCNzsExMN2dA 获得空投的条件是积分制,创建完第一条Triple并且验证通过后会受到邀请邮件,点击邮件链接进入后可以查看积分榜单。同时获得调用API接口的权利:dapp.golden.xyz/profile点击copy后记录你的JWT。需要这个才能调用API 注意:请不要分享你的这段token代码实现python版本3.7以上 如果只需要自带的基本功能使用指令如果需要一些数据分析工具使用指令pip install godel[web3,data-tools] 安装pandas1.创建Triple连接Golden web3 API JWT_TOKEN部分粘贴你自己的token,就是之前用户信息哪里复制的from godel import GoldenAPI JWT_TOKEN = "<你的JWT>" 输入你的 token goldapi = GoldenAPI(jwt_token=JWT_TOKEN) 测试一下是否连接成功,比如输入Barack Obamaimport pandas as pd # Test connection with search search_results = goldapi.entity_search(name="Barack Obama") search_results_df = pd.DataFrame(search_results["data"]["entityByName"]["nodes"]) print(search_results_df) 运行你的代码python main.py , 入下图成功了同样你也要可以用这个方法获取一些谓词的ID和接受数据格式import pandas as pd predicates = {} for p in goldapi.predicates()["data"]["predicates"]["edges"]: p = p["node"] predicates[p["name"]] = {"id": p["id"], "objectType": p["objectType"]} predicates_df = pd.DataFrame(predicates).transpose() print(predicates_df ) 成功后如下OK,了解了这些功能后开始正式创建Triple 我们要知道如何提交创建的语句,以及接受那些参数,在API中CreateStatementInput就是我们所要提交的数据的结构类型from godel.schema import CreateStatementInput, StatementInputRecordInput CreateStatementInput CreateStatementInput的格式如下input CreateStatementInput { clientMutationId: String subjectId: UUID! predicateId: UUID! objectValue: String objectEntityId: UUID citationUrls: [String] qualifiers: [QualifierInputRecordInput] } 这样我们可以开始填写我们的数据 假设我们知道一条三元组数据是:奥巴马的个人网站是 https://barackobama.com/from godel import GoldenAPI import pandas as pd JWT_TOKEN = "<你的JWT>" 输入你的 token goldapi = GoldenAPI(jwt_token=JWT_TOKEN) search_results = goldapi.entity_search(name="Barack Obama") search_results_df = pd.DataFrame(search_results["data"]["entityByName"]["nodes"]) for p in goldapi.predicates()["data"]["predicates"]["edges"]: p = p["node"] predicates[p["name"]] = {"id": p["id"], "objectType": p["objectType"]} predicates_df = pd.DataFrame(predicates).transpose() # Triple data subject_id = search_results_df["id"][0] # 对应实体ID,在之前的表格中是第一个所以用[0] predicate_id = predicates_df["id"]["Website"] # 查找website对应谓词的ID object_value = "https://barackobama.com/" # obama的网站地址 # 创建 statement 输入刚才的几个数据 create_statement_input = CreateStatementInput( subject_id=subject_id, predicate_id=predicate_id, object_value=object_value, citation_urls=[], ) data = goldapi.create_statement(create_statement_input=create_statement_input) data 这样就创建好了一条triple 注意最后一步如果提交错误的数据会损失你的点数2.验证Triples和创建一样的方式连接Golden web3 API JWT_TOKEN部分粘贴你自己的tokenfrom godel import GoldenAPI JWT_TOKEN = "<你的JWT>" # 输入你的 token goldapi = GoldenAPI(jwt_token=JWT_TOKEN) 获得未验证的triple,如果你用过他们UI版界面提交验证的话,可以看出他们是有一个队列,每次你做出选择后,会有新的未验证triple出现。同理API也是# 获取未验证的 triple data = goldapi.unvalidated_triple()["data"] unvalidated_triple = data["triple"] unvalidated_triple unvalidated_triple数据格式如下下列方法可通过谓词ID来获取谓词的信息predicate_by_id(id) 下列方法可通过实体ID来获取实体信息entity_by_golden_id(golden_id, **kwargs) 更多方法可以查看 文档 最后来创建验证from godel.schema import ValidationType # Retrieve Choices for Validation ValidationType ValidationType是一个枚举类型 对应的三个状态:接受拒绝跳过enum ValidationType { ACCEPTED REJECTED SKIPPED } 最后对你的判断创建验证组并且提交# 用获取的未验证id 输入判断你的结果 triple_id = unvalidated_triple["id"] validation_type = "REJECTED" # 创建验证 goldapi.create_validation( triple_id=triple_id, validation_type=validation_type ) 最终运行代码如下from godel import GoldenAPI from godel.schema import ValidationType JWT_TOKEN = "<你的JWT>" # 输入你的 token goldapi = GoldenAPI(jwt_token=JWT_TOKEN) # 获取未验证的 triple data = goldapi.unvalidated_triple()["data"] unvalidated_triple = data["triple"] # 用获取的未验证id 输入判断你的结果 triple_id = unvalidated_triple["id"] validation_type = "REJECTED" # 创建验证 goldapi.create_validation( triple_id=triple_id, validation_type=validation_type ) 同样注意最后一步如果提交错误的数据会损失你的点数 最后如果文章对你有帮助或者有疑问,欢迎来交流,关注我的推特不定期更新 https://twitter.com/dapaopao_eth ## Publication Information - [dapaopao](https://paragraph.com/@dapaopao/): Publication homepage - [All Posts](https://paragraph.com/@dapaopao/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@dapaopao): Subscribe to updates - [Twitter](https://twitter.com/dapaopao_eth): Follow on Twitter