geolocalización ip masiva

Un usuario Pregunto ✅

Anónimo

Hola PowerBI,

Me gustaría realizar una búsqueda masiva de todas las direcciones IP dentro de mi archivo, proporcionándoles latitudes y longitudes asociadas para poder ubicar con precisión dónde se asignan. Tengo alrededor de 3900 direcciones IP distintas en total. Luego necesito conectar esto a mi archivo maestro que contiene varios detalles sobre los usuarios, etc.

Idealmente, me gustaría usar la API maxmind para obtener datos de «País», «Ciudad», «longitud», «latitud» e «is_proxy». Sé de una solución anterior publicada por @GilbertQ, sin embargo, desde entonces, ese sitio ha quedado obsoleto. Los datos de eso tampoco se ajustan a mis propios fines.

Sé que esto es factible, ¡pero simplemente me falta el conocimiento en M para hacer esto!

https://www.maxmind.com/en/geoip2-precision-services

Muchas gracias

GilbertQ

Hola

Tengo una publicación de blog que saldrá hoy más tarde (hora de Australia) donde explico cómo usar una búsqueda de dirección IP diferente con una forma de limitar la rapidez con la que consultará la API.

Puede encontrarlo aquí: https://www.fourmoo.com/blog

indhu

En respuesta a GilbertQ

Hola @GilbertQ,

Gracias por el comentario tan maravilloso. El problema al que me enfrento cuando intento implementarlo es la restricción de acceso cuando intento usar freegioip.net. Cuando investigué más a fondo, descubrí que su dirección se había cambiado a ipstack.com

¿Cómo deberíamos diseñar para este sitio web en particular? cambiaron el plan y no estaban seguros de cómo hacerlo.

Gracias,

Indhu

GilbertQ

En respuesta a indhu

Hola @indhu

Parece que tienen una opción gratuita que tiene 10000 búsquedas.

De lo contrario, ¿tendría que pagar por un servicio de búsqueda?

indhu

En respuesta a GilbertQ

@GilbertQ 10,000 miradas está bien. Reemplacé tu siguiente código por esto,

