2012-03-24 69 views
1

我试图使用freebase返回一个城市相关国家的ISO代码。freebase api获取城市的国家代码

我有这个MQL工作,但它不适用于某些城市,可能有更直接的方法来做同样的事情?

{ 
    "id": "/en/amarillo", 
    "/location/location/containedby": [ 
    "/location/country/iso3166_1_alpha2": null, 
    "type": "/location/country" 
    ] 

}​ 

对于较小的城市它偶尔不起作用。更好的办法是使用Freebase建议(我用来收集城市)在相同的请求中返回ISO代码?

jQuery -> 
    $("#city_name") 
     .suggest(type: "/location/citytown") 
     .bind "fb-select", (e, data) -> 
      $("#city_freebase_id").val data.id 

回答

2

这基本上就是我怎么会做它,但是,正如你已经发现,数据不是令人难以置信的完全填充。为了提高寻找某种东西的可能性,你可以做出一些调整,以增加额外的水平,例如,城市被一个国家所包含的国家所包含。你也在子查询中缺少一组花括号,这可能会导致你的查询在API中失败(查询编辑器默默地修复了这样的东西)。

是上升的追加等级和固定支架修改后的查询应该是这样的:

{ 
    "id": "/en/avondale", 
    "/location/location/containedby": [{ 
    "/location/country/iso3166_1_alpha2": null, 
    "type":   "/location/country" 
    }], 
    "l2:/location/location/containedby": [{ 
    "id":null, 
    "/location/location/containedby": [{ 
     "/location/country/iso3166_1_alpha2": null, 
     "type":   "/location/country" 
    }] 
    }] 
}​ 

搜索API有可能被用来做你想要的东西mql_output参数,但我不确定它是否被Freebase Suggest使用。没有记录可用。如果它不在代码中,那么破解这个小部件就不会太难。

+0

是的,不幸的是,在新的搜索API和新的Freebase建议中不赞成使用mql_output。您需要从jQuery执行单独的MQL读取API调用以查找ISO代码。 – 2012-03-29 18:24:26