/Horse-IPGeoLocation

⚡ Middleware de geolocalização baseada em endereço IP, desenvolvido parar o framework Horse.

Primary LanguagePascalApache License 2.0Apache-2.0

Maintained YES Memory Leak Verified YES Delphi Supported Versions HorseVersion Stars Forks Issues Release

Horse-IPGeoLocation

Horse-IPGeoLocation é um middleware de geolocalização baseada em endereço IP, desenvolvido parar o framework Horse.

❓ O que é a geolocalização de IP?

A geolocalização baseada em endereços IP é uma técnica usada para estimar a localização geográfica de um dispositivo conectado à Internet usando o endereço IP do mesmo. Este mecanismo depende de que o endereço IP do dispositivo apareça em um banco de dados com sua respectiva localização, endereço postal, cidade, país, região ou coordenadas geográficas, que são alguns dos níveis de detalhe que podem ser registrados.

⭕ Pré-requisito

Para utilizar o Horse-IPGeoLocation é necessário a instalação do framework IPGeoLocation.

Obs: Se você usa Boss (Dependency manager for Delphi), o IPGeoLocation será instalado automaticamente ao instalar Horse-IPGeoLocation.

⚙️ Instalação Automatizada

Utilizando o Boss (Dependency manager for Delphi) é possível instalar a biblioteca de forma automática.

boss install github.com/antoniojmsjr/Horse-IPGeoLocation

⚙️ Instalação Manual

Se você optar por instalar manualmente, basta adicionar as seguintes pastas ao seu projeto, em Project > Options > Delphi Compiler > Target > All Configurations > Search path

Obs: Se você usar a instalação manual, será necessário a instalação do framework IPGeoLocation.

..\Horse-IPGeoLocation\Source

🧬 Provedores IPGeolocation

Lista dos principais provedores de IPGeolocation homologados para utilização: Visualização

⚡️ Uso

Uso e definição do middleware

uses Horse, Horse.IPGeoLocation, Horse.IPGeoLocation.Types;

//PARA TESTAR IPGeolocation LOCALMENTE
if (DebugHook <> 0) then
  THorse.Use(IPGeoLocation(TIPGeoLocationProvider.IPInfo, EmptyStr, '8.8.8.8'))
else
  THorse.Use(IPGeoLocation(TIPGeoLocationProvider.IPInfo, EmptyStr));
function IPGeoLocation(const pProvider: TIPGeoLocationProvider;
                       const pToken: string;
                       const pAPIKey: Integer;
                       const pLanguageCode: string): THorseCallback;
  • pProvider: Identificação do provedor de IPGeolocation homologado.
  • pAPIKey: ApiKey gerado no site do provedor de IPGeolocation identificado no pProvider. [opcional]
  • pTimeOut: Tempo em milissegundos para finalização da requisição. [opcional]
  • pLanguageCode: Identificação do código de idioma utilizado no retorno do JSON. Ex.: pt-br/en-us. [opcional]
  • pIPDebug: IP para testar com requisição local.
    • Requisições locais ou IP privados ao servidor Horse, não será executado o middleware Horse-IPGeoLocation, com a exceção da utilização do pIPDebug.

Exemplo de visualização do JSON de retorno da requisição do IPGeolocation.

uses Horse, Horse.IPGeoLocation, Horse.IPGeoLocation.Types;

THorse.Get('ipgeo/json',
  procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
  var
    lHorseGeoLocation: THorseGeoLocation;
  begin
    if Req.Sessions.TryGetSession(lHorseGeoLocation) then
      Res.Send(lHorseGeoLocation.ToJSON)
    else
      Res.Send(Req.RawWebRequest.RemoteAddr);
  end);

image

Exemplo de visualização do mapa(Google) gerado com o retorno da requisição do IPGeolocation.

uses Horse, Horse.IPGeoLocation, Horse.IPGeoLocation.Types;

THorse.Get('ipgeo/gmaps',
  procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
  const
    cURLMaps = 'https://maps.google.com/maps?q=%g,%g'; //1º: LATITUDE/2º: LONGITUDE
  var
    lHorseGeoLocation: THorseGeoLocation;
    lFormatSettings: TFormatSettings;
    lURLMaps: string;
  begin
    lFormatSettings:= TFormatSettings.Create('en-US');

    if Req.Sessions.TryGetSession(lHorseGeoLocation) then
    begin
      lURLMaps := Format(cURLMaps, [lHorseGeoLocation.Latitude, lHorseGeoLocation.Longitude], lFormatSettings);
      Res.RedirectTo(lURLMaps);
    end
    else
      Res.Send(Req.RawWebRequest.RemoteAddr);
  end);

Exemplo de visualização do mapa(Waze) gerado com o retorno da requisição do IPGeolocation.

uses Horse, Horse.IPGeoLocation, Horse.IPGeoLocation.Types;

THorse.Get('ipgeo/wmaps',
  procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
  const
    cURLMaps = 'https://waze.com/ul?ll=%g,%g&z=10'; //1º: LATITUDE/2º: LONGITUDE
  var
    lHorseGeoLocation: THorseGeoLocation;
    lFormatSettings: TFormatSettings;
    lURLMaps: string;
  begin
    lFormatSettings:= TFormatSettings.Create('en-US');

    if Req.Sessions.TryGetSession(lHorseGeoLocation) then
    begin
      lURLMaps := Format(cURLMaps, [lHorseGeoLocation.Latitude, lHorseGeoLocation.Longitude], lFormatSettings);
      Res.RedirectTo(lURLMaps);
    end
    else
      Res.Send(Req.RawWebRequest.RemoteAddr);
  end);

⚠️ Licença

Horse-IPGeoLocation is free and open-source software licensed under the License