# 使用python API创建/验证Golden Triples

By [dapaopao](https://paragraph.com/@dapaopao) · 2022-11-06

---

项目介绍
----

Golden是一个老牌项目了，最近B轮[融资4千万美元](https://golden.com/blog/golden-raises-40m-series-b/)，而且是一个明牌空投项目，最近很火所以很多人参与。关于项目的具体介绍可以查看[官网](https://golden.xyz/)，类似于维基百科。

如果你想通过UI参与那么可以查看这篇文章的详细介绍

[https://mirror.xyz/syskeys.eth/G8kmnWkkCp4MLewtdpqlzOAzrONLl-DhCNzsExMN2dA](https://mirror.xyz/syskeys.eth/G8kmnWkkCp4MLewtdpqlzOAzrONLl-DhCNzsExMN2dA)

获得空投的条件是积分制，创建完第一条Triple并且验证通过后会受到邀请邮件，点击邮件链接进入后可以查看积分榜单。

![](https://storage.googleapis.com/papyrus_images/ceb8bbe766708d9a849ba6a0267f287050098a6023b9adfaf7b7b315d636935a.png)

同时获得调用API接口的权利：[dapp.golden.xyz/profile](https://dapp.golden.xyz/profile)

![](https://storage.googleapis.com/papyrus_images/72e882199ce5d29eaae2c65c73e7243ec579b639d08e2a33837cd96c297d4d40.png)

点击copy后记录你的JWT。需要这个才能调用API

注意：请不要分享你的这段token

代码实现
----

python版本3.7以上

如果只需要自带的基本功能使用指令

如果需要一些数据分析工具使用指令

    pip install godel[web3,data-tools]
    

安装pandas

### 1.创建Triple

连接Golden web3 API

JWT\_TOKEN部分粘贴你自己的token，就是之前用户信息哪里复制的

    from godel import GoldenAPI
    
    JWT_TOKEN = "<你的JWT>"  输入你的 token
    goldapi = GoldenAPI(jwt_token=JWT_TOKEN)
    

测试一下是否连接成功，比如输入Barack Obama

    import 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 , 入下图成功了

![](https://storage.googleapis.com/papyrus_images/52cc0d6f30619ecc3ad226efa0b2e497429a600fe892af6ddfeb09d625c08b06.png)

同样你也要可以用这个方法获取一些谓词的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 )
    

成功后如下

![](https://storage.googleapis.com/papyrus_images/6b8390c17ab0967d9922d1ce0dca90dc498befaffa534ddc4dc036bec531de00.png)

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/_**](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部分粘贴你自己的token

    from 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数据格式如下

![](https://storage.googleapis.com/papyrus_images/8cc0ecaaa0707eb91e73980fd661e0eec978f1c8487c0184cc16cad17bf7af9b.png)

下列方法可通过谓词ID来获取谓词的信息

    predicate_by_id(id)
    

下列方法可通过实体ID来获取实体信息

    entity_by_golden_id(golden_id, **kwargs)
    

更多方法可以查看 [文档](https://docs.golden.xyz/api/godel-python-sdk/godel-reference)

最后来创建验证

    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](https://twitter.com/dapaopao_eth)

---

*Originally published on [dapaopao](https://paragraph.com/@dapaopao/python-api-golden-triples)*
