Onderwerp: Van Dale shell script werkt niet meer.

Een van mijn favoriete shell scriptjes werkt niet meer. Je kon er op de commandline een woord uit de Van Dale mee zoeken. Weet iemand van jullie (de maker van het script wellicht?) hoe het te "repareren" valt? Dit is het script:

#!/bin/bash

lynx --dump "http://www.vandale.nl/opzoeken/woordenboek/?zoekwoord=$1" \
| grep RESULTAAT -A1000 | grep 'IFRAME:' -B1000\
| grep -v RESULTAAT | grep -v 'IFRAME:'
Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

2

Re: Van Dale shell script werkt niet meer.

De URL van vandale zelf is veranderd. Als ik zoek op test, kom ik op het volgende uit:

http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=test

Dus allicht je scriptje vervangen in:

#!/bin/bash

lynx --dump "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=$1" \
| grep RESULTAAT -A1000 | grep 'IFRAME:' -B1000\
| grep -v RESULTAAT | grep -v 'IFRAME:'
"If everyone demanded peace instead of another television set, then there'd be peace." - John Lennon

Re: Van Dale shell script werkt niet meer.

Een foutmelding of een beschrijving van het ongewenste gedrag zou op zich ook fijn zijn, dan weten we hier beter in te schatten wat er precies mis gaat wink.

Desktop: Intel i7 2600 @ 3,4 Ghz, 16 GB RAM,  11 TB (SSD+RAID6) voor Gentoo en Fedora, 1 TB voor Windows 7 Home Premium 64 bit English (zelfbouw)
Server: Intel Xeon E5506, 24 GB RAM, 2x 256 GB Samsung 840 Pro (LVM Mirrored LV) voor Proxmox (zelfbouw)

Re: Van Dale shell script werkt niet meer.

kyentei schreef:

De URL van vandale zelf is veranderd. Als ik zoek op test, kom ik op het volgende uit:

http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=test

Dus allicht je scriptje vervangen in:

#!/bin/bash

lynx --dump "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=$1" \
| grep RESULTAAT -A1000 | grep 'IFRAME:' -B1000\
| grep -v RESULTAAT | grep -v 'IFRAME:'

Ik dacht ook al dat het door een veranderde URL kwam. Helaas werkt het ook met die nieuwe url niet. Misschien is niet meer goed te krijgen..

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Van Dale shell script werkt niet meer.

Cybertinus schreef:

Een foutmelding of een beschrijving van het ongewenste gedrag zou op zich ook fijn zijn, dan weten we hier beter in te schatten wat er precies mis gaat wink.

Er is helaas geen foutmelding. Vroeger typte ik bijvoorbeeld op de commandline:

vandale test 

En dan kreeg ik de omschrijving van het woord "test" uit de Dikke Van Dale te zien in de terminal. Nu gebeurt er niets en krijg ik weer gewoon de prompt te zien...

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

6

Re: Van Dale shell script werkt niet meer.

Het scriptje had ik een tijdje geleden opgeofferd. Het werkt inderdaad niet meer. lynx werkt gewoon niet meer met de website, omdat java gebruikt wordt. Je krijgt dus nu een foutmelding van http code 500 "servlet exception" java.lang.NullPointerException.

Een simpelse oplossing ligt helaas niet aan de hand met lynx. Ik had iets gehoord van headless mozilla, misschien kan daarmee wat. Ik zal het nakijken als ik wat tijd heb.

mvg
PJ

Re: Van Dale shell script werkt niet meer.

Het is niet zo ingewikkeld. Het probleem is dat de nieuwe pagina van het online woordenboek eruit klapt als je geen cookies meegeeft. De inhoud of de naam van de cookie is niet relevant, zolang je maar een cookie meegeeft. (De programmeur onder ons ziet de bui al hangen: eerst kijken of je die variabele wel bestaat voor je hem gebruikt, jochie werkzaam bij Van Dale.)

Dat kan met lynx vrij gemakkelijk.

"Free and non-free software can co-exist the same way that free people and slaves can co-exist. But that's not a desirable state of affairs." -- RMS

8 Laatst bewerkt door chromisX (16 May 2010 07:44:16)

Re: Van Dale shell script werkt niet meer.

Geen lynx maar curl, omdat ik daar de opties van ken:

curl -s -b "a=b" "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=test"

Dit werkt, alleen zal je het resultaat nog uit de HTML moeten vissen met de goeie grep's, want je oude grep's lijken niet meer te werken.

Wellicht dat lynx de HTML onderdrukt c.q. interpreteert.

9 Laatst bewerkt door MeneerJansen (16 May 2010 12:23:51)

Re: Van Dale shell script werkt niet meer.

De "curl" methode werkt beter. En inderdaad, het greppen moet aangepast worden (ik ben daar geen ster in, zal even puzzelen). Bedankt! smile

