• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

ISBN om boekinfo op te halen

  • Onderwerp starter Onderwerp starter AatB
  • Startdatum Startdatum
Je hebt dus je code nogmaals aangepast; dat geeft betere (maar geen uitmuntende) resultaten: zie kolom G evenals C4.
 
Vertel dan eens wat er in kolom G zou moetenn staan ?
 
Iets in de stijl van wat AI er met RegExp van gemaakt heeft zoals in bijlage. En inderdaad: ook dat kan beter (zeg ik er meteen bij om je voor te zijn;))
 

Bijlagen

Minimale aanpassing van de code:

Met zulke inconsistente gegevensopbouw heeft het geen zin een 'algemene' vertaler te gebruiken.
Voor een boekhandel/bibliotheek is het land niet interessant, wel de lokatie van de uitgever (kijk ook eens voorin in een boek op het schutblad).
 

Bijlagen

Met zulke inconsistente gegevensopbouw heeft het geen zin een 'algemene' vertaler te gebruiken.
Json is zeer consistent. Het is gewoon een set regels die gevolgd moet worden. VBA kent die regels niet.

Dit is correcte json en London + New York horen bij elkaar. Met een paar keer Split() gaat dit niet lukken.
"publishers": [{"name": "Penguin"}], "publish_places": [{"name": "London"}, {"name": "New York"}],

Aan Claude vroeg ik VBA code die geen json parser gebruik en het resultaat is niet je-van-het.

off topic In bijvoorbeeld PHP is het simpel omdat die de json syntax wel kent.
PHP:
$isbn = "9780140449136";
$url = "https://openlibrary.org/api/books?bibkeys=ISBN:" . $isbn . "&format=json&jscmd=data";
$response = file_get_contents($url);
$data = json_decode($response, true);
$boek = $data["ISBN:" . $isbn];
echo $boek['title'];
 
Met dank aan alle kritische meelezers:

NB. Niet json is inconsistent, maar de website waar deze gegevens vandaan komen.
 

Bijlagen

Laatst bewerkt:
Op https://snb-vba.eu/VBA_ISBN.html vind je een Excelbestand om aan de hand van een 13-cijferig ISBN nummer gegevens over boeken te downloaden.
De JSON parser die daarvoor nodig is bestaat uit 16 regels VBA.
De gegevens komen in het bestand vanaf regel 6, gesplitst naar pad (positie in de JSON hiërarchie), veldnaam en veldwaarde.

Omdat de JSON gegevens in verschillende VBA vormen weergegeven kunnen worden (bijv. dictionary, treeview, UDF) is daaraan een aparte pagina gewijd: https://snb-vba.eu/VBA_JSON_Parser.html
Iedere aanpak wordt in een apart bestand geïllustreerd.
 
Ha, je bijt je erin vast. Je bent goed op weg! Vind ik leuk dat het je bezig houdt :)
Er zit een kleine bug in de url, aan het eind hoort json te staan.
Code:
bibkeys=ISBN:" & c00    & "&jscmd=details&format=js

Je heb code geschreven die enigszins kan omgaan met deze API maar het is geen JSON parser. Zolang je je niet aan de json regels houdt kan je onverwachte dingen tegenkomen zoals ISBN 9780140449136 bij authors staat een escaped Unicode karakter: Fi\u00f3dor

Als je dit bestand als 1 string inleest en daarna kan parsen dan ben je goed op weg.
 

Bijlagen

@snb
verander format=js in format=json dan krijg je een schonere output
Bericht automatisch samengevoegd:

@bron
Is de zipfile bericht#29 een minimale testcase met alle json variaties?
 
Met json krijg je veel teveel (overbodige) gegevens.
Je vraagt in de url met format=js een javascript object op.
De inhoud daarvan is identiek aan het json object.
Dit is het verschil

Code:
--- json
{
"ISBN:9780140449136": {......}
}

--- js (javasscript)
var _OLBookInfo = {
"ISBN:9780140449136": {......}
};

De info van #29 blijft hetzelfde.
 
Dat is niet het geval bij openlibrary.

Het gaat mij, naar aanleiding van de vraag van TS. vooral om de struktuur van het bestand, niet zozeer om het omzetten van unicode in Ascii.
In de nieuwe webversie is dat nu ook opgenomen.
 
Is de zipfile bericht#29 een minimale testcase met alle json variaties?
Alles zit in de testcase volgens RFC 8259
Json kent 6 datatypen: Object, Array, String, Number, true/flase, null
Ook whitespace, Unicode en escaped karakters zitten in de testcase.

Dat is niet het geval bij openlibrary.
Jazeker wel. Het verschil zit 'm hierin:
In de url krijg je met jscmd=data alle gegevens en met jscmd=details een gedeelte daarvan. In beide gevallen krijg je json terug, alleen bij details (die jij gebruikt) zijn het er minder.

In de url is format=json correct want met format=js krijg je json in een Javascript variabele terug, zie #32.
Bericht automatisch samengevoegd:

format=json

format=js (Javascript)
 
Laatst bewerkt:
Linkjes zijn denk ik oud want bij mij werken ze niet meer.
edit: https://openlibrary.org/api/books.json?bibkeys=ISBN:9780140449136&jscmd=details&format=json

Nu een goed werkende json parser voor json bestanden en json api's.
edit: aangepast met bovenstaande url
 

Bijlagen

Laatst bewerkt:
Terug
Bovenaan Onderaan