libgeoip-erlang /

Filename Size Date modified Message
66 B
1.1 KB
75 B
2.6 KB
284 B
what:  erlang port for libgeoip.  supports GeoIPCity and GeoLiteCity DBs.
when:  made December 2008. published December 2008.
when2: Last updated October 2010.  Rebar-ized and added license.
where: everywhere
why:   I don't like having to do external service calls for geo lookups.

  - libgeoip
    - yum: yum install GeoIP GeoIP-devel
    - macports: port install libgeoip
    - freebsd: ports/net/GeoIP/
    - or download from
  - maxmind City data source
    - Download latest free version (updated monthly):
    - Or, buy their slightly more accurate DB for $370:

performance: 6600 to 7000 lookups per second
benchmark versus egeoip: 
  a typical result (+hipe) is:
      libgeoip-erlang: 7057 lookups per second
               egeoip: 5498 lookups per second
  resulting in libgeoip-erlang being about 28% faster than egeoip.

Building Instructions:
         > rebar compile
         You may need to edit rebar.config if your maxmind headers and
         objects aren't in /opt/local.

Note: You must have the libgeoip directory name *in* your path for libgeoip to
find the correct port to run.

> erl -pz ../ligeoip-erlang/ebin -pz ../libgeoip-erlang/priv

Eshell V5.6.5  (abort with ^G)
1> application:start(libgeoip_app).
2> libgeoip:set_db("/usr/local/maxmind/data/GeoLiteCity.dat").
3> libgeoip:lookup(<<192,90,64,2>>).
4> libgeoip:lookup(<<2,2,2,2>>).    

usage [DIRECT]:
> erl -pz ../libgeoip-erlang/ebin -pz ../libgeoip-erlang/priv

Eshell V5.6.5  (abort with ^G)
1> libgeoip:start_link("/usr/local/maxmind/data/GeoLiteCity.dat").
{ok, (State)}
2> libgeoip:lookup(<<66,23,219,241>>).
3> rr(libgeoip).
4> libgeoip:lookup(<<209,85,171,100>>).
#geoip{country = "US",region = "CA",state = "California",
       city = "Mountain View",postal = "94043",
       lat = 37.4192008972168,lng = -122.05740356445313,
       geohash = "9q9hyebw8ke7"}
5> libgeoip:lookup(<<172,16,5,20>>). 

  - You must set the DB path by:
    - libgeoip:start_link("DB Path").
      - OR -
    - libgeoip:set_db("DB Path").
  - You can change the DB path at any time.
  - If you upgrade your database in-place you must set_db to clear out
    the old DB and load the new one.
  - Failure to set the DB path results in lookup/1 timing out.