let
Source = (#"IP Address" as text) => let
Source = Json.Document(Web.Contents("https://ipstack.com/json/" & #"IP Address")),
#"Converted to Table" = Record.ToTable(Source),
#"Transposed Table" = Table.Transpose(#"Converted to Table"),
#"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table")
in
#"Promoted Headers"
in
Source

Reemplazo del nombre de la fuente por una nueva dirección web. Estoy recibiendo este error,

DataSource.Error: Web.Contents failed to get contents from 'https://ipstack.com/json/203.56.182.115' (404): Not Found
Details:
    DataSourceKind=Web
    DataSourcePath=https://ipstack.com/json/203.56.182.115
    Url=https://ipstack.com/json/203.56.182.115

¿Puedes señalarme lo que me estoy perdiendo?

También probé otro sitio, https://www.ipinfodb.com/api Siguiendo su publicación y reemplacé la consulta M de la siguiente manera,

let
Source = (#"IP Address" as text) => let
Source = Json.Document(Web.Contents("http://api.ipinfodb.com/v3/ip-city/?key=<APIkey>" & #"IP Address")),
#"Converted to Table" = Record.ToTable(Source),
#"Transposed Table" = Table.Transpose(#"Converted to Table"),
#"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table")
in
#"Promoted Headers"
in
Source

Y obteniendo este error,

An error occurred in the ‘fn_GetIPAddressDetails’ query. DataFormat.Error: We found extra characters at the end of JSON input.
Details:
    Value=
    Position=0

Necesito urgentemente que esto funcione 😞 Por favor ayuda

Gracias,

indhu

GilbertQ

En respuesta a indhu

Hola

Según la documentación, deberá registrarse y obtener una clave de acceso API.

Luego, cuando realice una consulta como parte de la cadena de consulta, deberá ingresar la clave API para que funcione

indhu

En respuesta a GilbertQ

@GilbertQ hizo eso y en ese código M reemplazó con la clave API real. Obtuve el siguiente error,

An error occurred in the ‘fn_GetIPAddressDetails’ query. DataFormat.Error: We found extra characters at the end of JSON input.
Details:
    Value=
    Position=0

GilbertQ

En respuesta a indhu

Hola

¿Lo probó manualmente a través de la URL?

Si eso funciona, asegúrese de que no haya espacios al pasarlo a través de la función

indhu

En respuesta a GilbertQ

Trabajó. Muchas gracias 😄

GilbertQ

En respuesta a indhu

¡Me alegro de que lo hayas hecho funcionar!

Anónimo

En respuesta a GilbertQ

¡De vuelta otra vez, Gilbert! Así que optamos por continuar con la API de pila de IP. Al parecer, todavía no puedo hacer que la función funcione una vez que hago clic en Cerrar y aplicar. El código definitivamente funciona ya que carga la tabla que quiero una vez que he invocado la función personalizada. El problema que sigo encontrando es un problema de acceso web posterior. Estoy usando la versión http del sitio web, no https. ¿Hay alguna forma de ejecutar la función para evitar esto? Problema de contenido web de PBI Access.png

Este es mi código a continuación.

= (# «IpAddress» como texto) => dejar
Fuente = Json.Document (Web.Contents («http://api.ipstack.com/» & # «IpAddress» & «? Access_key = MYAPIKEY» & «& security = 1»)),
# «Converted to Table» = Record.ToTable (Fuente),
# «Transposed Table» = Table.Transpose (# «Converted to Table»),
# «Encabezados promocionados» = Table.PromoteHeaders (# «Tabla transpuesta»)
en
# «Encabezados promocionados»

Gracias,

S

GilbertQ

En respuesta a Anónimo

Hola.

Creo que necesitas hacerlo. Anónimo y ponga la clave de API como parte de la URL

Anónimo

En respuesta a GilbertQ

¿Cómo haría yo para hacer eso? Solo tengo dos opciones. El sitio web o el sitio web + la dirección IP sin la clave de acceso a seguir.

Acceso restringido.png

Anónimo

En respuesta a GilbertQ

Intentaré este método, con suerte, funciona y, si funciona, te debo una copa de champán virtual.

GilbertQ

En respuesta a Anónimo

Por favor, déjeme saber si funciona.

Esperando esa copa virtual de champán

Anónimo

En respuesta a GilbertQ

= Table.AddColumn (# ”Tipo modificado”, “fn_GetIPAddressDetails”, cada Function.InvokeAfter (() => fn_GetIPAddressDetails ([IpAddress]), #duration (0,0,0, # ”Intervalo (Segundos)”)))

Así que pego el código anterior como dice su paso sobre la columna de la función Invocada. Pero aparece el error «Literal no válido» Fngetip.png literal no válido

GilbertQ

En respuesta a Anónimo

Hola,

Si puede cambiar las comillas dobles a «, ya que debido a copiar y pegar, son las comillas dobles en cursiva

= Table.AddColumn(#"Changed Type1", "ParkRun", each Function.InvokeAfter(()=>fx_ParkRunData([Run]), #duration(0,0,0,#"Refresh Interval")))

Anónimo

En respuesta a GilbertQ

Hola @GilbertQ, no te preocupes, lo tengo funcionando. Lleva bastante tiempo, pero se esperaba que tuviera 4.3k direcciones IP. No estoy seguro de si mi problema es con el servicio API o no ahora porque hay un límite. Pero se me ocurrirá un problema que dice «el acceso al recurso está prohibido» con la URL del sitio web «http://api.ipstack.com/[IpAddress]». Este es el mismo problema al que me enfrenté anteriormente al usar la API y parece que la función InvokeAfter.Function no funciona …

¿Alguna otra idea?

GilbertQ

En respuesta a Anónimo

Hola

Creo que entonces podría ser un límite en el sitio en términos de cuántas direcciones IP gratuitas puede codificar geográficamente.

Anónimo

En respuesta a GilbertQ

Así que hablé con ellos y me dijeron que es un problema con Power BI en sí. El analista principal de ups tack dijo que no había un límite de solicitudes en mi servicio. ¿Alguna idea de tecnología?

GilbertQ

En respuesta a Anónimo

Hola,

He realizado geocodificación en un conjunto de datos más grande sin ningún problema.

Les pediría que me explicaran cuál es el error y por qué ocurre. Me parece que solo están diciendo que es un problema de Power BI sin probar nada.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *