imagen

Google Books descargar las portadas de nuestra biblioteca

05.Mar.2023 — Julio

Mantengo una hoja de cálculo con varios datos sobre los últimos libros que he ido adquiriendo.

En ella están datos, como ISBN, título, autor, editorial, precio, mi valoración, fecha en la que lo leí, y si lo empecé pero no me enganchó, así que se quedó en "empezado"

De momento en fichero local pero la verdad que de lo mejor que he visto en Google Books. Pasé por GoodReads pero tampoco me fio.

https://www.julb.es/exportar-datos-de-google-books-e-importar-a-goodreads.html

Cualquier día cierran o cambian condiciones de servicio y te quedas colgado, así que de momento, datos en local.

De ese fichero me gustaría poder ver la portada de los libros, la verdad es que una imágen es más fácil de recordar que un título.

Paso de hacer fotos de cada libro así que miré la forma de descargar la portada utilizando la api de Google.

Y sí, si tienes el ISBN es así de fácil, en 1 línea.

curl https://www.googleapis.com/books/v1/volumes?q=isbn:8483465205 | grep "selfLink" | cut -d "\"" -f 4 | cut -d "/" -f 7 | xargs -I @ wget "https://books.google.com/books/publisher/content?id="@"&printsec=frontcover&img=1&zoom=1" -O @.png

Pero claro. Ya que tengo datos, me gustaría comprobar con los que tiene Google así que me lie bastante. Que si nombrar la imagen de la portada con el título, año de publicación ...

Se trata de pasarle a mi script un fichero con todos los ISBN que tengo y obtener todos los valores que necesito.

La API de Google devuelve un json, probé a obtener los valores que me interesaban con jq pero la verdad es que se notaba el incremento de uso de cpu y de tiempo. En cambio con utilidades gnu como grep, sed y cut conseguía lo que quería de forma más rápida y barata.

```

    while IFS=$'\t' read -r isbn tit n  
    do  
        titulo=$(echo $tit | sed 's/[:;-\/.,?¿!¡\"\(\)]//g' | tr " " "_" )  
        gid="" && gtitulo="" && gautor="" && geditorial="" && gpublicado="" && gportada=""  
        if [[ ! -z $isbn ]]  
        then  
            gid=$(curl --no-progress-meter https://www.googleapis.com/books/v1/volumes?q=isbn:$isbn | grep "selfLink" | cut -d "\"" -f 4 | cut -d "/" -f 7 | cut -d$'\n' -f 1)  
            if [[ ! -z $gid ]]  
            then  
                glibro=$(curl --no-progress-meter https://www.googleapis.com/books/v1/volumes/$gid)  
                existethumbnail=$(echo $glibro | grep -q "thumbnail" && echo "si" || echo "no")  
                gautor=$(echo $glibro | grep -Po '"authors":.*?[^\\]",' | cut -d "\"" -f 4)
                gtitulo=$(echo $glibro | grep -Po '"title":.*?[^\\]",' | cut -d "\"" -f 4)
                geditorial=$(echo $glibro | grep -Po '"publisher":.*?[^\\]",' | cut -d "\"" -f 4)
                gpublicado=$(echo $glibro | grep -Po '"publishedDate":.*?[^\\]",' | cut -d "\"" -f 4)

                if [[ $existethumbnail == "si" ]]
                then
                    titulo=$(echo $gtitulo | sed 's/[:;-\/.,?¿!¡\"\(\)]//g' | tr " " "_" )
                    wget -O portadas/$titulo.png --no-verbose "https://books.google.com/books/publisher/content?id="$gid"&printsec=frontcover&img=1&zoom=1"
                    gportada="https://books.google.com/books/publisher/content?id="$gid"&printsec=frontcover&img=1&zoom=1"
                fi
            fi
        fi
        echo -e $isbn"\t"$gid"\t"$gtitulo"\t"$gautor"\t"$geditorial"\t"$gpublicado"\t"$gportada | tee -a titulo_isbn_idgoogle.tsv
    done < isbn_falta.csv

```

Tags: bash

Comments? Tweet