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.
Puedes 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, descubrí que su dirección se había cambiado a ipstack.com
¿Cómo debemos 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ó
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?
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.
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 de champán virtual
Anónimo
En respuesta a GilbertQ
= Table.AddColumn (# ”Tipo cambiado”, “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».
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 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 que 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 codificación geográfica 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.