Forum Discussion
Cursor Datos paginados de Web API
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 @ImkeF ,
Espero que estés a salvo y bien.
Si utilizo el enfoque de pasar una dirección URL a una función y la función que devuelve el conjunto de datos, ¿puedo hacer referencia a campos dentro de ese conjunto de datos sin expandir la tabla? Parece que no puedo conseguir el código para reconocer el nombre del campo. Por ejemplo, si utilizo la referencia de nombre de campo [Attribute:href] la sección Atributo se subraya como un error de identificador no válido.
Muchas gracias por su ayuda!
- ImkeF6 years agoCommunity Champion
Hola @eyeballkid ,
Lo siento, pero no puedo seguir sin ver nada que ha vuelto.
¿Podría pegar algunas capturas de pantalla o crear algunos datos de maquetas que ilusoriquen el problema?
- Anonymous6 years agoNot applicable
Hola @ImkeF ,
Sí, no hay problema. Voy a tratar de establecer donde estoy con esto en este momento con algunas imágenes, datos y código. Disculpasitos si esto pasa por algunas cosas de las que ya hemos hablado.
Hasta ahora he creado una función simple para aceptar una dirección URL que llama a un servicio web y devuelve un conjunto de datos XML:
(url as text) as table => let Source = Xml.Tables(Web.Contents(url)) in SourceSi paso la siguiente url:
https://api.myWebService.com/v1/channel/12345/webcastsRecibo lo siguiente:
Expandir la columna Tabla me da esto:
Como puede ver, la última fila del conjunto de datos contiene valores en las columnas Table.Attribute:href y Table.Attribute:rel que indican que hay otra página de datos y la dirección URL con un parámetro de cursor anexado a ella.
He intentado escribir una consulta que invoca la función y usa la función List.Generate para paginar los datos, pasando el valor de Table.Attribute:href a la función, creando una lista de tablas hasta que no haya más páginas que procesar.
Usando la ayuda que has dado en otros subprocesos y en este también, he escrito esta consulta pero como puedes ver, por alguna razón no parece gustarle la referencia de campo:
Si elimino el [Attribute:href] el código no muestra errores y devuelve el conjunto de datos inicial, pero no va más allá (como puede ver el bucle está configurado para devolver 5 páginas con fines de prueba):
Espero que esto ayude, pero si necesita más información por favor hágamelo saber!
Muchas gracias
- ImkeF6 years agoCommunity Champion