Lieber Herr Flatscher,
könnten Sie vielleicht noch präzisieren, wie man die tatsächliche Quelle in den jsoup Beispielen eingibt?
Ich habe versucht das Beispiel aus der Folie 18 nachzubauen für die Website https://www.ris.bka.gv.at. Ich bin davon ausgegangen, dass ich als source https://www.ris.bka.gv.at einsetzen muss, weswegen ich der Einfachheit halber source mit https://www.ris.bka.gv.at definiert habe.
Der Quellcode lautet im Detail daher wie folgt:
source = https://www.ris.bka.gv.at parse arg source url? = source ~startsWith("http") timeout = 10000 if url? then src=.bsf~new("java.net.URL", source) else src=.bsf~new("java.io.File", source) clzJsoup = bsf.importClass("org.jsoup.Jsoup") if url? then rootNode = clzJsoup~parse(src, 10000) else rootNode = clzJsoup~parse(src) allLinks = rootNode~select("a") len=length(allLinks~size) say "there are" pp(allLinks~size) "links" do counter c link over allLinks say "#" c~right(len)":" pp(link~attr('href')) "for" pp(link~text) end ::requires "BSF.CLS"
Wenn ich das Programm ausführe, stoße ich auf folgende Fehlermeldung:
rexx Z:\T08\G07T08_1.rexx 1 *-* source = https://www.ris.bka.gv.at Error 20 running Z:\T08\G07T08_1.rexx line 1: Symbol expected. Error 20.923: Symbol expected as a name of namespace-qualified symbol.
Process finished with exit code -20
Ich arbeite mit IntelliJ auf der virtuellen Maschine.
Beste Grüße Thomas Frenkenberger
Lieber Herr Frenkenberger,
On 30.08.2023 13:38, Frenkenberger, Thomas wrote:
könnten Sie vielleicht noch präzisieren, wie man die tatsächliche Quelle in den jsoup Beispielen eingibt?
Durch Aufruf auf der Kommandozeile mit dem Dateinamen oder URL, z.B. mit dem URL, wenn das Programm "jsour_05.rxj" wie auf der Folie heißt:
G:\tmp\bsf4oorexx\jsoup>rexx jsoup_05.rxjhttps://www.ris.bka.gv.at there are [36] links # 1: [#main] for [Zum Inhalt (Accesskey 0)] # 2: [#navigation] for [Zur Navigationsleiste (Accesskey 1)] # 3: [#GesamtabfrageSuche] for [Zur Schnellsuche (Accesskey 2)] # 4: [#WebseitenLinkBlock] for [Zu den weiterführenden Webseiten (Accesskey 3)] # 5: [#InformationLinkBlock] for [Zu den weiterführenden Informationen (Accesskey 4)] # 6: [/UI/Kontakt.aspx] for [Kontakt (Accesskey 4)] # 7: [/UI/Impressum.aspx] for [Impressum (Accesskey 5)] # 8: [/UI/Datenschutz.aspx] for [Datenschutzerklärung (Accesskey 6)] # 9: [/UI/Barrierefreiheit.aspx] for [Barrierefreiheitserklärung (Accesskey 7)] # 10: [/UI/SiteMap.aspx] for [Sitemap (Accesskey 8)] # 11: [/defaultEn.aspx] for [English] # 12: [/default.aspx] for [] # 13: [] for [Navigationsleiste:] # 14: [default.aspx] for [Startseite] # 15: [Bund/] for [Bundesrecht] # 16: [Land/] for [Landesrecht] # 17: [Bezirke/] for [Bezirke] # 18: [Gemeinde/] for [Gemeinden] # 19: [Judikatur/] for [Judikatur] # 20: [Sonstige/] for [Kundmachungen, Erlässe] # 21: [Gesamtabfrage/] for [Gesamtabfrage] # 22: [Gemeinde/] for [Gemeinden] # 23: [GemeinderechtAuth/] for [Gemeinderecht authentisch] # 24: [Bezirke/] for [Bezirke] # 25: [Bvb/] for [Kundmachungen der Bezirksverwaltungsbehörden] # 26: [https://oegovwiki.gv.at/wiki/Neu_im_RIS_(Archiv)] for [hier] # 27: [https://www.bmf.gv.at/] for [Bundesministerium für Finanzen] # 28: [https://www.oesterreich.gv.at/] for [Oesterreich.gv.at] # 29: [https://www.parlament.gv.at/] for [Parlament] # 30: [https://eur-lex.europa.eu/homepage.html?locale=de] for [EU-Recht] # 31: [UI/Info.aspx] for [Über das RIS] # 32: [UI/RISApp.aspx] for [RIS:App] # 33: [UI/Ogd.aspx] for [Open Government Data] # 34: [/RisInfo/LinksaufDokumenteimRISsetzen.pdf] for [Links auf Dokumente im RIS setzen] # 35: [UI/LinkListe.aspx] for [Linkliste] # 36: [#header] for [Zum Seitenanfang]
G:\tmp\bsf4oorexx\jsoup>
---
Ich habe versucht das Beispiel aus der Folie 18 nachzubauen für die Website https://www.ris.bka.gv.at. Ich bin davon ausgegangen, dass ich als source https://www.ris.bka.gv.at einsetzen muss, weswegen ich der Einfachheit halber source mit https://www.ris.bka.gv.at definiert habe.
Der Quellcode lautet im Detail daher wie folgt:
source = https://www.ris.bka.gv.at parse arg source url? = source ~startsWith("http")
Hier ein Hinweis: Ihre Änderung weist der Variable "source" die Zeichenkette "https://www.ris.bka.gv.at" zu. Allerdings wird anschließend in der "parse arg source"-Anweisung die Variable "source" auf die leere Zeichenkette gestellt, weil kein Argument beim Aufruf des Programmes angegeben wird. In weiterer Folge wird also auch kein URL übergeben!
Wenn Sie über IntelliJ arbeiten, dann sollte das Rexx-Programm ausdrücklich eine Eingabe vom Benutzer einfordern, wenn "source" leer ist, weil kein URL oder kein Dateiname beim Starten des Programmes mitgegeben wird.
Daher sollte die Änderung ein wenig anders sein: wenn "source" die leere Zeichenkette ist, dann fragen Sie mit "parse pull source" nach der Quelle nach. Die gibt man dann im unteren Fensterteil über die Tastatur ein, also z.B.:
/* purpose: demonstrate how to fetch and list all links */ parse arg source -- can be html, xml; a local file or URL *if **source**=**"" **then **do **say **'no file nor url given, please enter either:' ****parse pull **source****end **say **"source:" **pp(source)* url? = source ~startsWith("http") -- do we need to parse a URL? timeout = 10000 -- timeout: 10 sec (10000 msec) if url? then src=.bsf~new("java.net.URL", source) -- create URL object else src=.bsf~new("java.io.File", source) -- create File object clzJsoup = bsf.importClass("org.jsoup.Jsoup") -- import Jsoup class if url? then rootNode = clzJsoup~parse(src, 10000) -- timeout: 10 second else rootNode = clzJsoup~parse(src) allLinks = rootNode~select("a") -- get all a-elements len=length(allLinks~size) say "there are" pp(allLinks~size) "links" do counter c link over allLinks -- say "#" c~right(len)":" pp(link~absURL('href')) "for" pp(link~text) say "#" c~right(len)":" pp(link~attr('href')) "for" pp(link~text) end ::requires "BSF.CLS" -- get ooRexx-Java bridge
Wenn Sie es dann in IntelliJ ausführen:
Wenn ich das Programm ausführe, stoße ich auf folgende Fehlermeldung:
rexx Z:\T08\G07T08_1.rexx
1 *-* source = https://www.ris.bka.gv.at https://www.ris.bka.gv.at
Error 20 running Z:\T08\G07T08_1.rexx line 1: Symbol expected.
Error 20.923: Symbol expected as a name of namespace-qualified symbol.
Die Fehlermeldung, die Sie erhalten, weißt auf die Zeile 1 in Ihrem Programm hin: Sie haben die Anführungszeichen um den URL vergessen, hat also gar nichts mit jsoup zu tun!
Mit freundlichem Gruß
Rony G. Flatscher