2

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

[{
  "id": null,
  "name": null,
  "type": "/food/dish"
}]

但它只给了我第一页:

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

问题一:如何添加分页获取所有2.5K左右的菜实例?我试图添加“光标:2”但没有工作。


假设我有一个名字“pizza”,我尝试了这个查询来获取“pizza”的详细信息:

{
  "*": null,
  "name": "pizza",
  "type": "/food/dish"
}

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

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

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

4

2 回答 2

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 编码”的,请阅读有关如何在结果中对它们进行解码的内容。

问题2

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

{
  "id": "/m/0663v",
  "name": null,
  "type": "/food/dish",
  "/dining/cuisine/ingredients": []
}

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

从给定图像中获取图像 URLid是通过https://usercontent.googleapis.com/freebase/v1/image/id.

编辑

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

[{
  "id": "/en/minestrone",
  "/common/topic/image": [{
    "id": null,
    "name": null
  }]
}]

您会得到以下图像及其描述:

{
  "result": [{
    "id": "/en/minestrone",
    "/common/topic/image": [
      {
        "id": "/wikipedia/images/commons_id/1492185",
        "name": "MinestroneSoup"
      },
      {
        "id": "/wikipedia/images/commons_id/12565901",
        "name": "Homemade minestrone"
      }
    ]
  }]
}

那么,您的最终 MQL 是:

[{
  "id": null,
  "name": null,
  "type": "/food/dish",
  "/common/topic/image": [{
    "id": null,
    "name": null
  }],
  "/dining/cuisine/ingredients": []
}]

...并且 HTTP 信封将包含一个键和一个值cursor

于 2013-09-29T05:31:27.797 回答
1

有关问题 1 的答案,请参阅 Nitzan 的回答。

对于第二个问题,获取描述和图像的最简单方法是使用主题 API , 例如https://www.googleapis.com/freebase/v1/topic/m/0663v

于 2013-09-29T14:58:05.143 回答