Obtener datos usando REST API Ringover – método POST

Un usuario Pregunto ✅

julian7438

Hola,

Mi nombre es Julien, Business Analyst, hace unos días que intento obtener datos de una API REST – método POST con una consulta usando M.

Aquí la consulta:

(StartDate as text)=>
let
    Url = "https://public-api.ringover.com/v2/calls",
    Token = "here is my key",
    EntitiesPerPage = 100,
    StartDate = Date.ToText(Date.FromText(StartDate), "yyyy-MM-ddT00:00:00Z"),

    GetJson = (Url, LastIdReturned) =>
        let Body = "{""intra"":false, ""limit_count"":" & Text.From(EntitiesPerPage) & ",
    ""start_date"":""" & StartDate & """,
    ""last_id_returned"":" & Text.From(LastIdReturned) & "}",
    Options = [Headers=[ #"Authorization" = Token ], Content=Text.ToBinary(Body)],
            RawData = Web.Contents(Url, Options),
            Json = Json.Document(RawData)
        in  Json,

    GetEntityCount = () =>
        let Json = GetJson(Url, 0),
            Count = Json[#"total_call_count"]
        in  Count,

    GetPage = (LastIdReturned) =>
        let Json  = GetJson(Url,LastIdReturned),
            LastIdReturned = try List.Last(Json[#"call_list"])[cdr_id] otherwise 0,
            data = try Json[#"call_list"] otherwise null,
            res = [Data=data, Next=LastIdReturned]
        in  res,

    NbRecords = GetEntityCount(),
    EntityCount = List.Max({ EntitiesPerPage, NbRecords }),
    PageCount   = Number.RoundUp(EntityCount / EntitiesPerPage),
   
     GeneratedList =
        List.Generate(
        ()=>[i=0, res = GetPage(0)],
        each [i]<PageCount and [res][Data]<>null,
        each [i=[i]+1, res = GetPage([res][Next])],
        each [res][Data]),
   
    Table = Table.FromList(GeneratedList, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
    Table

Es un poco complicado debido a la paginación, y esta consulta no funciona y no encuentro por qué, en realidad devuelve todas las listas pero los duplicados de la primera.

Aquí está el siguiente enlace de Ringover para usar allí API, pero tampoco me ayuda: https://developer.ringover.com/

Le he pedido ayuda a Ringover o a mis colegas, pero sigo atascado.

Si alguien me puede ayudar, será maravilloso…

Muchas gracias

julián

julian7438

En respuesta a julian7438

Hola @PhilipTreacy

Finalmente, mi colega Data Architect encontró la solución.

El LasIdReturned en GetPage fila 24 «LastIdReturned = try List.Last(Json[#»call_list»])[cdr_id] de lo contrario, 0″, estaba en conflicto con todos los «LastIdReturned» anteriores.

Así que cambió el nombre de todos los «LastIdReturned before» por «LastId» y ahora funciona muy bien.

Gracias a ti de nuevo por tu tiempo.

BR

julián

felipetreacy

Hola @Julien7438

Estoy un poco confundido. ¿Esto funciona o no? ¿El problema es solo que está obteniendo la primera lista duplicada?

Si ese es el caso, entonces sus condiciones iniciales para resolución en List.Generate puede necesitar ser cambiado.

()=>[i=0, res = GetPage(0)],

phil


Si respondí tu pregunta, marca mi publicación como la solución.
Si mi respuesta ayudó a resolver su problema, felicítelo haciendo clic en Me gusta.

julian7438

En respuesta a felipetreacy

Hola @PhilipTreacy,

Gracias por tu respuesta, el código no funciona y hace exactamente lo que dices.

Intenté usar este tema de otra manera, pero no puedo entender eso.

https://community.powerbi.com/t5/Desktop/Rest-API-Json-several-pages-automatically-call-the-next-pag…

Tienes razón, la parte de la iteración tiene un problema.

Muchas gracias, voy a investigar de esta manera, si tienes alguna sugerencia, házmelo saber.

BR,

julián

felipetreacy

En respuesta a julian7438

Hola @Julien7438

¿Puede ser específico acerca de cómo no está funcionando? ¿Está generando un error? ¿Te está dando resultados inesperados? ¿Puede compartir qué salida genera la consulta?

Saludos

phil


Si respondí tu pregunta, marca mi publicación como la solución.
Si mi respuesta ayudó a resolver su problema, felicítelo haciendo clic en Me gusta.

julian7438

En respuesta a felipetreacy

Hola @PhilipTreacy


Por ejemplo, si configuro el parámetro StartDate en «2020-10-27», la consulta generará una cantidad de listas, precisamente 42, lo cual es normal porque cada lista contiene 100 registros (filas) y conozco la base de datos. ha generado 4200 filas desde esa fecha (42 * 100).

Pero en realidad tengo la misma lista única 42 veces, así que cuando elimino el duplicado solo tengo 100 filas (mi primera lista).

No encontré cómo compartir una foto o captura de pantalla, así que espero haber sido claro.

Gracias de nuevo por tu tiempo.

BR
julián

julian7438

En respuesta a julian7438

Hola @PhilipTreacy

Finalmente, mi colega Data Architect encontró la solución.

El LasIdReturned en GetPage fila 24 «LastIdReturned = try List.Last(Json[#»call_list»])[cdr_id] de lo contrario, 0″, estaba en conflicto con todos los «LastIdReturned» anteriores.

Así que cambió el nombre de todos los «LastIdReturned before» por «LastId» y ahora funciona muy bien.

Gracias a ti de nuevo por tu tiempo.

BR

julián

Arturo MP

En respuesta a julian7438

Hola Julien,

He estado tratando de hacer lo mismo que tú. No soy realmente un profesional con PowerQuery.

Intenté su solución, pero todo lo que recibo son entidades duplicadas. Si elijo 100 entidades por página, obtiene 100 entidades y luego las duplica.

Probé la solución que publicaste después pero no cambia nada, tal vez no te entendí. ¿Puedes copiar y pegar el nuevo código o algo así?

Mi objetivo es recopilar todas las llamadas de Ringover desde una fecha de inicio seleccionada y luego actualizar los nuevos datos todos los días de forma acumulativa.

¡Espero que todavía pueda alcanzarte!

¡atentamente!

Arturo

Deja un comentario

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