Я новичок в zend Framework. И я хочу получить код валюты, код страны по ip-адресу.Как получить код страны и код валюты по IP-адресу?
Могу ли я иметь какой-либо пример url ?.
Пожалуйста, помогите мне ...
Заранее спасибо.
Я новичок в zend Framework. И я хочу получить код валюты, код страны по ip-адресу.Как получить код страны и код валюты по IP-адресу?
Могу ли я иметь какой-либо пример url ?.
Пожалуйста, помогите мне ...
Заранее спасибо.
Много-много благодаря 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;
}
Этот URL (http://www.google.com/ig/calculator) больше не работает –
Измените свой код, чтобы использовать этот URL вместо этого ... 'https: //www.google.com/finance/converter? a = 1000 & from = USD & to = AUD' –
Для этого вы должны использовать базу данных MaxMind.
Вам нужно будет что-то вроде geoip - есть еще один я использовал в последнее время которого на основе подписки (не могу вспомнить его имя в мес).
Возможно, это один должен также помочь http://api.ip2.cc.nyud.net/?api=cname&ip=112.197.167.19
Также есть отличный вопрос Good php API for extracting country code from IP? возможно, вы можете создать плагин для извлечения кода страны и код валюты в рамках ZEND.
Вы можете использовать мою службу, то 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
}
(new Zend_Currency(null, 'GB'))->getShortName();
Возвращает string 'GBP'
.
Получит подробный код страны, валюты, конвертер валют, валюта символ и т.д. от http://www.geoplugin.net/json.gp?ip="ip address here"
Вы можете использовать https://ip-api.io для этой задачи легко.
Было бы полезно иметь пример вызова этого API. –
Его не бесплатно. У них нет правил для свободного использования. – Arif
Пример, основанный на 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ł
Отказ
Я создал эту услугу.
ipdata.co дает вам символ валюты и код с IP-адреса напрямую! См. Мой ответ ниже https://stackoverflow.com/a/47142938/3176550 – Jonathan