提供API的服务
我读/听说有很多服务可以让API做到这一点,但是我真的不想依赖任何人,所以如果有办法在没有它们的情况下让我知道。
服务器端
而且我读/听说这是在服务器端编码完成的,这使我感到困惑,我一直认为这是通过Javascript完成的。
IP列表
我还阅读/听说那些提供API的服务他们拥有来自ISP的非常庞大的IP列表,他们可以通过此列表确定国家,这是真的吗?如果我想在没有API的情况下单独使用它,我是否也应该有一个列表?
答案 0 :(得分:6)
当我进行查找时,我使用了这个脚本:http://www.phptutorial.info/iptocountry/the_script.html
db是一个php文件列表,您可以订阅一个列表,该列表将通知您数据库更新。如果您没有数据库,那将非常有用:)
答案 1 :(得分:2)
MaxMind提供 GeoLite国家/地区 IP数据库,某些Web日志分析器(如Webalizer和AWStats)也使用或支持该数据库。
可以CSV格式免费使用,您可以将其导入应用程序的数据库。 它们还提供了guides and examples的全面集合。
答案 2 :(得分:2)
获取用户所在国家/地区的简便方法是阅读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";
答案 3 :(得分:1)
任何检查通常都是通过IP并使用一些ipranges数据库以及分配到哪个国家/地区。
除非用户使用某些代理或喜欢,否则这在大多数情况下都适用。
其中大部分都是花钱或只能用于某些目的。
另一个解决方案但不可靠的是使用浏览器langugae,如果你可以查询时区,也可能。
我没有任何特定服务可供推荐,因为大多数服务不允许商业用途,因此我不能使用它们;)
答案 4 :(得分:0)
以下是Google建议的解决方案(实际上是3个解决方案):