[edit] Lynx geeft inderdaad een error tegenwoodig:

$ $lynx --dump "http://www.vandale.nl/vandale/zoekService.do\
?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=test"


                             500 Servlet Exception

java.lang.NullPointerException
     __________________________________________________________________

   Resin-3.0.25 (built Wed, 05 Dec 2007 08:19:3
Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

10

Re: Van Dale shell script werkt niet meer.

MeneerJansen schreef:

[edit] Lynx geeft inderdaad een error tegenwoodig:

$ $lynx --dump "http://www.vandale.nl/vandale/zoekService.do\
?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=test"

                             500 Servlet Exception

De reden staat in dit bericht. Als je het wget-voorbeeld van chromisX leest, zie je dat hij de voorgeschreven oplossing gebruikt. Je zult voor lynx iets dergelijks moeten doen.

"Free and non-free software can co-exist the same way that free people and slaves can co-exist. But that's not a desirable state of affairs." -- RMS

Re: Van Dale shell script werkt niet meer.

Zelf maak ik geen gebruik van een cli script, maar van een Firefox keyword search om vandale af te zoeken. Dat is gewoon een bookmark aanmaken binnen Firefox naar de URL:
http://www.vandale.nl/vandale/zoekServi … chQuery=%s
Als je dan het keyword "vd" aan die bookmark hangt, dan werkt dat echt super. Dan voer je in je adresbalk "vd test" in en Firefox herkent dat de eerstgenoemde URL bedoeld wordt. Die %s die in die URL staat wordt, in dit geval, vervangen door het woord test. Dus zo kan je snel zoeken naar woorden, direct uit je browser.
Een andere handige manier om z'on bovenstaande URL aan te maken is om rechts te klikken op een zoekveld (dat kan dus op vandale.nl staan, maar ook op Wikipedia, Google of elke andere site waarop je kan zoeken) en je kiest dan voor de optie "add keyword for this search". Dan zoekt Firefox uit hoe de link er precies uit moet zien. Erg handig imo.

Maar het is wel een totaal andere aanpak dan z'on CLI script. Het is dus echt een alternatief voor je huidige aanpak, geen oplossing wink.

Desktop: Intel i7 2600 @ 3,4 Ghz, 16 GB RAM,  11 TB (SSD+RAID6) voor Gentoo en Fedora, 1 TB voor Windows 7 Home Premium 64 bit English (zelfbouw)
Server: Intel Xeon E5506, 24 GB RAM, 2x 256 GB Samsung 840 Pro (LVM Mirrored LV) voor Proxmox (zelfbouw)

Re: Van Dale shell script werkt niet meer.

Cyberneticus en Bastiaan:  bedankt voor de info. Had niet alles in dit topic goed doorgelezen.

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

13 Laatst bewerkt door chromisX (17 May 2010 06:20:39)

Re: Van Dale shell script werkt niet meer.

Ik heb vrij snel een werkende versie in elkaar gehacked, weliswaar in Perl.

Daar moet je LWP::UserAgent en HTML::Parser voor hebben. Dat zijn CPAN modules.

Bij interesse kan ik het posten, maar je moet even weten hoe je het werkend krijgt wat dat betreft.

Re: Van Dale shell script werkt niet meer.

ik gebruik de volgende bookmarklet om bij Vandale wat op te zoeken

javascript:if(w=prompt('Woord:','')){top.location.href='http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery='+w;}

Re: Van Dale shell script werkt niet meer.

chromisX schreef:

Ik heb vrij snel een werkende versie in elkaar gehacked, weliswaar in Perl.

Daar moet je LWP::UserAgent en HTML::Parser voor hebben. Dat zijn CPAN modules.

Bij interesse kan ik het posten, maar je moet even weten hoe je het werkend krijgt wat dat betreft.

Lijkt mij een mooie oplossing. Maar ik gebruik o.a. (nog steeds) Suse 10.3: daar kan ik geen pakketten meer voor installeren (end of life cycle: geen repositories meer). Kan ik die modules gewoon plaatsen in:

/usr/lib/perl5/5.8.8

? En waar download ik ze (in je link vond ik geen download)? smile

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

Re: Van Dale shell script werkt niet meer.

MozillaTux schreef:

ik gebruik de volgende bookmarklet om bij Vandale wat op te zoeken

javascript:if(w=prompt('Woord:','')){top.location.href='http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery='+w;}

He! Dat werkt goed. Eens kijken of dit net zo lekker werkt als typen in de terminal.

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

17 Laatst bewerkt door chromisX (17 May 2010 15:58:29)

Re: Van Dale shell script werkt niet meer.

Het beste kan je de CPAN shell gebruiken om het e.e.a. te installeren,

doe als root "cpan" en (na het antwoorden van allerlei vragen) doe je

install LWP::UserAgent
install HTML::Parser

Als je daar problemen mee hebt, tip even; er is ook een handmatige manier maar dan zal je ook eventuele depedencies met de hand moeten resolven.

18 Laatst bewerkt door vvim (17 Feb 2011 20:53:15)

Re: Van Dale shell script werkt niet meer.

MeneerJansen schreef:

Een van mijn favoriete shell scriptjes werkt niet meer. Je kon er op de commandline een woord uit de Van Dale mee zoeken. Weet iemand van jullie (de maker van het script wellicht?) hoe het te "repareren" valt? Dit is het script:

#!/bin/bash

lynx --dump "http://www.vandale.nl/opzoeken/woordenboek/?zoekwoord=$1" \
| grep RESULTAAT -A1000 | grep 'IFRAME:' -B1000\
| grep -v RESULTAAT | grep -v 'IFRAME:'

Hoi,

er zijn al veel jaren overheen gegaan, maar ik diepte vandaag deze discussie op na een Google-actie.

Persoonlijk gebruik ik nu "curl" om het handige script na te bootsen:

#!/bin/bash

curl -s -b "a=b" "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=$1"  \
| tail -n +440 | head -10  | sed 's/<[^>]*>//g'

en dat werkt vrij goed.

Ik ben me er wel van bewust dat dit zeker niet de "cleanste" oplossing is. De zoekresultaten worden altijd weergegeven in de unieke <div>-tag genaamd     <div id="results" style="clear:both;">  .

Heeft iemand een idee hoe ik enkel de inhoud van die <div>-tag kan laten zien?



edit: duidelijk niet met reguliere expressies.

Dus beter om w3m te installeren en dan het volgende proberen:

#!/bin/bash

curl -s -b "a=b" "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=$1" \
 | grep -A 16 '<div id="results" style="clear:both;">' | w3m -dump -T text/html 

Nu zoek ik dus nog een mooiere oplossing dan het gebruik van 'grep -A 16' . Als Van Dale namelijk ooit een resultaat zou geven dat langer is dan 16 regels, is het script incorrect.
Is er een manier om de HTML zo te parsen dat ik enkel de inhoud van de <div id="results" style="clear:both;">-tag kan laten verschijnen?


Dank,

Wim

19

Re: Van Dale shell script werkt niet meer.

Ok, ik heb het momenteel als volgt opgelost:

curl -s -b "a=b" "http://www.vandale.nl/vandale/zoekService.do?selectedDictionary=nn&selectedDictionaryName=Nederlands&searchQuery=$1" \
| grep -A1000 '<div id="results" style="clear:both;">' \
| grep -B1000 'Gebruik dit woordenboek nu ook via de <a href="http' \
| head -n -1 \
| w3m -dump -T text/html

Zoals chromisX aangaf, wordt 'curl' gebruikt met een dom cookie, de lange URL is de zoekquery voor de Van Dale-website.

De resultaten van de zoekactie staan in de <div>-tag met als id "results", dus daar knippen we met grep en gebruiken we alles dat /na/ die tag komt (-After).

De resultaten (ook als er geen resultaat is) worden afgesloten met het zinnetje "Gebruik dit woordenboek blah"
dus alles dat daarna komt we er ook afknippen en we gebruiken dus enkel wat /daarvoor/ komt (-Before).

Het zinnetje "Gebruik dit woordenboek blah" zelf heb ik er persoonlijk niet graag bij, dus dat wordt er afgeknipt met het simpele 'head' commando.

Daarna halen we de HTML-code door de browser w3m, zie http://blog.mattwynne.net/2008/04/26/fe … -bash-wow/

Re: Van Dale shell script werkt niet meer.

En daarom worden oude topics niet standaard gesloten na een bepaalde tijd! Super mega hyper bedankt! Het werkt als de ... smile

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

21 Laatst bewerkt door vvim (18 Feb 2011 15:45:03)

Re: Van Dale shell script werkt niet meer.

Het was leuk om nog eens een scriptje te schrijven, veel plezier ermee :-)

