Я новичок в zend Framework. И я хочу получить код валюты, код страны по ip-адресу.
Могу ли я иметь какой-либо пример url ?.
Пожалуйста помогите…
Заранее спасибо.
Вы можете использовать мой сервис, API http://ipinfo.io, чтобы получить код страны:
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- 8.8.8.8
пользователя просто передавались в $_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 }
Многие из многих благодаря jmathai , ToonMariner , experX за ценные советы.
Но у меня есть простое решение
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; }
Для этого вы должны использовать базу данных MaxMind.
Получить подробный код страны, валюту, конвертер валют, символ валюты и т. Д. С http://www.geoplugin.net/json.gp?ip="ip адрес здесь "
Вам нужно что-то вроде geoip – есть еще один, который я использовал недавно, который основан на подписке (не могу вспомнить его имя в mo).
Возможно, это также поможет http://api.ip2.cc.nyud.net/?api=cname&ip=112.197.167.19
Также есть отличный вопрос. Хороший php API для извлечения кода страны из IP? возможно, вы можете создать плагин для извлечения кода страны и кода валюты в zend framework.
Пример, основанный на https://ipdata.co
$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
(new Zend_Currency(null, 'GB'))->getShortName();
Возвращает string 'GBP'
.
Вы легко можете использовать https://ip-api.io для этой задачи.