libgeoip-erlang /

Filename Size Date modified Message
c_src
include
src
66 B
1.1 KB
75 B
2.6 KB
284 B
who:   matt@genges.com
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.

prereqs:
  - libgeoip
    - yum: yum install GeoIP GeoIP-devel
    - macports: port install libgeoip
    - freebsd: ports/net/GeoIP/
    - or download from http://www.maxmind.com/app/c
  - maxmind City data source
    - Download latest free version (updated monthly):
      http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
    - Or, buy their slightly more accurate DB for $370:
      https://www.maxmind.com/app/cart?add_product_id=132

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.

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

Eshell V5.6.5  (abort with ^G)
1> application:start(libgeoip_app).
ok
2> libgeoip:set_db("/usr/local/maxmind/data/GeoLiteCity.dat").
db_set
3> libgeoip:lookup(<<192,90,64,2>>).
{geoip,"US","MA","Massachusetts","Billerica","01821",
       42.54930114746094,-71.25579833984375,"drt649c5es9g"}
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>>).
{geoip,"US","GA","Georgia","Lawrenceville","30043",
       34.00910186767578,-84.00879669189453,"dnh32r4tmhhf"}
3> rr(libgeoip).
[geoip]
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>>). 
[]


Notes:
  - 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.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.