Kent iemand trouwens de auteur van het oorspronkelijke script? Is dat gnuvd?

22 Laatst bewerkt door peej (28 Oct 2012 18:10:40)

Re: Van Dale shell script werkt niet meer.

vvim schreef:

Het was leuk om nog eens een scriptje te schrijven, veel plezier ermee :-)

Kent iemand trouwens de auteur van het oorspronkelijke script? Is dat gnuvd?

Nee, dat was ik. Ik heb zelf jouw (vvim) script trouwens meer dan een jaar of zo gebruikt. Maar merkte dat het niet meer werkte een paar dagen geleden. Dus, even wat bijwerken. Mijn nieuwe script heeft wel nog wat problemen, maar werkt okee in de meeste gevallen. Als je wat betere ideeën hebt, kan je de script bewerken. Ik heb geprobeerd om hem makkelijk om te begrijpen te maken, maar ja, je weet hoe het is smile

De nieuwe script heeft ook vertaalmogelijkheden.

Voorbeelden:

./vdn grof
./vdn grof nn         (zelfde als tevoren)
./vdn grof ne         (nederlands naar engels)
./vdn zwarte piet   


script zelf:

#!/bin/bash
#set -x -v
patterninput=$1 ; langinput=$2; langinputdefault="nn"

if [ -z "$langinput" ] ; then       # if no $2
  langinput="$langinputdefault"
