Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago

Cursor Datos paginados de Web API

Hola

Estoy llamando a una api web para tomar algunos datos que se paginan y estoy luchando con cómo obtener la siguiente página de datos, ya que se basa en cursores.

Cuando llamo a la api en PowerQuery (me estoy conectando a través de un origen de datos Web) el Navigator devuelve una tabla con dos filas, la primera fila que contiene una tabla de datos que estoy solicitando y una segunda fila que contiene una tabla que contiene la url original pero con un parámetro de cursor anexado a ella.

por lo que la estructura se ve así:

Original api call (Llamada api original) https://api.myapiurl.com/v1/channel/1234/webcasts

que produce:

NombreMesa
WebcastMesa
EnlaceMesa

La tabla de vínculos contiene lo siguiente:

HrefRel
https://api.myapiurl.com/v1/channel/1234/webcasts?cursor=6789próximo

Puedo expandir la fila de webcast que contiene los datos sin ningún problema, pero ¿cómo llamo a la siguiente página de datos y la almaceno con la primera llamada y luego continuar hasta que tenga todos los datos disponibles?

¡Muchas gracias!

23 Replies

      • Anonymous's avatar
        Anonymous
        Not applicable

        Hola @ImkeF

        Muchas gracias por la ayuda y los recursos. Lo he leído y siento que casi estoy allí, pero no puedo unirme a los puntos. Soy muy nuevo en PowerQuery, así que parte de la sintaxis sigue siendo un misterio para mí, ¡pero estoy llegando allí!

        Mis datos se devuelven como xml (no creo que marcan mucha diferencia) y la última fila de la página tiene dos campos, Attribute:href y Attribute:rel. El campo rel contiene la palabra siguiente y el campo rel una URL completa con el cursor para la página siguiente. La documentación de la API indica que cuando se alcanza la última página no habrá ningún valor en el campo rel.

        Según entiendo, puedo usar la función List.Generate y efectivamente 'bucle' a través de los datos y pasar la siguiente url y tomar la siguiente página de datos. Parece que no puedo averiguar cómo hacer referencia a los campos de mi origen y usarlo para obtener el siguiente conjunto de datos. Esto es lo que tengo hasta ahora (que no funciona!)

        let
            Source = Xml.Tables(Web.Contents("https://api.myWebService.com/v1/channel/1234/webcasts")),
            #"Expanded Table" = Table.ExpandTableColumn(Source, "Table", {"title", "description", "presenter", "duration", "start", "keywords", "published", "visibility", "url", "status", "active", "created", "lastUpdated", "link", "Attribute:id", "syndicationType", "Attribute:href", "Attribute:rel"}, {"Table.title", "Table.description", "Table.presenter", "Table.duration", "Table.start", "Table.keywords", "Table.published", "Table.visibility", "Table.url", "Table.status", "Table.active", "Table.created", "Table.lastUpdated", "Table.link", "Table.Attribute:id", "Table.syndicationType", "Table.Attribute:href", "Table.Attribute:rel"}),
            myTest = List.Generate( ()=>
                [Result = Source, Counter = 0],
                each [Result][[Attribute:href] <> null and [Counter]< 20,
                each [Result = Xml.Tables(Web.Contents([Attribute:href])),
                Counter = [Counter] + 1]
        
            )
        in
            myTest

        Cualquier puntero que podría proporcionar en conseguir este derecho sería muy apreciado!

  • Hola equipo,
    Tengo un problema al obtener los datos de la API web basada en cursor, ¿podría alguien ayudarme con el M-Script con el valor del encabezado? He intentado con algunos que me están causando un estallido de autenticación con la actualización manual como se muestra a continuación y no puedo ver las fuentes de datos después de publicarlas en los servicios POwerBI.

    Se agradece si se apoya.
    Gracias.