martes, 29 de junio de 2021

Web Scraping en Blogger con Power Query

Hace algunas semanas publiqué un artículo para hacer Web Scraping sobre información de YouTube empleando fórmulas!!(ver aquí).

Hoy veremos cómo recuperar información de Blogger usando Power Query.
Por supuesto necesitaremos activar o habilitar la API correspondiente en la consola de Google (https://console.cloud.google.com/), en concreto llamando la API: Blogger API v3.
Recuerda que debes tener una cuenta de Gmail para acceder a la consola y habilitar la API y dar de alta los credenciales necesarios para generar la clave/key que nos permitirá hacer este Web Scraping sobre Blogger.

Es importante te empapes bien, antes de seguir, de las distintas acciones que podremos realizar con nuestra API en:
https://developers.google.com/blogger/docs/3.0/reference


Me centraré en un par de métodos, no hay muchos, y la mayoría requieren autorización 'especial'.

En primer lugar identifcaremos el id de nuestro blog... es facil de localizar cuando te 'logueas' e inicias con tu cuenta y accedes al administrador, solo mira la URL que te aparece.
Alternativamente, y puesto que tenemos nuestra API podemos llamar al método:
Blogs: getByUrl
y que escribiríamos en una celda A1 de nuestra hoja de cálculo: https://www.googleapis.com/blogger/v3/blogs/byurl?url=https://excelformacion.blogspot.com//&key=AIzaxxxxx
Y en A2 usamos la función
=SERVICIOWEB(A1)
lo que nos devuelve un código JSON como el siguiente:
"{
  ""kind"": ""blogger#blog"",
  ""id"": ""8805833547688535468"",
  ""name"": ""Excel: ejercicios, ejemplos, soluciones..."",
  ""description"": ""En este blog se íntentará dar solución a ejercicios, ejemplos o supuestos prácticos que hemos encontrado a lo largo de nuestro periplo profesional mediante Ms Excel. Nos centraremos en Formatos, Formatos condicionales, Funciones, Fórmulas, Fórmulas matriciales, Tablas dinámicas, Solver, Escenarios, Filtros, Análisis de datos, Asignar nombres a rangos, MsQuery, Gráficos, Macros, etc.\nLa finalidad es convertirlo en una ayuda, gratis, para cualquier usuario de esta herramienta."",
  ""published"": ""2009-05-27T10:03:49+02:00"",
  ""updated"": ""2021-05-16T18:05:27+02:00"",
  ""url"": ""http://excelformacion.blogspot.com/"",
  ""selfLink"": ""https://www.googleapis.com/blogger/v3/blogs/8805833547688535468"",
  ""posts"": {
    ""totalItems"": 4,
    ""selfLink"": ""https://www.googleapis.com/blogger/v3/blogs/8805833547688535468/posts""
  },
  ""pages"": {
    ""totalItems"": 1,
    ""selfLink"": ""https://www.googleapis.com/blogger/v3/blogs/8805833547688535468/pages""
  },
  ""locale"": {
    ""language"": ""es"",
    ""country"": """",
    ""variant"": """"
  }
}
"


Que fáciemente nos identifica algunas características del blog indicado.
Su Id=8805833547688535468
Nombre y Descripción
Fecha de inicio de publicaciones, su URL
Total de post y de páginas...

Así pues con el Id del blog (8805833547688535468), pasamos al siguiente método: Posts: list, que nos permitirá recuperar un listado de los post publicados, programados o en borrador.
Disponemos de los siguientes parámetros y filtros obligatorios y/o opcionales entre otros:
1- blogId: pues eso, el ID del blog.

2- endDate: Fecha última de cualquier post a recuperar... debe tener una forma: YYYY-MM-DDTHH:MM:SS.
3- startDate: fecha de inicio para recuperar la lista de post, mismo formato que el anterior.
4 - fetchBodies: MUY IMPORTANTE!, 'true' si quieres incluir el contenido del post. Recomendado por tanto definirlo como 'false'.
5 - fetchImages: si queremos incluir la URL de la imagen de metadatos de cada post en la lista.
6 - labels: si queremos filtrar por alguna de las etiquetas empleaadas y asignadas a cada post. Lista separada por comas.
7- maxResults: máximo numero de posts a recuperar (valor máximo permitido a priori 500).
8- orderBy: tipo de orden. Dos tipos:
8.1 - published: orden por fecha de publicación
8.2 - updated: orden por fecha de actualizaación
9- status:
9.1 - draft: posts como borrador
9.2 - live: publicados
9.3 - scheduled: programados

Por tanto, una instrucción válida podría ser:
"https://www.googleapis.com/blogger/v3/blogs/8805833547688535468/posts?fetchBodies=false&fetchImages=false&maxResults=500&key=AIzaxxxxxx"
Mantengámosla en el portapapeles y accedamos a la ficha Datos > grupo Obtener y transformar > botón Desde la Web lo que nos abrirá una ventana diálogo donde pegaremos la URL anterior:
Web Scraping en Blogger con Power Query

En el paso siguiente accederemos al Editor avanzado y dejaremos el código M como sigue:
let
    Origen = Json.Document(Web.Contents("https://www.googleapis.com/blogger/v3/blogs/8805833547688535468/posts?fetchBodies=false&fetchImages=false&maxResults=500&key=AIzaxxxx")),

    //pasamos de Records a Tabla
    Detalle=Table.FromRecords(Origen[items])

in 
    Detalle

Web Scraping en Blogger con Power Query

Por supuesto podríamos habernos quedado solo con las columnas que nos interesaran ;-)

Tras Cargar y Cerrar en... devolvemos los datos a la hoja de cálculo!!

Obviamente el punto crítico de este proceso ha sido construir adecuadamente la cadena de la URL que incluyera el método adecuado, sus parámetros, filtros y por supuesto la clave API necesaria.

En un próximo artículo, y basándonos en el listado obtenido, veremos cómo conseguir el conteo de visitas y comentarios de cada post.
Aspecto que NO está determinado directamente en ninguno de los métodos de la API para Blogger v3.0 :OO

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.