Услуги, предоставляющие API
Я читал / слышал, что есть много услуг, которые дают API для этого, однако я действительно не хочу полагаться на кого-либо, поэтому, если есть способ сделать это без них, дайте мне знать.
Серверная сторона
А также я читал / слышал, что это делается в кодировании на стороне сервера, что меня пугает, я всегда думал, что это делается Javascript.
Список IP-адресов
И я также читал / слышал, что те сервисы, которые предоставляют API, у них очень огромный список IP-адресов от интернет-провайдеров, и они могут определить страну по этому списку, это правда? И если я хочу сделать это самостоятельно без API, должен ли я иметь список тоже?
Когда я выполнил поиск, я использовал этот скрипт: http://www.phptutorial.info/iptocountry/the_script.html
Db – это список php-файлов, и вы можете подписаться на список, который будет уведомлять вас о обновлениях базы данных. Довольно полезно, если у вас нет базы данных 🙂
MaxMind предлагает базу данных GeoLite Country IP, которая также используется или поддерживается некоторыми анализаторами веб-журналов, такими как Webalizer и AWStats.
Он доступен бесплатно в формате CSV, который можно импортировать в базу данных вашего приложения. Они также предоставляют полный набор руководств и примеров .
Легкий способ получить страну-пользователя – прочитать заголовок HTTP_ACCEPT_LANGUAGE.
Вот пример (PHP):
$langcodes=$_SERVER['HTTP_ACCEPT_LANGUAGE']; $host=gethostbyaddr( $_SERVER['REMOTE_ADDR'] ); if(preg_match("/(bg|bg-BG|cs|cs-CZ|da|da-DK|de|de-AT|de-CH|de-DE|de-LI|de-LU|el|el-GR|en-GB|en-IE|es-ES|et|et-EE|fi|fi-FI|fr-BE|fr-CH|fr-FR|fr-LU|fr-MC|ga|hu|hu-HU|it|it-CH|it-IT|lt|lt-LT|lv-LV|lv|mt|mt-MT|nl|nl-BE|nl-NL|pl|pl-PL|pt-PT|ro|ro-RO|sk|sl|sk-SK|sv|sv-FI|sv-SE|fr)([,;].*)?$/i",$langcodes) || preg_match("/(\.ad|\.al|\.at|\.ax|\.ba|\.be|\.bg|\.by|\.ch|\.cy|\.cz|\.de|\.dk|\.ee|\.es|\.eu|\.fi|\.fo|\.fr|\.gb|\.gg|\.gi|\.gr|\.hr|\.hu|\.ie|\.im|\.is|\.it|\.je|\.li|\.lt|\.lu|\.lv|\.mc|\.md|\.me|\.mk|\.mt|\.nl|\.no|\.pl|\.pt|\.ro|\.rs|\.se|\.si|\.sk|\.sm|\.ua|\.uk|\.va)$/i", $host)) { echo "European User"; } else echo "non-European User";
Любая проверка обычно идет по IP и использует некоторую базу данных ipranges и для какой страны.
Это работает в большинстве случаев, если пользователь не использует какой-либо прокси или не любит.
Большинство из них стоит денег или доступно только для определенных целей.
Другим решением, но не столь надежным, является использование браузеров langugae и, возможно, если вы можете запросить часовой пояс.
У меня нет каких-либо конкретных услуг для рекомендации, поскольку большинство из них не разрешают коммерческое использование, и поэтому я не могу их использовать;)
Вот решение (фактически 3 решения), которое рекомендует Google:
GeoLocation от Google