Come catalogare i propri libri su un Foglio Google con Apps Script scansionando il codice a barre

Di recente ho avuto l’esigenza di fare un inventario della mia libreria personale e ho cercato un modo veloce e intelligente per riportare le informazioni principali dei libri su un Foglio di Google.

Concettualmente la soluzione è semplice: occorre una libreria Javascript per scansionare codici a barre, un web service per la ricerca di libri per codice ISBN e un semplice script in Apps Script per riportare le informazioni su un Foglio Google.

La libreria che ho scelto per la scansione dei codici è Html5-QRCode (https://github.com/mebjas/html5-qrcode). La libreria è leggera, multipiattaforma e di semplice utilizzo.

Uno dei migliori servizi web per la ricerca di libri è Google Books Api (https://developers.google.com/books?hl=it). In particolare utilizzeremo il servizio per la ricerca tramite codice ISBN.

Resta da assemblare la soluzione.

Creiamo un Foglio Google per memorizzare la nostra libreria e inseriamo una riga di intestazione con alcune informazioni che intendiamo censire.

Dal menu “EstensionI”, selezioniamo “Apps Script”, diamo un titolo al progetto e copiamo sul file “Codice.gs” il seguente codice Apps Script

function saveBook(response){
  var title = ""
  if (response.error || response.totalItems == 0){
    title = "NON TROVATO!"
  } else {
    title = response.items[0].volumeInfo.title
    var authors = response.items[0].volumeInfo.authors
    var data = response.items[0].volumeInfo.publishedDate
    var pageCount = response.items[0].volumeInfo.pageCount
    var thumbnail = "=IMAGE(\"" + response.items[0].volumeInfo.imageLinks.thumbnail + "\")"
    var previewLink = response.items[0].volumeInfo.previewLink
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Foglio1").appendRow([title, authors.join(','),data, pageCount, thumbnail, previewLink])
  }
}

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('Page');
}

Ora aggiungiamo un file HTML, cliccando sul tasto “+” a sinistra e inseriamo il seguente codice HTML

<!DOCTYPE html>
<html>
<head>
  <script src="https://unpkg.com/html5-qrcode"></script>
</head>
<body>
  <div id="qr-reader"></div>
  <div id="qr-reader-results"></div>
  <script>
    var html5QrcodeScanner = new Html5QrcodeScanner("qr-reader", { fps: 10, qrbox: 250});
    html5QrcodeScanner.render(onScanSuccess);

    function onScanSuccess(isbn, decodedResult) {
      getBookDetails(isbn)
    }

    function getBookDetails(isbn) {
      var xmlhttp = new XMLHttpRequest();
      var url = "https://www.googleapis.com/books/v1/volumes?q="+isbn+"+isbn&maxResults=1&country=IT"
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
          var response = JSON.parse(xmlhttp.responseText);
          var title = ""
          if (response.error || response.totalItems == 0){
              title = "NON TROVATO!
          } else {
              title = response.items[0].volumeInfo.title
          }
          showResult(title, isbn);
          google.script.run.saveBook(response);
        }
      };
      xmlhttp.open("GET", url, true);
      xmlhttp.send();
    }

    function showResult(titolo, codice){
      var resultContainer = document.getElementById('qr-reader-results');
      resultContainer.innerHTML = codice + " → " + titolo
    }
  </script>
</body>
</html>

Infine pubblichiamo la nostra soluzione come applicazione web. Dal menu in altro a destra “Esegui il deployment”, selezioniamo “Nuovo deployment”.

Selezioniamo il tipo “Applicazione web” cliccando sull’icona a sinistra.

Forniamo una descrizione, quindi nella sezione “Applicazione web”, dal menu a tendina “Esegui come”, selezioniamo il nostro utente (“Me”), e dal menu a tendina “Utenti autorizzati ad accedere” selezioniamo “Chiunque”.

Clicchiamo sul pulsante “Esegui il deployment”, forniamo le autorizzazioni del caso e ciopiamo la URL generata.

Questa URL rappresenta l’indirizzo della nostra applicazione web.

Proviamo ad aprire la URL su un browser.

Forniamo i permessi per accedere alla camera del cellulare o alla cam del pc e scansioniamo il codice a barre di un libro o, come nell’esempio qua sotto, carichiamo l’immagine di un codice a barre

Se il codice viene riconosciuto e i libro corrispondente è censito nel database di Google, allora il titolo del libro apparirà nel fondo della pagina e contemporaneamente le informazioni inerenti il libro saranno accodate nel nostro foglio, assieme ad una miniatura della copertina e un link di approfondimento.

Qualche cenno sulla soluzione. Partiamo dallo script Apps Script.

La funzione doGet, viene invocata nel momento in cui richiamiamo la URL del servizio. La funzione recupera il contenuto del file Page.html e lo restituisce

La funzione saveBook, prende in input la risposta JSON del servizio web, ne etrapola le informazioni di interesse e le accoda sul nostro Foglio Google tramite il comando

SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Foglio1”).appendRow([title, authors.join(‘,’),data, pageCount, thumbnail, previewLink])

Vediamo ora la pagina HTML

Carichiamo la libreria col tag script:

<script src=”https://unpkg.com/html5-qrcode”></script>

quindi creiamo due div, il primo con id “qr-reader”, servirà a renderizzare il nostro lettore di codici, il secondo con id “qr-reader-results” mostrerà il codice e titolo del libro.

Istanziamo il lettore di codici

var html5QrcodeScanner = new Html5QrcodeScanner(“qr-reader”, { fps: 10, qrbox: 250});

e quindi impostiamo la callback che verrà invocata nel caso in cui il codice sia riconosciuto

html5QrcodeScanner.render(onScanSuccess);

La callback richiama la funzione getBookDetails che si occupa di invocare le API di Google, tramite una chiamata AJAX, passando come parametro il codice ISBN identificato.

Se il servizio risponde correttamente, recuperiamo il titolo dalla risposta e lo mostriamo a video accanto al codice ISBN identificato, tramite la funzione showResult

Infine richiamiamo con la seguente sintassi:

google.script.run.saveBook(response);

la funzione Apps Script per salvare sul Foglio Google le informazioni del libro,.

One thought on “Come catalogare i propri libri su un Foglio Google con Apps Script scansionando il codice a barre

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *