我正在尝试使用Freebase列出相关城市的旅游景点。
使用Topic API,使用MID检索某个城市的结果很简单(例如伦敦的“/ m / 04jpl”)
https:// www.googleapis.com/freebase/v1/topic/m/04jpl /?& filter = / travel / travel_destination / tourist_attractions
然而,这给出了有限的10个结果。响应以"count": 87.0"
结尾。我怎么得到所有87?可以在伦敦的Freebase页面上单击“87 values total”链接。实际上,我想在这里做同样的事情。
我意识到我可以使用MQL,但我希望结果按相关性排序,而不是按时间戳排名。使用Search API,可以按freebase,实体或架构进行排名,所以我宁愿使用它。
首先,我查看了Search API的搜索输出架构。然而,即使输出“全部”也没有产生旅游胜地的结果。使用metaschema和Search API DID工作。我用“part_of”来选择伦敦。但是,它仅适用于某些位置:
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction%20part_of:/m/04jpl)&indent=true
我真正想要的是让它适用于“Loughborough”(MID / m / 01z21p)等相对未知的位置。如您所见,用/ m / 04jpl代替/ m / 01z21p不会产生任何结果:
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction%20part_of:/m/01z21p)&indent=true
看着“拉夫堡”,我们看到像“Loughborough Town Hall”这样的旅游景点有“拉夫堡”的“/ travel / tourist_attraction / near_travel_destination”。我该如何编写这个过滤器?
我想要以下内容(实际上有效):
https:// www.googleapis.com/freebase/v1/search?limit=50&filter=(all%20type:/travel/tourist_attraction)&filter=(/travel/tourist_attraction/near_travel_destination: /米/ 01z21p)及缩进=真
谢谢!
注意:要在浏览器中输入链接,您需要删除https://和www之间的空格。我本来会这样做的,但我还没有必要的权限发布超过2个链接。
答案 0 :(得分:0)
我使用2个Freebase API调用解决了这个问题。
1)一个MQL查询,它获取特定MID的所有旅游景点的列表。这些结果没有以任何有用的方式排名。我也会返回结果编号,以便稍后处理
https://www.googleapis.com/freebase/v1/mqlread?query={"mid":"/m/04jpl","/travel/travel_destination/tourist_attractions":[{"mid":null}],"resultnumber:/travel/travel_destination/tourist_attractions":[{"return":"count"}]}
然后使用返回的MID列表创建新查询(使用for循环)。您必须输入从上述查询返回的所有MID,以便它们可以全部排在一起。
2)https://www.googleapis.com/freebase/v1/search?limit=10&filter=(any%20mid:/m/0gsxw%20mid:/m/01d_0p%20mid:/m/07gyc)&scoring=entity
最好选择仅返回MID的返回格式,以确保加载时间不广泛。
然后你有一个排名的MID列表!你需要一个最终的查询来返回你想要的任何细节。
我希望这证明有用。