t/data/geodb/create_GeoIP2-City.pl (127 lines of code) (raw):
#!/usr/bin/perl
use MaxMind::DB::Writer::Tree;
my %types = (
accuracy_radius => 'uint32',
autonomous_system_number => 'uint32',
is_in_european_union => 'uint32',
autonomous_system_organization => 'utf8_string',
city => 'map',
continent => 'map',
country => 'map',
en => 'utf8_string',
geoname_id => 'uint32',
iso_code => 'utf8_string',
code => 'utf8_string',
isp => 'utf8_string',
latitude => 'double',
location => 'map',
longitude => 'double',
names => 'map',
organization => 'utf8_string',
registered_country => 'map',
time_zone => 'utf8_string',
subdivisions => ['array', 'map'],
);
my $tree = MaxMind::DB::Writer::Tree->new(
database_type => 'GeoIP2-City',
description => { en => 'SpamAssassin test data' },
ip_version => 6,
record_size => 28,
map_key_type_callback => sub { $types{ $_[0] } },
);
$tree->insert_network(
'8.8.8.8/32' => {
'country' => {
'iso_code' => 'US',
'is_in_european_union' => 0,
'names' => {
'en' => 'United States',
},
'geoname_id' => 6252001
},
'continent' => {
'names' => {
'en' => 'North America',
},
'geoname_id' => 6255149,
'code' => 'NA'
},
'subdivisions' => [
{
'names' => {
'en' => 'United States',
},
'geoname_id' => 6269131,
'iso_code' => 'USA'
}
],
'city' => {
'names' => {
'en' => 'New York',
},
'geoname_id' => 5128581
},
'registered_country' => {
'iso_code' => 'US',
'geoname_id' => 6252001,
'names' => {
'en' => 'United States'
}
},
'location' => {
'latitude' => '43.0003',
'longitude' => '-75.4999',
'time_zone' => 'America/New_York',
'accuracy_radius' => 10
}
},
);
$tree->insert_network(
'2001:4860:4860::8888/128' => {
'country' => {
'iso_code' => 'US',
'is_in_european_union' => 0,
'names' => {
'en' => 'United States',
},
'geoname_id' => 6252001
},
'continent' => {
'names' => {
'en' => 'North America',
},
'geoname_id' => 6255149,
'code' => 'NA'
},
'subdivisions' => [
{
'names' => {
'en' => 'United States',
},
'geoname_id' => 6269131,
'iso_code' => 'USA'
}
],
'city' => {
'names' => {
'en' => 'New York',
},
'geoname_id' => 5128581
},
'registered_country' => {
'iso_code' => 'US',
'geoname_id' => 6252001,
'names' => {
'en' => 'United States'
}
},
'location' => {
'latitude' => '43.0003',
'longitude' => '-75.4999',
'time_zone' => 'America/New_York',
'accuracy_radius' => 10
}
},
);
open my $fh, '>:raw', 'GeoIP2-City.mmdb';
$tree->write_tree($fh);
close $fh;