Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

MaxMind IPv4 Geolocation Lookup

See more Geolocation Examples

Demonstrates how to lookup Geolocation data for an IPv4 address using the MaxMind GeoIP2 Precision Web Service.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.JsonObject,
  Chilkat.Http;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  http: THttp;
  jsonStr: string;
  json: TJsonObject;
  continentCode: string;
  continentGeoname_id: Integer;
  continentNamesJa: string;
  continentNamesPt_BR: string;
  continentNamesRu: string;
  continentNamesZh_CN: string;
  continentNamesDe: string;
  continentNamesEn: string;
  continentNamesEs: string;
  continentNamesFr: string;
  countryIs_in_european_union: Boolean;
  countryIso_code: string;
  countryGeoname_id: Integer;
  countryNamesFr: string;
  countryNamesJa: string;
  countryNamesPt_BR: string;
  countryNamesRu: string;
  countryNamesZh_CN: string;
  countryNamesDe: string;
  countryNamesEn: string;
  countryNamesEs: string;
  maxmindQueries_remaining: Integer;
  registered_countryIs_in_european_union: Boolean;
  registered_countryIso_code: string;
  registered_countryGeoname_id: Integer;
  registered_countryNamesEs: string;
  registered_countryNamesFr: string;
  registered_countryNamesJa: string;
  registered_countryNamesPt_BR: string;
  registered_countryNamesRu: string;
  registered_countryNamesZh_CN: string;
  registered_countryNamesDe: string;
  registered_countryNamesEn: string;
  traitsIp_address: string;

begin
  success := False;

  //  This example requires the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  http := THttp.Create;

  http.Login := 'MAXMIND_ACCOUNT_ID';
  http.Password := 'MAXMIND_LICENSE_KEY';
  http.Accept := 'application/json';

  //  Lookup an IPv4 address: 149.250.207.170  (this was a randomly chosen address)
  jsonStr := http.QuickGetStr('https://geoip.maxmind.com/geoip/v2.1/country/149.250.207.170');
  if (http.LastMethodSuccess = False) then
    begin
      WriteLn(http.LastErrorText);
      Exit;
    end;

  json := TJsonObject.Create;
  json.EmitCompact := False;
  success := json.Load(jsonStr);

  WriteLn(json.Emit());

  //  Sample output:
  //  Use this online tool to generate parsing code from sample JSON: 
  //  Generate Parsing Code from JSON

  //  {
  //    "continent": {
  //      "code": "EU",
  //      "geoname_id": 6255148,
  //      "names": {
  //        "ja": "?????",
  //        "pt-BR": "Europa",
  //        "ru": "??????",
  //        "zh-CN": "??",
  //        "de": "Europa",
  //        "en": "Europe",
  //        "es": "Europa",
  //        "fr": "Europe"
  //      }
  //    },
  //    "country": {
  //      "is_in_european_union": true,
  //      "iso_code": "DE",
  //      "geoname_id": 2921044,
  //      "names": {
  //        "fr": "Allemagne",
  //        "ja": "????????",
  //        "pt-BR": "Alemanha",
  //        "ru": "????????",
  //        "zh-CN": "??",
  //        "de": "Deutschland",
  //        "en": "Germany",
  //        "es": "Alemania"
  //      }
  //    },
  //    "maxmind": {
  //      "queries_remaining": 49999
  //    },
  //    "registered_country": {
  //      "is_in_european_union": true,
  //      "iso_code": "DE",
  //      "geoname_id": 2921044,
  //      "names": {
  //        "es": "Alemania",
  //        "fr": "Allemagne",
  //        "ja": "????????",
  //        "pt-BR": "Alemanha",
  //        "ru": "????????",
  //        "zh-CN": "??",
  //        "de": "Deutschland",
  //        "en": "Germany"
  //      }
  //    },
  //    "traits": {
  //      "ip_address": "149.250.207.170"
  //    }
  //  }
  //  
  //  

  continentCode := json.StringOf('continent.code');
  continentGeoname_id := json.IntOf('continent.geoname_id');
  continentNamesJa := json.StringOf('continent.names.ja');
  continentNamesPt_BR := json.StringOf('continent.names.pt-BR');
  continentNamesRu := json.StringOf('continent.names.ru');
  continentNamesZh_CN := json.StringOf('continent.names.zh-CN');
  continentNamesDe := json.StringOf('continent.names.de');
  continentNamesEn := json.StringOf('continent.names.en');
  continentNamesEs := json.StringOf('continent.names.es');
  continentNamesFr := json.StringOf('continent.names.fr');
  countryIs_in_european_union := json.BoolOf('country.is_in_european_union');
  countryIso_code := json.StringOf('country.iso_code');
  countryGeoname_id := json.IntOf('country.geoname_id');
  countryNamesFr := json.StringOf('country.names.fr');
  countryNamesJa := json.StringOf('country.names.ja');
  countryNamesPt_BR := json.StringOf('country.names.pt-BR');
  countryNamesRu := json.StringOf('country.names.ru');
  countryNamesZh_CN := json.StringOf('country.names.zh-CN');
  countryNamesDe := json.StringOf('country.names.de');
  countryNamesEn := json.StringOf('country.names.en');
  countryNamesEs := json.StringOf('country.names.es');
  maxmindQueries_remaining := json.IntOf('maxmind.queries_remaining');
  registered_countryIs_in_european_union := json.BoolOf('registered_country.is_in_european_union');
  registered_countryIso_code := json.StringOf('registered_country.iso_code');
  registered_countryGeoname_id := json.IntOf('registered_country.geoname_id');
  registered_countryNamesEs := json.StringOf('registered_country.names.es');
  registered_countryNamesFr := json.StringOf('registered_country.names.fr');
  registered_countryNamesJa := json.StringOf('registered_country.names.ja');
  registered_countryNamesPt_BR := json.StringOf('registered_country.names.pt-BR');
  registered_countryNamesRu := json.StringOf('registered_country.names.ru');
  registered_countryNamesZh_CN := json.StringOf('registered_country.names.zh-CN');
  registered_countryNamesDe := json.StringOf('registered_country.names.de');
  registered_countryNamesEn := json.StringOf('registered_country.names.en');
  traitsIp_address := json.StringOf('traits.ip_address');


  http.Free;
  json.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.