Геолокация показывает другой город не очень точно

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

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 );
    }
}

person Indrakant    schedule 08.06.2019    source источник
comment
Не могли бы вы показать свой текущий код? Если вы покажете нам, что вы делаете, будет легче найти книгу.   -  person Valentino    schedule 08.06.2019
comment
Добавьте его в вопрос с помощью кнопки редактировать. Будет намного читабельнее, если использовать правильный формат   -  person Valentino    schedule 08.06.2019
comment
Пожалуйста, добавьте код к вопросу, а НЕ в качестве комментариев. Форматирование кода может быть применено для удобства чтения.   -  person Paul T.    schedule 08.06.2019
comment
Конечно, добавил код. Посоветуйте, как исправить. заранее спасибо   -  person Indrakant    schedule 08.06.2019


Ответы (1)


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

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

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

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

person Laurent    schedule 27.06.2019