Horse-IPGeoLocation é um middleware de geolocalização baseada em endereço IP, desenvolvido parar o framework Horse.
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.
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.
Utilizando o Boss (Dependency manager for Delphi) é possível instalar a biblioteca de forma automática.
boss install github.com/antoniojmsjr/Horse-IPGeoLocation
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
Lista dos principais provedores de IPGeolocation homologados para utilização: Visualização
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 nopProvider
. [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
.
- 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
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);
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);
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);
Horse-IPGeoLocation
is free and open-source software licensed under the