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.rxj https://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

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


-- 
--
__________________________________________________________________________________

Prof. Dr. Rony G. Flatscher
Department Wirtschaftsinformatik und Operations Management
Institut für Wirtschaftsinformatik und Gesellschaft
D2c 2.086
WU Wien
Welthandelsplatz 1
A-1020  Wien/Vienna, Austria/Europe

http://www.wu.ac.at
__________________________________________________________________________________