2014-01-15 22 views
2

我正在嘗試確定twitter用戶的城市,州和國家。 位置字段返回位置,但我需要解析它並以結構化格式存儲這些數據。從字符串解析國家+城市的Ruby gem?

例如,如果用戶的生物位置是「倫敦」,則應該將該城市存儲爲倫敦,將該國存儲爲英國。如果它是「紐約州奧爾巴尼」,它應該將城市存儲爲紐約州的奧爾巴尼,將該國存儲爲美國。如果它只是「紐約州」,它應該存儲狀態爲紐約,國家爲美國。如果是「印度」,則應該將該國存儲爲印度(不含任何城市或州)。顯然,如果這個位置像「外太空」一樣是無意義的,它就什麼都不會返回。

有沒有像這樣做的寶石?如果沒有,我有什麼辦法可以智能地利用一些第三方?

回答

3

我面臨同樣的問題凝膠定位twitter位置。我發現的最好和免費的服務是openstreetmap

它真的很容易使用,響應是JSON。

嘗試自己:http://nominatim.openstreetmap.org/search?q=london&format=json&&addressdetails=1&accept-language=en

這裏匹配 「倫敦」 的第一個元素:

{ 
"place_id": "97592906", 
"licence": "Data \u00a9 OpenStreetMap contributors, ODbL 1.0. http:\/\/www.openstreetmap.org\/copyright", 
"osm_type": "relation", 
"osm_id": "65606", 
"boundingbox": [ 
    "51.2867584228516", 
    "51.6918754577637", 
    "-0.510375142097473", 
    "0.334015518426895" 
], 
"lat": "51.5072759", 
"lon": "-0.1276597", 
"display_name": "London, Greater London, England, United Kingdom", 
"class": "place", 
"type": "city", 
"importance": 0.9654895765402, 
"icon": "http:\/\/nominatim.openstreetmap.org\/images\/mapicons\/poi_place_city.p.20.png", 
"address": { 
    "city": "London", 
    "county": "London", 
    "state_district": "Greater London", 
    "state": "England", 
    "country": "United Kingdom", 
    "country_code": "gb" 
} 

}

正如你可以看到address字段包含你需要的所有信息。

+0

究竟是我在找什麼。你知道這有沒有限制嗎? –

+1

這裏的使用政策。 http://wiki.openstreetmap.org/wiki/Nominatim_usage_policy – marquez