获取Freebase中每个菜单的菜单和详细信息列表?

HP.*_*HP. 2 api json rdf freebase node.js

我尝试了这个查询来获取所有菜单实例的列表

[{
  "id": null,
  "name": null,
  "type": "/food/dish"
}]
Run Code Online (Sandbox Code Playgroud)

但它只给我第一页:

http://www.freebase.com/query?autorun=1&q=%5B%7B%22id%22:null,%22name%22:null,%22type%22:%22/food/dish%22%7D% 5D

问题1:如何添加分页以获取所有2.5K左右的碟形实例?我试图添加"光标:2",但没有工作.


假设我有一个名字"披萨",我尝试了这个查询来获取"披萨"的细节:

{
  "*": null,
  "name": "pizza",
  "type": "/food/dish"
}
Run Code Online (Sandbox Code Playgroud)

但这并没有给我这样的描述和图像http://www.freebase.com/m/0663v

问题2:如何获取所有信息,或至少在上面的freebase页面中的描述和图像URL?

额外奖励:我试图通过Freebase Node.js在这里做所有事情https://github.com/spencermountain/Freebase.js

Nit*_*ked 5

我建议你将其分为2个问题,因此每个问题都有自己的主题,以后的访问者更容易搜索.

那说:

问题1

您可以通过添加limit:查询来增加每页获得的结果数.无论如何,您将不得不使用分页.要使用分页,您需要将cursor参数添加到mqlreadHTTP请求中.还是那句话:cursor不是在MQL查询本身的一部分,而是认为其提交的HTTP信封.

对于第一个查询,发出一个空cursor,对于后续查询,使用cursormqlread返回给您的值.

请注意,所有这些都需要使用API​​完成,而不是直接使用freebase,因此URL必须是:

https://www.googleapis.com/freebase/v1/mqlread?cursor=&query=[{"id":null,"name":null,"type":"/food/dish","limit":5}]

另请注意,如果您计划执行除测试以外的任何操作,则需要从Google获取密钥.

最后,请注意Freebase中的一些字符串是"freebase-encoded",请阅读有关如何在结果中解码它们的信息.

问题2

如果您只想要成分名称,那么只需添加"/dining/cuisine/ingredients": []到您的查询中即可.请注意,许多菜肴没有配料,但Pizza确实:

{
  "id": "/m/0663v",
  "name": null,
  "type": "/food/dish",
  "/dining/cuisine/ingredients": []
}
Run Code Online (Sandbox Code Playgroud)

获取图像意味着添加"/common/topic/image": [{}]到您的查询,并使用返回id的每个图像.

从给定图像获取图像URL id是通过预先添加https://usercontent.googleapis.com/freebase/v1/image/id.

编辑

汤姆正确地指出我忘记了图像描述.每个图像的描述将name:在返回的/common/topic/image数组中可用.例如,对于查询

[{
  "id": "/en/minestrone",
  "/common/topic/image": [{
    "id": null,
    "name": null
  }]
}]
Run Code Online (Sandbox Code Playgroud)

您将获得以下图像及其描述:

{
  "result": [{
    "id": "/en/minestrone",
    "/common/topic/image": [
      {
        "id": "/wikipedia/images/commons_id/1492185",
        "name": "MinestroneSoup"
      },
      {
        "id": "/wikipedia/images/commons_id/12565901",
        "name": "Homemade minestrone"
      }
    ]
  }]
}
Run Code Online (Sandbox Code Playgroud)

那么,你的最终MQL是:

[{
  "id": null,
  "name": null,
  "type": "/food/dish",
  "/common/topic/image": [{
    "id": null,
    "name": null
  }],
  "/dining/cuisine/ingredients": []
}]
Run Code Online (Sandbox Code Playgroud)

...并且HTTP信封将包含密钥和值cursor.