2011-04-21 113 views
8

我是新的zend框架。我想通过IP地址获取货币代码,国家代码。如何通过IP地址获取国家代码和货币代码?

我可以有任何示例url ?.

请帮帮我...

在此先感谢。

+0

ipdata.co直接为您提供货币符号和IP地址代码!请参阅我的回答以下地址https://stackoverflow.com/a/47142938/3176550 – Jonathan 2018-02-18 14:30:45

回答

4

多对多的感谢jmathaiToonMarinerexperimentX的宝贵意见。

但我已经得到了简单的解决方案

public function getCountryIp() 
{ 
    $currency = new Zend_Currency(); 
    $countryCode = $this->getCountryFromIP(); 
    $currencyCode = $currency->getCurrencyList($countryCode); 
    $localCurrency = $this->currency('USD',$currencyCode[0],50); 
    $var['currencyCode'] = $currencyCode[0]; 
    $var['currency'] = $localCurrency; 
    return $var; 
} 



//use to convert currency 



public function currency($from_Currency, $to_Currency, $amount) 
{ 
     $amount = urlencode($amount); 
     $from_Currency = urlencode($from_Currency); 
     $to_Currency = urlencode($to_Currency); 
     $url = "http://www.google.com/ig/calculator?hl=en&q=$amount$from_Currency=?$to_Currency"; 
     $ch = curl_init(); 
     $timeout = 0; 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
     $rawdata = curl_exec($ch); 
     curl_close($ch); 
     $data = explode('"', $rawdata); 
     $data = explode(' ', $data['3']); 
     $stripped = ereg_replace("[^A-Za-z0-9.\+]", "", $data['0']);//remove special char 
     return round($stripped,3); 
//  $var = $data['0']; 
//  return $var; 
//  return round($var, 8); 
    } 

//get ip-address and show country code 


public function getCountryFromIP() 
{ 
    $ip = $_SERVER['REMOTE_ADDR']; 

    $country = exec("whois $ip | grep -i country"); // Run a local whois and get the result back 
    //$country = strtolower($country); // Make all text lower case so we can use str_replace happily 
    // Clean up the results as some whois results come back with odd results, this should cater for most issues 
    $country = str_replace("country:", "", "$country"); 
    $country = str_replace("Country:", "", "$country"); 
    $country = str_replace("Country :", "", "$country"); 
    $country = str_replace("country :", "", "$country"); 
    $country = str_replace("network:country-code:", "", "$country"); 
    $country = str_replace("network:Country-Code:", "", "$country"); 
    $country = str_replace("Network:Country-Code:", "", "$country"); 
    $country = str_replace("network:organization-", "", "$country"); 
    $country = str_replace("network:organization-usa", "us", "$country"); 
    $country = str_replace("network:country-code;i:us", "us", "$country"); 
    $country = str_replace("eu#countryisreallysomewhereinafricanregion", "af", "$country"); 
    $country = str_replace("", "", "$country"); 
    $country = str_replace("countryunderunadministration", "", "$country"); 
    $country = str_replace(" ", "", "$country"); 

    return $country; 
} 
+0

此网址(http://www.google.com/ig/calculator)不再有效 – 2014-11-09 23:33:18

+0

修改您的代码以使用此网址代替... 'https://www.google.com/finance/converter?a = 1000&from = USD&to = AUD' – 2016-07-13 18:40:15

1

你需要像geoip - 还有另外一个我最近使用它是一个基于订阅(在莫不记得它的名字)。

9

你可以用我的服务,http://ipinfo.io API获得国家代码:

function get_country($ip) { 
    return file_get_contents("http://ipinfo.io/{$ip}/country"); 
} 

echo get_country("8.8.8.8"); // => US 

如果你有兴趣在其他细节你可以做出更通用的功能:

function ip_details($ip) { 
    $json = file_get_contents("http://ipinfo.io/{$ip}"); 
    $details = json_decode($json); 
    return $details; 
} 

$details = ip_details("8.8.8.8"); 

echo $details->city;  // => Mountain View 
echo $details->country; // => US 
echo $details->org;  // => AS15169 Google Inc. 
echo $details->hostname; // => google-public-dns-a.google.com 

我已经使用IP 8.8.8.8在这些示例中,但是如果您想要用户的IP的详细信息只需传入$_SERVER['REMOTE_ADDR']。更多详细信息请见http://ipinfo.io/developers

您可以从http://country.io/data/获得国家代码到货币代码的映射并将其添加到您的代码中。这里有一个简单的例子:

function getCurrenyCode($country_code) { 
    $currency_codes = array(
     'GB' => 'GBP', 
     'FR' => 'EUR', 
     'DE' => 'EUR', 
     'IT' => 'EUR', 
    ); 

    if(isset($currency_codes[$country_code])) { 
     return $curreny_codes[$country_code]; 
    } 

    return 'USD'; // Default to USD 
} 
0
(new Zend_Currency(null, 'GB'))->getShortName(); 

返回string 'GBP'

0

您可以使用https://ip-api.io这个任务很容易。

+0

有一个调用此API的示例会很有用。 – 2017-08-06 21:05:28

2

基于https://ipdata.co的示例,该示例为您提供直接来自IP地址的货币符号和代码。

该API还具有10个全局端点,每个端点每天能够处理> 800M的呼叫!

$ip = '78.8.53.5'; 
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}")); 
echo $details->country_name; 
//Poland 
echo $details->city; 
//Głogów 
echo $details->currency; 
// PLN 
echo $details->currency_symbol; 
// zł 

免责声明

我创造了这个服务。