我有一个应用程序,用于存储Twitter用户在数据库中的位置(来自API GET /搜索推文 - 位置)。然而,这里的问题是它需要用户在他的个人资料中输入的内容。已包含在我的数据库中的示例数据:
All over the world & London
Boca Raton, Florida
Sunway Damansara, Malaysia
Munich
Brazil
40.769549,-73.993696
Long Island City, NY USA
United States
USA-Japan
正如你所看到的,有一个很大的变化(+垃圾信息,例如“位置:在我的世界中”),当我尝试处理这些数据时,这会产生很大的问题。我想要做的是有一个脚本,它将实际解析值并将每一行更新到一个国家(例如慕尼黑将更改为德国,纽约可能会更改为美国 - 因为它只是一个原型应用程序,而不是产品)。我正在做PHP和&amp ;; MySQL的。
对于如何解决这个问题有什么建议吗?
更新
我找到了这个例子,它有点像我想做的那样,但它并不适用于每一个值。例如,当我进入伦敦或雅典时,它会显示美国,但是当我进入慕尼黑时,它显示了德国...任何想法为什么?
<?php
// Get STATE from Google GeoData
function reverse_geocode($address) {
$address = str_replace(" ", "+", "$address");
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false";
$result = file_get_contents("$url");
$json = json_decode($result);
foreach ($json->results as $result)
{
foreach($result->address_components as $addressPart) {
if((in_array('locality', $addressPart->types)) && (in_array('political', $addressPart->types)))
$city = $addressPart->long_name;
else if((in_array('administrative_area_level_1', $addressPart->types)) && (in_array('political', $addressPart->types)))
$state = $addressPart->long_name;
else if((in_array('country', $addressPart->types)) && (in_array('political', $addressPart->types)))
$country = $addressPart->long_name;
}
}
if(($city != '') && ($state != '') && ($country != ''))
$address = $city.', '.$state.', '.$country;
else if(($city != '') && ($state != ''))
$address = $city.', '.$state;
else if(($state != '') && ($country != ''))
$address = $state.', '.$country;
else if($country != '')
$address = $country;
// return $address;
return "$country/$state/$city";
}
// Usage: In my case, I needed to return the State and Country of an address
$myLocation = reverse_geocode("Athens");
echo "$myLocation";
?>
实际上,首先要在美国进行搜索。所以它显示了美国的雅典和伦敦,而不是希腊和英国。但有人怎么能改变呢?它甚至可能吗?
答案 0 :(得分:0)
因为我找到了解决问题的方法,所以我在这里也发布了从发布的代码中解决上述问题的代码。我可以在第一次迭代中获得城市,州,国家的价值,因此它正在进行不必要的迭代,因此我在json返回的结果中获得了美国的结果。 现在我还将解析数据以排除诸如“在我的世界等”中的垃圾数据,并且我将能够按国家对它们进行分组。
<?php
// Get STATE from Google GeoData
function reverse_geocode($address) {
$address = str_replace(" ", "+", "$address");
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false";
$result = file_get_contents("$url");
$json = json_decode($result);
foreach ($json->results as $k => $result)
{
if ($k == 0) {
foreach($result->address_components as $addressPart) {
if ((in_array('locality', $addressPart->types)) && (in_array('political', $addressPart->types))) {
$city = $addressPart->long_name;
} else if((in_array('administrative_area_level_1', $addressPart->types)) && (in_array('political', $addressPart->types))) {
$state = $addressPart->long_name;
}
else if((in_array('country', $addressPart->types)) && (in_array('political', $addressPart->types))) {
$country = $addressPart->long_name;
}
}
} else {
break; //Will comes out of loop directly after getting result.
}
}
if($country != '')
$address = $country;
// return $address;
return "$country";
}
// Usage: In my case, I needed to return the State and Country of an address
$myLocation = reverse_geocode("Athens");
echo "$myLocation";
?>
@JaredFarrish感谢您在第一部分提供的帮助:)