Op verzoek een kleine uitleg van ons systeempje. En daarmee gaat het goed: inmiddels zijn er bijna 1750 overheidsdocumenten opgevraagd. Nog veel gespeel lijkt me, maar ik denk dat het daar in de statistieken inmiddels wel opvalt.
Laten we eerst even kijken naar het probleem:
Als je de Parlando-website opent, krijg je een loginscherm. Je kan hier inloggen of als “anoniem ingelogd” verder gaan naar het beperkte zoekscherm. Je hebt nu een uniek sessienummer gekregen dat je de rest van je bezoek blijft gebruiken. Dit sessienummer is aan de serverkant opgeslagen, hoort bij jouw computer en is slechts beperkt houdbaar. Op de server wordt elke zoekopdracht met de zoekresultaten die je doet opgeslagen (Privacy, iemand?).
Dus stel, je doet een zoekopdracht op “kamervragen Wilders”, dan krijg je een lijst terug met documenten die aan die eis voldoen. Een lijst met links naar documenten. Deze links zijn als volgt opgebouwd (ik laat het begin weg):
“anonymous@3A1566041854/action=doc/query=2/pos=4/KST106009.pdf”
Hij zegt hier eigenlijk: Toon van sessie 3A1566041854 het 5e resultaat (het systeem begint met tellen bij 0) van de tweede zoekopdracht (hier begint het systeem bij 1) en noem het bestand KST106009.pdf.
Goed, er zijn meerdere problemen als je hiervan een vaste, houdbare link wilt maken. Ten eerste de sessie. Deze is niet overdraagbaar. Ten tweede de zoekopdracht. We weten niet welke dat was. Ten derde de resultaatpositie. Als je zoekt op de kamervragen van Wilders is het nogal aannemelijk dat als je dezelfde zoekopdracht over drie weken uitvoert er nieuwe vragen zijn gekomen en jouw gewenste resultaat niet meer op resultaatpositie 5 staat.
Ons systeem moet dus zelf inloggen, een sessienummer opvragen en onthouden, en daarna een zoekopdracht doen waarbij gegarandeerd kan worden dat er slechts één resultaat uitkomt en deze link zal werken:
“anonymous@XXXXXXXX/action=doc/query=1/pos=0/XXXXXXXXX.XXX”.
Gelukkig bleek na wat experimenteren dat er nog wel iets goeds was aan de links bij Parlando: de bestandsnaam bevat een documentcode. In eerste instantie had ik daar niet naar gekeken omdat ik er al snel achter kwam dat die naam geen officiële code was waar je op kon zoeken in het veld “nummer” en “volgnummer”.
Daarnaast deed het er niet toe welke naam je gebruikte. Als je KST106009.pdf zou vervangen door PietjePuk.pdf dan kreeg je exact hetzelfde document te zien, maar dan met een andere naam.
De ontdekking dat deze code weldegelijk ín het document te vinden was redde me van heel wat extra werk, want je kan in de documenten zoeken. Anders had ik de hele zoekopdracht ook mee moeten geven en met datums aan de slag gemoeten.
In ons voorbeeld (“KST106009.pdf”) halen we dus .pdf van de bestandsnaam af en we schieten een zoekopdracht het systeem in waarbij we vragen om alle documenten waarin die term voorkomt. En dat is altijd één keer, want als de documenten naar andere documenten verwijzen, doen ze dat (gelukkig) niet via deze code.
Nu had ik dus dé zoekopdracht, en vanaf dat moment was het eigenlijk simpel. Via de PHP library cURL haalt het systeem pagina’s op van de officiële Parlando site en zoekt naar links waarna het systeem ze iets aanpast (simpele str_replace) zodat ze niet naar parlando gaan maar naar ons eigen systeem. De downloadlinkjes vervangen we compleet (door middel van een ereg_replace).
Het gevolg? Alle links van Parlando werken gewoon zoals ze op de site van parlando zullen werken. Alle resultaatpagina’s worden gewoon uitgevoerd door Parlando, alleen iets aangepast getoond via onze site.
De échte verandering zit hem in de downloadlinks.
Zodra iemand op zo’n link klikt logt ons systeem opnieuw in, pakt het sessienummer, doet een zoekopdracht die precies het gewenste resultaat oplevert en toont vervolgens het eerste resultaat van de eerste zoekopdracht.
Het systeem toont het resultaat in een frame-constructie. Ik had mezelf een paar jaar geleden beloofd dat NOOIT meer te doen, aangezien frames voor lutsers zijn, maar dit zorgt er in dit geval voor dat onze URL in de locatiebalk blijft staan en niet de onleesbare en niet-werkzame url van Parlando.
Veel mensen hebben namelijk toch de neiging om die url uit de locatiebalk te knippen en te plakken.
Dit alles zit in 190 regels code. Dat zijn ongeveer drie a4-tjes. En ik ben echt niet zo’n goede programmeur, dus ik denk dat het in de helft ook moet kunnen.
Dat was het.
Reacties (10)
Het is volbracht. Amen.
Fantastisch: na dè blogscoop van (het eerste kwartaal van) 2007 nu ook nog een heldere uitleg ervan.
Het zal ongetwijfeld aan mij liggen, maar een touw er aan vastknopen is me tot op heden niet gelukt. Waar heeft u het over?
Wat snap je niet??
Al op de eerste link in het bericht geklikt?
@3: Wees maar niet ongerust, 90% van de mensen heeft geen flauw idee waar Spuyt het over heeft, waaronder ikzelf. Een paar techno-babbelaars wilde weten hoe zijn Parlando-ombouw-systeem werkte en die kunnen dat uit deze tekst halen, blijkbaar, dus zij blij. Gewone stervelingen negeren dit soort postjes gewoon.
*tadadada die pomtiepom*
Ben een techno-analfabeet, maar ik snap het wel:
je zoekt en maaktvervolgens een link. In de link zit een code (die van nature al in het document zat). Als je weer klikt op de link gaat het systeem met die code automatisch voor jou zoeken, zodat je hetzelfde ding weer voor je snufferd hebt.
Alles wat er verder omheen gebeurt, is alleen maar ter verdere vergemakkelijking van het geheel.
Zo werkt het toch?
Maarreh, als het zo simpel is waarom zijn er dan 15 commissies meebezig om dit voor mekaar te krijgen?? Ik snap ook die verhalen van die Alexander Boer in dat andere reactieformulier niet, lijkt mij a) dat hij het nodeloos ingewikkeld maakt b) als die documentcodes niet veranderen (en waarom zou je??) je op deze manier toch tot in lengte van dagen een systeem hebt dat doet wat de menschen willen????
@Gris: een uitstekende samenvatting.
Tja, als ze burgers echt toegang willen geven moeten ze de Parlando documenten gewoon doorzoekbaar maken voor Google. Ik kan me niet voorstellen dat de politici zelf het systeem gebruiken.
In Google zo je dan gewoon zo kunnen zoeken:
site:http://parlando.sdu.nl verdonk
Met een permalink tussenlaagje (GUID o.i.d. http://www.somacon.com/p113.php ) tussen de link en het documentnummer kan je dan ook willekeurige (interne) omnummeracties opvangen. Zolang je voor ieder document maar 1 GUID nummer houd.
Mooi gemaakt hoor Spuyt!
Innovatie is juist dingen eenvoudiger maken.
@Bullit: mee eens, kunnen Googelen zou pas geweldig zijn. Neemt de overheid dan ook het werk uit handen om zelf de documenten te indexeren.
In de andere thread deed ik al zo’n GUID achtig voorstel. Je gebruikt vaste URLs om het document te identificeren, en gebruikt redirection naar een andere URL om het document daadwerkelijk op te halen. Zo zijn naam en locatie onafhankelijk van elkaar, maar kan je op basis van de naam wel informatie terugvinden. Eigenlijk precies de aanpak van PURL.