Геолокация показывает другой город не очень точный - PullRequest
1 голос
/ 08 июня 2019

Я использую геолокацию для определения текущего города, который не показывает точный город, например, я нахожусь в Бангалоре, и он показывает Ченнай или иногда Тируванантпурам.Пожалуйста, дайте мне знать, как правильно показывать текущий город.Ниже мой код -

function fetch($host) {

    if ( function_exists('curl_init') ) {

        //use cURL to fetch data
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $host);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'geoPlugin PHP Class v1.1');
        $response = curl_exec($ch);
        curl_close ($ch);

    } else if ( ini_get('allow_url_fopen') ) {

        //fall back to fopen()
        $response = file_get_contents($host, 'r');

    } else {

        trigger_error ('geoPlugin class Error: Cannot retrieve data. Either compile PHP with cURL support or enable allow_url_fopen in php.ini ', E_USER_ERROR);
        return;

    }

    return $response;
}

function convert($amount, $float=2, $symbol=true) {

    //easily convert amounts to geolocated currency.
    if ( !is_numeric($this->currencyConverter) || $this->currencyConverter == 0 ) {
        trigger_error('geoPlugin class Notice: currencyConverter has no value.', E_USER_NOTICE);
        return $amount;
    }
    if ( !is_numeric($amount) ) {
        trigger_error ('geoPlugin class Warning: The amount passed to geoPlugin::convert is not numeric.', E_USER_WARNING);
        return $amount;
    }
    if ( $symbol === true ) {
        return $this->currencySymbol . round( ($amount * $this->currencyConverter), $float );
    } else {
        return round( ($amount * $this->currencyConverter), $float );
    }
}

1 Ответ

0 голосов
/ 28 июня 2019

Проблема не в вашем коде, а в источнике информации.IP-геолокация не на 100% точна, и вам нужно жить с этим.Наилучшим выходом из ситуации является использование службы, такой как Ipregistry (заявление об отказе: я запускаю службу), которая сопоставляет данные из нескольких источников, чтобы уменьшить количество ложных срабатываний и смягчить то, что вы испытываете.

На основев вашем коде похоже, что вы угадываете валюту своих пользователей.В этом случае вы можете выполнить HTTP-запрос до следующей конечной точки:

https://api.ipregistry.co/?key=tryout

и посмотреть в поле ответа currency.

...