Pure Crystal MaxMind DB reader, which doesn't require libmaxminddb.
If you work with GeoIP2, please use: https://github.com/delef/geoip2.cr
Add this to your application's shard.yml
:
dependencies:
maxminddb:
github: delef/maxminddb.cr
require "maxminddb"
mmdb = MaxMindDB.open("#{__DIR__}/../data/GeoLite2-City.mmdb")
result = mmdb.get("1.1.1.1")
result["city"]["geoname_id"].as_i # => 2151718
result["city"]["names"]["en"].as_s # => "Research"
result["continent"]["code"].as_s # => "OC"
result["continent"]["geoname_id"].as_i # => 6255151
result["continent"]["names"]["en"].as_s # => "Oceania"
result["country"]["iso_code"].as_s # => "AU"
result["country"]["geoname_id"].as_i # => 2077456
result["country"]["names"]["en"].as_s # => "Australia"
result["location"]["accuracy_radius"].as_i # => 1000
result["location"]["latitude"].as_f # => -37.7
result["location"]["longitude"].as_f # => 145.1833
result["location"]["time_zone"].as_s # => "Australia/Melbourne"
result["postal"]["code"].as_s # => "3095"
result["registered_country"]["iso_code"].as_s # => "AU"
result["registered_country"]["geoname_id"].as_i # => 2077456
result["registered_country"]["names"]["en"].as_s # => "Australia"
result["subdivisions"][0]["iso_code"].as_s # => "VIC"
result["subdivisions"][0]["geoname_id"].as_i # => 2145234
result["subdivisions"][0]["names"]["en"].as_s # => "Victoria"