commit
adffe69dd2
60
README.md
60
README.md
|
@ -87,7 +87,7 @@ is thrown. If the database is invalid or corrupt, a
|
||||||
|
|
||||||
See the API documentation for more details.
|
See the API documentation for more details.
|
||||||
|
|
||||||
### Example ###
|
### City Example ###
|
||||||
|
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
|
@ -118,6 +118,64 @@ print($record->location->longitude . "\n"); // -93.2323
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Connection-Type Example ###
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require_once 'vendor/autoload.php';
|
||||||
|
use GeoIp2\Database\Reader;
|
||||||
|
|
||||||
|
// This creates the Reader object, which should be reused across
|
||||||
|
// lookups.
|
||||||
|
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Connection-Type.mmdb');
|
||||||
|
|
||||||
|
$record = $reader->connectionType('128.101.101.101');
|
||||||
|
|
||||||
|
print($record->connectionType . "\n"); // 'Corporate'
|
||||||
|
print($record->ipAddress . "\n"); // '128.101.101.101'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### Domain Example ###
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require_once 'vendor/autoload.php';
|
||||||
|
use GeoIp2\Database\Reader;
|
||||||
|
|
||||||
|
// This creates the Reader object, which should be reused across
|
||||||
|
// lookups.
|
||||||
|
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-Domain.mmdb');
|
||||||
|
|
||||||
|
$record = $reader->domain('128.101.101.101');
|
||||||
|
|
||||||
|
print($record->domain . "\n"); // 'umn.edu'
|
||||||
|
print($record->ipAddress . "\n"); // '128.101.101.101'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
### ISP Example ###
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
require_once 'vendor/autoload.php';
|
||||||
|
use GeoIp2\Database\Reader;
|
||||||
|
|
||||||
|
// This creates the Reader object, which should be reused across
|
||||||
|
// lookups.
|
||||||
|
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-ISP.mmdb');
|
||||||
|
|
||||||
|
$record = $reader->isp('128.101.101.101');
|
||||||
|
|
||||||
|
print($record->autonomousSystemNumber . "\n"); // 217
|
||||||
|
print($record->autonomousSystemOrganization . "\n"); // 'University of Minnesota'
|
||||||
|
print($record->isp . "\n"); // 'University of Minnesota'
|
||||||
|
print($record->organization . "\n"); // 'University of Minnesota'
|
||||||
|
|
||||||
|
print($record->ipAddress . "\n"); // '128.101.101.101'
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## Web Service Client ##
|
## Web Service Client ##
|
||||||
|
|
||||||
### Usage ###
|
### Usage ###
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"php": ">=5.3.1"
|
"php": ">=5.3.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "3.7.*",
|
"phpunit/phpunit": "4.1.*",
|
||||||
"satooshi/php-coveralls": "dev-master"
|
"satooshi/php-coveralls": "dev-master"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit f887fec99eabf6d68746e257b894bae854fefc27
|
Subproject commit f53865477d361101969853f8d418458fd58cdc74
|
|
@ -125,7 +125,42 @@ class Reader implements ProviderInterface
|
||||||
return $this->modelFor('Omni', $ipAddress);
|
return $this->modelFor('Omni', $ipAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function connectionType($ipAddress)
|
||||||
|
{
|
||||||
|
return $this->flatModelFor('ConnectionType', $ipAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function domain($ipAddress)
|
||||||
|
{
|
||||||
|
return $this->flatModelFor('Domain', $ipAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isp($ipAddress)
|
||||||
|
{
|
||||||
|
return $this->flatModelFor('Isp', $ipAddress);
|
||||||
|
}
|
||||||
|
|
||||||
private function modelFor($class, $ipAddress)
|
private function modelFor($class, $ipAddress)
|
||||||
|
{
|
||||||
|
$record = $this->getRecord($ipAddress);
|
||||||
|
|
||||||
|
$record['traits']['ip_address'] = $ipAddress;
|
||||||
|
$class = "GeoIp2\\Model\\" . $class;
|
||||||
|
|
||||||
|
return new $class($record, $this->locales);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function flatModelFor($class, $ipAddress)
|
||||||
|
{
|
||||||
|
$record = $this->getRecord($ipAddress);
|
||||||
|
|
||||||
|
$record['ip_address'] = $ipAddress;
|
||||||
|
$class = "GeoIp2\\Model\\" . $class;
|
||||||
|
|
||||||
|
return new $class($record);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getRecord($ipAddress)
|
||||||
{
|
{
|
||||||
$record = $this->dbReader->get($ipAddress);
|
$record = $this->dbReader->get($ipAddress);
|
||||||
if ($record === null) {
|
if ($record === null) {
|
||||||
|
@ -133,10 +168,7 @@ class Reader implements ProviderInterface
|
||||||
"The address $ipAddress is not in the database."
|
"The address $ipAddress is not in the database."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$record['traits']['ip_address'] = $ipAddress;
|
return $record;
|
||||||
$class = "GeoIp2\\Model\\" . $class;
|
|
||||||
|
|
||||||
return new $class($record, $this->locales);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
53
src/GeoIp2/Model/AbstractModel.php
Normal file
53
src/GeoIp2/Model/AbstractModel.php
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace GeoIp2\Model;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
abstract class AbstractModel implements \JsonSerializable
|
||||||
|
{
|
||||||
|
protected $raw;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __construct($raw)
|
||||||
|
{
|
||||||
|
$this->raw = $raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
protected function get($field)
|
||||||
|
{
|
||||||
|
return isset($this->raw[$field]) ? $this->raw[$field] : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __get($attr)
|
||||||
|
{
|
||||||
|
if ($attr != "instance" && property_exists($this, $attr)) {
|
||||||
|
return $this->$attr;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \RuntimeException("Unknown attribute: $attr");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __isset($attr)
|
||||||
|
{
|
||||||
|
return $attr != "instance" && isset($this->$attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jsonSerialize()
|
||||||
|
{
|
||||||
|
return $this->raw;
|
||||||
|
}
|
||||||
|
}
|
31
src/GeoIp2/Model/ConnectionType.php
Normal file
31
src/GeoIp2/Model/ConnectionType.php
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace GeoIp2\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides the GeoIP2 Connection-Type model.
|
||||||
|
*
|
||||||
|
* @property string $connectionType The connection type may take the following
|
||||||
|
* values: "Dialup", "Cable/DSL", "Corporate", "Cellular". Additional
|
||||||
|
* values may be added in the future.
|
||||||
|
*
|
||||||
|
* @property string $ipAddress The IP address that the data in the model is
|
||||||
|
* for.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ConnectionType extends AbstractModel
|
||||||
|
{
|
||||||
|
protected $connectionType;
|
||||||
|
protected $ipAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __construct($raw)
|
||||||
|
{
|
||||||
|
parent::__construct($raw);
|
||||||
|
|
||||||
|
$this->connectionType = $this->get('connection_type');
|
||||||
|
$this->ipAddress = $this->get('ip_address');
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,8 +3,7 @@
|
||||||
namespace GeoIp2\Model;
|
namespace GeoIp2\Model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class provides a model for the data returned by the GeoIP2 Country
|
* This class provides a model for the data returned by the GeoIP2 Country.
|
||||||
* end point.
|
|
||||||
*
|
*
|
||||||
* The only difference between the City, City/ISP/Org, and Omni model
|
* The only difference between the City, City/ISP/Org, and Omni model
|
||||||
* classes is which fields in each record may be populated. See
|
* classes is which fields in each record may be populated. See
|
||||||
|
@ -33,23 +32,22 @@ namespace GeoIp2\Model;
|
||||||
* @property \GeoIp2\Record\Traits $traits Data for the traits of the
|
* @property \GeoIp2\Record\Traits $traits Data for the traits of the
|
||||||
* requested IP address.
|
* requested IP address.
|
||||||
*/
|
*/
|
||||||
class Country implements \JsonSerializable
|
class Country extends AbstractModel
|
||||||
{
|
{
|
||||||
private $continent;
|
protected $continent;
|
||||||
private $country;
|
protected $country;
|
||||||
private $locales;
|
protected $locales;
|
||||||
private $maxmind;
|
protected $maxmind;
|
||||||
private $registeredCountry;
|
protected $registeredCountry;
|
||||||
private $representedCountry;
|
protected $representedCountry;
|
||||||
private $traits;
|
protected $traits;
|
||||||
private $raw;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ignore
|
* @ignore
|
||||||
*/
|
*/
|
||||||
public function __construct($raw, $locales = array('en'))
|
public function __construct($raw, $locales = array('en'))
|
||||||
{
|
{
|
||||||
$this->raw = $raw;
|
parent::__construct($raw);
|
||||||
|
|
||||||
$this->continent = new \GeoIp2\Record\Continent(
|
$this->continent = new \GeoIp2\Record\Continent(
|
||||||
$this->get('continent'),
|
$this->get('continent'),
|
||||||
|
@ -72,37 +70,4 @@ class Country implements \JsonSerializable
|
||||||
|
|
||||||
$this->locales = $locales;
|
$this->locales = $locales;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
protected function get($field)
|
|
||||||
{
|
|
||||||
return isset($this->raw[$field]) ? $this->raw[$field] : array();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
public function __get($attr)
|
|
||||||
{
|
|
||||||
if ($attr != "instance" && isset($this->$attr)) {
|
|
||||||
return $this->$attr;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new \RuntimeException("Unknown attribute: $attr");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
public function __isset($attr)
|
|
||||||
{
|
|
||||||
return $attr != "instance" && isset($this->$attr);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function jsonSerialize()
|
|
||||||
{
|
|
||||||
return $this->raw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
31
src/GeoIp2/Model/Domain.php
Normal file
31
src/GeoIp2/Model/Domain.php
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace GeoIp2\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides the GeoIP2 Domain model.
|
||||||
|
*
|
||||||
|
* @property string $domain The second level domain associated with the IP
|
||||||
|
* address. This will be something like "example.com" or "example.co.uk",
|
||||||
|
* not "foo.example.com".
|
||||||
|
*
|
||||||
|
* @property string $ipAddress The IP address that the data in the model is
|
||||||
|
* for.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Domain extends AbstractModel
|
||||||
|
{
|
||||||
|
protected $domain;
|
||||||
|
protected $ipAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __construct($raw)
|
||||||
|
{
|
||||||
|
parent::__construct($raw);
|
||||||
|
|
||||||
|
$this->domain = $this->get('domain');
|
||||||
|
$this->ipAddress = $this->get('ip_address');
|
||||||
|
}
|
||||||
|
}
|
45
src/GeoIp2/Model/Isp.php
Normal file
45
src/GeoIp2/Model/Isp.php
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace GeoIp2\Model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class provides the GeoIP2 Connection-Type model.
|
||||||
|
*
|
||||||
|
* @property integer $autonomousSystemNumber The autonomous system number
|
||||||
|
* associated with the IP address.
|
||||||
|
*
|
||||||
|
* @property string $autonomousSystemOrganization The organization associated
|
||||||
|
* with the registered autonomous system number for the IP address.
|
||||||
|
*
|
||||||
|
* @property string $isp The name of the ISP associated with the IP address.
|
||||||
|
*
|
||||||
|
* @property string $organization The name of the organization associated with
|
||||||
|
* the IP address.
|
||||||
|
*
|
||||||
|
* @property string $ipAddress The IP address that the data in the model is
|
||||||
|
* for.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Isp extends AbstractModel
|
||||||
|
{
|
||||||
|
protected $autonomousSystemNumber;
|
||||||
|
protected $autonomousSystemOrganization;
|
||||||
|
protected $isp;
|
||||||
|
protected $organization;
|
||||||
|
protected $ipAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
public function __construct($raw)
|
||||||
|
{
|
||||||
|
parent::__construct($raw);
|
||||||
|
$this->autonomousSystemNumber = $this->get('autonomous_system_number');
|
||||||
|
$this->autonomousSystemOrganization =
|
||||||
|
$this->get('autonomous_system_organization');
|
||||||
|
$this->isp = $this->get('isp');
|
||||||
|
$this->organization = $this->get('organization');
|
||||||
|
|
||||||
|
$this->ipAddress = $this->get('ip_address');
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ abstract class AbstractRecord implements \JsonSerializable
|
||||||
*/
|
*/
|
||||||
public function __construct($record)
|
public function __construct($record)
|
||||||
{
|
{
|
||||||
$this->record = $record;
|
$this->record = isset($record) ? $record : array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -71,6 +71,47 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
|
||||||
$reader->close();
|
$reader->close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testConnectionType()
|
||||||
|
{
|
||||||
|
$reader = new Reader('maxmind-db/test-data/GeoIP2-Connection-Type-Test.mmdb');
|
||||||
|
$ipAddress = '1.0.1.0';
|
||||||
|
|
||||||
|
$record = $reader->connectionType($ipAddress);
|
||||||
|
$this->assertEquals('Cable/DSL', $record->connectionType);
|
||||||
|
$this->assertEquals($ipAddress, $record->ipAddress);
|
||||||
|
$reader->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testDomain()
|
||||||
|
{
|
||||||
|
$reader = new Reader('maxmind-db/test-data/GeoIP2-Domain-Test.mmdb');
|
||||||
|
|
||||||
|
$ipAddress = '1.2.0.0';
|
||||||
|
$record = $reader->domain($ipAddress);
|
||||||
|
$this->assertEquals('maxmind.com', $record->domain);
|
||||||
|
$this->assertEquals($ipAddress, $record->ipAddress);
|
||||||
|
$reader->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testIsp()
|
||||||
|
{
|
||||||
|
$reader = new Reader('maxmind-db/test-data/GeoIP2-ISP-Test.mmdb');
|
||||||
|
|
||||||
|
$ipAddress = '1.128.0.0';
|
||||||
|
$record = $reader->isp($ipAddress);
|
||||||
|
$this->assertEquals(1221, $record->autonomousSystemNumber);
|
||||||
|
$this->assertEquals(
|
||||||
|
'Telstra Pty Ltd',
|
||||||
|
$record->autonomousSystemOrganization
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals('Telstra Internet', $record->isp);
|
||||||
|
$this->assertEquals('Telstra Internet', $record->organization);
|
||||||
|
|
||||||
|
$this->assertEquals($ipAddress, $record->ipAddress);
|
||||||
|
$reader->close();
|
||||||
|
}
|
||||||
|
|
||||||
public function checkAllMethods($testCb)
|
public function checkAllMethods($testCb)
|
||||||
{
|
{
|
||||||
foreach (array('city', 'cityIspOrg', 'country', 'omni') as $method) {
|
foreach (array('city', 'cityIspOrg', 'country', 'omni') as $method) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user