marketo / silverstripe-regional
使用现代的GeoIP查询机制,此SilverStripe模块将坐标、邮政编码、城市、州、国家、内容、时区、组织、和ISP提供给SilverStripe实例,并为静态网站提供一个前端API以利用。它可以与GeoIP驱动程序扩展以提供附加或自定义上下文数据。
Requires
This package is auto-updated.
Last update: 2024-03-15 17:17:59 UTC
README
Kirk Mayo
<kirk (dot) mayo (at) solnet (dot) co (dot) nz>
要求
- SilverStripe 3.2
- 返回json/jsonp结果的驱动程序
SilverStripe-Regional
使用现代的GeoIP查询机制,此SilverStripe模块将坐标、邮政编码、城市、州、国家、内容、时区、组织、和ISP提供给SilverStripe实例,并为静态网站提供一个前端API以利用。它可以与GeoIP驱动程序扩展以提供附加或自定义上下文数据。
Composer安装
composer require marketo/silverstripe-regional
配置
当前模块使用默认的GeoIP数据库路径,目前设置为 /usr/share/GeoIP/GeoLite2-City.mmdb。这可以通过yml配置文件更改,以下是一个示例。存在一个名为GeoRegion的模型管理器,它向返回的结果添加用户定义的字段。它通过国家代码检索要添加的详细信息,该国家代码需要与GeoRegion中的国家代码匹配。
IPInfoCache:
GeoPath: '/your/own/location/yourdb.mmdb'
您还可以通过在IPInfoCache下设置变量将结果作为json返回,以下是一个示例,同时也详细说明了如何指定要使用的驱动程序。
IPInfoCache:
Driver: 'MarketoRegionalDriver'
CORS: false
jsonp: 'yourOwnJsonpFunction';
GeoPathCity: '/usr/share/GeoIP/GeoIPCity.dat'
另一种设置jsonp函数的方法是直接使用get变量fn,这将覆盖yml配置文件中设置的任何内容,以下是一个示例URL。
http://marketo.local/geoip/5.71.14.28.jsonp?fn=MarketoLoad
接受第三方AJAX请求
如果您想允许第三方JavaScript请求查询服务(如AJAX),您需要在yml配置中将CORS标志设置为true,以便将Access-Control-Allow-Origin头发送回请求的浏览器,以下是一个示例。
IPInfoCache:
Driver: 'MarketoRegionalDriver'
CORS: true
jsonp: 'yourOwnJsonpFunction';
GeoPathCity: '/usr/share/GeoIP/GeoIPCity.dat'
使用jQuery或AJAX从第三方查询API。以下是一个简单的同步JavaScript示例,您可以调用具有主机和请求的requestInfo函数。
function requestInfo(host, request) { var xhr = new XMLHttpRequest(); xhr.open("GET", host + request, false); xhr.send(); return xhr.response; } // call with the following // var result = requestInfo('http://192.168.0.1/', 'geoip/50.206.151.39.json');
您还可以尝试以下异步示例
function asyncRequestInfo(host, request) { var xhr = new XMLHttpRequest(); xhr.open("GET", host + request, true); xhr.onload = function (e) { if (xhr.readyState === 4) { if (xhr.status === 200) { return xhr.responseText; } else { console.error(xhr.statusText); } } }; xhr.onerror = function (e) { console.error(xhr.statusText); }; xhr.send(null); } // call with the following // var result = asyncRequestInfo('http://192.168.0.1/', 'geoip/50.206.151.39.json');
GeoIP数据库
您需要检索数据库以便模块可以工作,这需要存储在服务器上,并且您可能需要在配置yml文件中将IPInfoCache下的GeoPath位置设置。免费数据库可以从这里下载 https://github.com/maxmind/GeoIP2-php
API端点
当前端点返回一个JSON对象,提供IP地址的位置详细信息。默认结果为json,但也可以在IPInfoCache配置中定义为jsonp。
http://YOURSITE/geoip/IPADDRESS
http://YOURSITE/geoip/IPADDRESS.json
http://YOURSITE/geoip/IPADDRESS.jsonp
待办事项
添加测试 分离连接方法,使其易于使用其他连接器和数据库