- Home
- Categorie
- Coding e Sistemistica
- Help Center: consigli per il tuo progetto
- Interrogazione API Google Books - dati mancanti
-
Interrogazione API Google Books - dati mancanti
Ciao a tutti!
Sto lavorando ad un progetto per la catalogazione dei libri che abbiamo a casa e sto cercando di usufruire delle API di Google Books per ricavare i dettagli di ogni libro tramite il codice ISBN.
Nel particolare, tramite VBA interrogo le API e faccio il parsing del risultato JSON per trasformarlo in un normale dizionario che posso consultare per popolare i vari campi. A livello di procedura nessun problema, tuttavia ho notato che i risultati che ricavo con l'API sono solo parziali e mancano di informazioni essenziali, nella maggior parte dei casi non ho trovato la casa editrice per esempio.
Il mio codice é quello che segue (VBA):
Sub GoogleBooksAPI() #''//// Extract Details from Google Books API Based on ISBN ////'' #'' Author: Toti Pappalardo #'' Date: 20/07/2020 #'' Last Update: 21/11/2020 Dim xml_obj As MSXML2.XMLHTTP60 Set xml_obj = New MSXML2.XMLHTTP60 base_url = "https://www.googleapis.com/books/v1/volumes?q=isbn:" ISBN = Sheets("Inserimento").Range("ISBN").Value #Viene preso dalla cella di riferimento nel foglio Excel #''Controllo che il campo ISBN non sia vuoto If ISBN = "" Then MsgBox ("Inserire un ISBN valido") Exit Sub End If api_url = base_url & ISBN xml_obj.Open bstrMethod:="GET", bstrURL:=api_url xml_obj.Send Debug.Print "Request Code: " & CStr(xml_obj.Status) Debug.Print xml_obj.responseText Dim Json As Object Dim result As Dictionary Dim Val As Variant Dim Val2 As Dictionary Dim Title, Subtitle, Author, Publisher, PubDate, Pages, Descr, Ctgr, img_url As String Set Json = JsonConverter.ParseJson(xml_obj.responseText) For Each result In Json("items") Title = result("volumeInfo")("title") Debug.Print Title Subtitle = result("volumeInfo")("subtitle") For Each Val In result("volumeInfo")("authors") Author = Author & Val & ", " Next Author = Left(Author, Len(Author) - 2) Publisher = result("volumeInfo")("publisher") PubDate = result("volumeInfo")("publishedDate") Pages = result("volumeInfo")("pageCount") Descr = result("volumeInfo")("description") img_url = result("volumeInfo")("imageLinks")("smallThumbnail") Next #'************** Creazione Userform con label dinamiche ***************' With Results_Form .Title.Caption = Title .Subtitle.Caption = Subtitle .Author.Caption = Author .Publisher.Caption = Publisher .Pub_Date.Caption = PubDate .Pages.Caption = Pages .Excerpt.Caption = Descr .Cover_img.Navigate img_url End With Results_Form.Show End Sub
La procedura va a buon fine, ma come dicevo non tutti i parametri vengono popolati.
Esempio pratico:
Il codice ISBN 9788856658781 corrisponde al libro "Una Perfetta Sconosciuta", che su Google Books si trova a questa pagina
Il JSON che ricevo dalla chiamata API con il parametro "isbn:9788856658781" é questo:
{ "kind": "books#volumes", "totalItems": 1, "items": [ { "kind": "books#volume", "id": "IBoIMQAACAAJ", "etag": "15Q4/Obi0+k", "selfLink": "https://www.googleapis.com/books/v1/volumes/IBoIMQAACAAJ", "volumeInfo": { "title": "Una perfetta sconosciuta", "authors": [ "Alafair Burke" ], "publishedDate": "2017-03-14", "industryIdentifiers": [ { "type": "ISBN_10", "identifier": "885665878X" }, { "type": "ISBN_13", "identifier": "9788856658781" } ], "readingModes": { "text": false, "image": false }, "pageCount": 380, "printType": "BOOK", "categories": [ "Fiction" ], "maturityRating": "NOT_MATURE", "allowAnonLogging": false, "contentVersion": "preview-1.0.0", "panelizationSummary": { "containsEpubBubbles": false, "containsImageBubbles": false }, "imageLinks": { "smallThumbnail": "http://books.google.com/books/content?id=IBoIMQAACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api", "thumbnail": "http://books.google.com/books/content?id=IBoIMQAACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api" }, "language": "it", "previewLink": "http://books.google.at/books?id=IBoIMQAACAAJ&dq=isbn:9788856658781&hl=&cd=1&source=gbs_api", "infoLink": "http://books.google.at/books?id=IBoIMQAACAAJ&dq=isbn:9788856658781&hl=&source=gbs_api", "canonicalVolumeLink": "https://books.google.com/books/about/Una_perfetta_sconosciuta.html?hl=&id=IBoIMQAACAAJ" }, "saleInfo": { "country": "AT", "saleability": "NOT_FOR_SALE", "isEbook": false }, "accessInfo": { "country": "AT", "viewability": "NO_PAGES", "embeddable": false, "publicDomain": false, "textToSpeechPermission": "ALLOWED", "epub": { "isAvailable": false }, "pdf": { "isAvailable": false }, "webReaderLink": "http://play.google.com/books/reader?id=IBoIMQAACAAJ&hl=&printsec=frontcover&source=gbs_api", "accessViewStatus": "NONE", "quoteSharingAllowed": false } } ] }
Dove chiaramente mancano casa editrice e Trama che sono invece presenti sulla piattaforma.
Qualcuno ha esperienze in merito e sa darmi informazioni su possibili soluzioni?
Scusatemi se sono stato troppo lungo e GRAZIE se siete arrivati fin quaggiú a leggere
-
Ciao
il progetto è offline o online?
-
Ciao Sermatica, tutto offline. si collega solo per ricavare le info del libro tramite API, ma il resto é tutto in local.