知识库

使用 APOC 解析 Trello API 的 JSON 结果

在 Neo4j 3.0 之前,如果您想解析来自 Web API 调用的 JSON 结果,则需要使用数据库驱动程序之一来获取和解析 JSON 数据。 这在 这里 有描述。

随着 Neo4j 3.0.x 中存储过程的引入以及 APOC 过程包,可以读取 JSON 数据并在图中创建节点和关系。 以下描述了在使用 Trello API 时如何实现这一点。 Trello 是一种协作工具,可以将您的项目组织成看板。 一目了然,Trello 会向您展示正在进行的工作、谁在做什么以及某事在一个流程中的位置。 Trello 的 分类 包括看板、列表和卡片,其中记录了任务。

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

key=00981709d8fa49b9fb3c66f41178c14h
token=06128ee9bb10787d6fdee4942c12b5de5f39be11794fcb0604e072e1940475e2

并且此示例中 Cypher 的目标是创建一个类似于以下内容的图模型

image

为了生成这样的数据模型,我们将与 Trello API /1/member/me/actions?filter=createCard 进行交互,该 API 将返回一个 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 的一个示例,上面表示的所有数据都不是实际数据,而是表示。