2011-04-21 5 views
8

Я новичок в zend Framework. И я хочу получить код валюты, код страны по ip-адресу.Как получить код страны и код валюты по IP-адресу?

Могу ли я иметь какой-либо пример url ?.

Пожалуйста, помогите мне ...

Заранее спасибо.

+0

ipdata.co дает вам символ валюты и код с IP-адреса напрямую! См. Мой ответ ниже https://stackoverflow.com/a/47142938/3176550 – Jonathan

ответ

4

Много-много благодаря jmathai, ToonMariner, experimentX за ценные советы.

Но я получил простое решение

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

Этот URL (http://www.google.com/ig/calculator) больше не работает –

+0

Измените свой код, чтобы использовать этот URL вместо этого ... 'https: //www.google.com/finance/converter? a = 1000 & from = USD & to = AUD' –

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. –

+0

Его не бесплатно. У них нет правил для свободного использования. – Arif

2

Пример, основанный на https://ipdata.co, который дает вам символ валюты и код непосредственно с IP-адреса.

API также имеет 10 глобальных конечных точек, каждый из которых способен обрабатывать> 800 М вызовов ежедневно!

$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ł 

Отказ

Я создал эту услугу.

Смежные вопросы