marketo/silverstripe-regional

此包已被弃用且不再维护。未建议替代包。

使用现代的GeoIP查询机制,此SilverStripe模块将坐标、邮政编码、城市、州、国家、内容、时区、组织、和ISP提供给SilverStripe实例,并为静态网站提供一个前端API以利用。它可以与GeoIP驱动程序扩展以提供附加或自定义上下文数据。

安装次数: 1,322

依赖者: 2

建议者: 0

安全: 0

星标: 4

关注者: 15

分支: 1

开放问题: 0

类型:silverstripe-module

dev-master 2016-02-22 18:08 UTC

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

待办事项

添加测试 分离连接方法,使其易于使用其他连接器和数据库