else                                # if $2 exists
 if \
  [[ $langinput = "nn" ]] || \
  [[ $langinput = "ne" ]] || \
  [[ $langinput = "en" ]] || \
  [[ $langinput = "nf" ]] || \
  [[ $langinput = "fn" ]] || \
  [[ $langinput = "nd" ]] || \
  [[ $langinput = "dn" ]] || \
  [[ $langinput = "ns" ]] || \
  [[ $langinput = "sn" ]] || \
  [[ $langinput = "ni" ]] || \
  [[ $langinput = "in" ]] || \
  [[ $langinput = "np" ]] || \
  [[ $langinput = "pn" ]] || \
  [[ $langinput = "nz" ]] || \
  [[ $langinput = "zn" ]] ; then       # n ned e eng f fra d deu s spa i ita p port z zwe
    echo "language $langinput chosen"
  #else langinput is not a langinput but just another word, so fix patterninput:
  else                           # if $2 exists
    patterninput=$patterninput"+"$langinput   # eg: zwarte+piet
    langinput="$langinputdefault"
  fi
fi

lynx --dump --cookie_file=/dev/null --accept_all_cookies \
"http://www.vandale.nl/opzoeken?pattern=$patterninput&=&lang=$langinput" \
| tail -n+32 \
| grep -B100 -F "   [12]" \
| grep -v "^   \[12\].*$"

Re: Van Dale shell script werkt niet meer.

Ik durfde het niet te vragen, maar mij viel een paar dagen geleden ook op dat het script niet meer werkt omdat Van Dale Online veranderd is van layout o.i.d.

Anyway als ik het script als volgt in een text bestand (lees: shell script) zet dan werkt het niet (let op: ik moest en spatie toevoegen tussen de slash en de http://www.vandale...):

#!/bin/bash

patterninput=$1 ; langinput=$2; langinputdefault="nn"

if [ -z "$langinput" ] ; then       # if no $2
  langinput="$langinputdefault"
else                                # if $2 exists
if \
  [[ $langinput = "nn" ]] || \
  [[ $langinput = "ne" ]] || \
  [[ $langinput = "en" ]] || \
  [[ $langinput = "nf" ]] || \
  [[ $langinput = "fn" ]] || \
  [[ $langinput = "nd" ]] || \
  [[ $langinput = "dn" ]] || \
  [[ $langinput = "ns" ]] || \
  [[ $langinput = "sn" ]] || \
  [[ $langinput = "ni" ]] || \
  [[ $langinput = "in" ]] || \
  [[ $langinput = "np" ]] || \
  [[ $langinput = "pn" ]] || \
  [[ $langinput = "nz" ]] || \
  [[ $langinput = "zn" ]] ; then    # n ned e eng f fra d deu s spa i ita p port z zwe
    echo "language $langinput chosen"
  #else langinput is not a langinput but just another word, so fix patterninput:
  else                           # if $2 exists
    patterninput=$patterninput"+"$langinput   # eg: zwarte+piet
    langinput="$langinputdefault"
  fi
fi

lynx --dump --cookie_file=/dev/null --accept_all_cookies \
"http://www.vandale.nl/opzoeken?pattern= … $langinput" | tail -n+32 \
| grep -B100 -F "   [12]" | grep -v "^   \[12\].*$"

Als ik dan een woord opzoek krijg ik steevast als resultaat het volgende:

   woordenboek.

?

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....

24

Re: Van Dale shell script werkt niet meer.

MeneerJansen schreef:

Anyway als ik het script als volgt in een text bestand (lees: shell script) zet dan werkt het niet (let op: ik moest en spatie toevoegen tussen de slash en de http://www.vandale...):

Oeps, code tag niet gebruikt. Gecorrigeerd.

25 Laatst bewerkt door MeneerJansen (28 Oct 2012 17:38:09)

Re: Van Dale shell script werkt niet meer.

Works like a charm nu!! Bedankt. smile

Als je voor een verdieping niet de diepte in moet, maar de hoogte, waarom heet het dan ....