知识库

使用 APOC 解析 Trello API 的 JSON 结果

在 Neo4j 3.0 之前,如果想解析对 Web API 调用返回的 JSON 结果,需要使用数据库驱动来获取并解析 JSON 数据。这在这里有相关描述。

随着存储过程在 Neo4j 3.0.x 中的加入以及 APOC 过程包的引入,您可以读取 JSON 数据并在图中创建节点和关系。以下描述了在使用 Trello API 时如何实现此操作。Trello 是一种协作工具,可将您的项目组织到看板中。只需一眼,Trello 就能显示正在进行的工作、谁在做什么以及某项工作在流程中的位置。Trello 的分类体系包括看板(boards)、列表(lists)和卡片(cards),任务记录在卡片中。

使用 Trello API 时,必须注册 API 密钥和令牌,因为访问 URL 需要它们。密钥和令牌可以在这里创建。在下面的示例中,生成的密钥和令牌为

key=00981709d8fa49b9fb3c66f41178c14h
token=06128ee9bb10787d6fdee4942c12b5de5f39be11794fcb0604e072e1940475e2

本例中 Cypher 的目标是创建类似于以下的图模型:

image

为了生成这样的数据模型,我们将调用 Trello API /1/member/me/actions?filter=createCard,它会返回一个 JSON 结果,描述卡片何时被创建的细节。此外,URL 中包含的 “me” 值表示仅检索我执行的 createCards 操作。

{
  "id": "56f29d59ef82d7312c56710f",
  "idMemberCreator": "5637836872deaba954947610",
  "data": {
    "board": {
      "name": "New Features Board",
      "id": "563ce96c73ae60bc1a3d40",
      "shortLink": "bYO0FVJ7Q"
    },
    "list": {
      "name": "Inbox",
      "id": "55f7f0db68294b2a319c0519"
    },
    "card": {
      "shortLink": "OwUvlhf7",
      "idShort": 464,
      "name": "request for support of Java8",
      "id": "734"
    }
  },
  "type": "createCard",
  "date": "2014-01-15T13:42:49.055Z",
  "memberCreator": {
    "id": "123",
    "avatarHash": "1f5a1bc9710166186f6fdd8c8b806c58",
    "fullName": "Dana Canzano",
    "initials": "DC",
    "username": "danacanzano"
  }
}

下面的 Cypher 将处理 /1/member/me/actions 请求的 JSON 结果

WITH "https://api.trello.com/1/member/me/actions?filter=createCard&limit=1000&key=00981709d8fa49b9fb3c66f41178c14h&token=06128ee9bb10787d6fdee4942c12b5de5f39be11794fcb0604e072e1940475e2" AS url
CALL apoc.load.json(url) YIELD value AS action
WITH action, action.memberCreator AS m, action.data AS d
MERGE (u:User {id:m.id}) ON CREATE SET u.initials = m.initials, u.name = m.fullname, u.user = m.username
MERGE (b:Board {id: d.board.id}) ON CREATE SET b = d.board
MERGE (c:Card {id: d.card.id}) ON CREATE SET c = d.card
MERGE (u)-[r:CREATED]->(c) ON CREATE SET r.id = action.id, r.date_created=apoc.date.parse(action.date,'s',"yyyy-MM-dd'T'HH:mm:ss'Z'")
MERGE (c)-[:IN_BOARD]->(b)
RETURN count(*);

然后可以运行

MATCH (u:User)-[r:CREATED]->(c:Card)-[r2:IN_BOARD]->(b:Board)
RETURN u.user AS Author, r.date_created,c.name AS CardName ,b.name AS BoardName

这对于尝试查找 Trello 卡片的作者/创建者的度量指标非常有帮助。

以上只是 Trello API 的一个示例,文中所有数据均为示意,而非真实数据。

© . This site is unofficial and not affiliated with Neo4j, Inc.