<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Consider the following ooRexx program that exploits the JRE (the
Java classes available via the Java runtime environment, installed
by OpenJDK):</p>
<blockquote>
<p>/* purpose: demonstrate how to fetch and list all links with
jsoup */<br>
parse arg source -- command line argument: can be html, xml;
a local file or URL<br>
url? = source ~startsWith("http") -- do we need to parse a
URL?<br>
timeout = 10000 -- timeout: 10 sec (10000
msec)<br>
if url? then src=.bsf~new("java.net.URL", source) -- create URL
object<br>
else src=.bsf~new("java.io.File", source) -- create
File object<br>
<br>
clzJsoup = bsf.importClass("org.jsoup.Jsoup") -- import
Jsoup class<br>
if url? then rootNode = clzJsoup~parse(src, 10000) -- timeout:
10 second<br>
else rootNode = clzJsoup~parse(src)<br>
<br>
allLinks = rootNode~select("a") -- get all a-elements<br>
len=length(allLinks~size) -- get length of size for
right-adjusting<br>
say "there are" pp(allLinks~size) "links"<br>
do counter c link over allLinks -- iterate over the collection
(ArrayList)<br>
-- say "#" c~right(len)":" pp(link~absURL('href')) "for"
pp(link~text)<br>
say "#" c~right(len)":" pp(link~attr('href')) "for"
pp(link~text)<br>
end<br>
<br>
::requires "BSF.CLS" -- get ooRexx-Java bridge<br>
/* purpose: demonstrate how to fetch and list all links with
jsoup */<br>
parse arg source -- command line argument: can be html, xml;
a local file or URL<br>
url? = source ~startsWith("http") -- do we need to parse a
URL?<br>
timeout = 10000 -- timeout: 10 sec (10000
msec)<br>
if url? then src=.bsf~new("java.net.URL", source) -- create URL
object<br>
else src=.bsf~new("java.io.File", source) -- create
File object<br>
<br>
clzJsoup = bsf.importClass("org.jsoup.Jsoup") -- import
Jsoup class<br>
if url? then rootNode = clzJsoup~parse(src, 10000) -- timeout:
10 second<br>
else rootNode = clzJsoup~parse(src)<br>
<br>
allLinks = rootNode~select("a") -- get all a-elements<br>
len=length(allLinks~size) -- get length of size for
right-adjusting<br>
say "there are" pp(allLinks~size) "links"<br>
do counter c link over allLinks -- iterate over the collection
(ArrayList)<br>
-- say "#" c~right(len)":" pp(link~absURL('href')) "for"
pp(link~text)<br>
say "#" c~right(len)":" pp(link~attr('href')) "for"
pp(link~text)<br>
end<br>
<br>
::requires "BSF.CLS" -- get ooRexx-Java bridge<br>
</p>
</blockquote>
<p>The result of running the above program against
<a class="moz-txt-link-freetext" href="http://openjdk.net">http://openjdk.net</a><br>
</p>
<blockquote>
<p>E:\WU\Lehrveranstaltungen\Materialien\BP2_AutoJava\254_AutoJava_jsoup_code>rexx
jsoup_05.rxj <a class="moz-txt-link-freetext" href="http://openjdk.org">http://openjdk.org</a><br>
there are [132] links<br>
# 1:
[<a class="moz-txt-link-freetext" href="https://www.oracle.com/technetwork/java/javase/overview/index.html">https://www.oracle.com/technetwork/java/javase/overview/index.html</a>]
for [Java Platform, Standard Edition]<br>
# 2: [projects/jdk/20] for [latest open-source JDK]<br>
# 3: [<a class="moz-txt-link-freetext" href="https://jdk.java.net/20">https://jdk.java.net/20</a>] for [jdk.java.net/20]<br>
# 4:
[<a class="moz-txt-link-freetext" href="https://www.oracle.com/technetwork/java/javase/downloads/index.html">https://www.oracle.com/technetwork/java/javase/downloads/index.html</a>]
for [here]<br>
# 5: [projects/amber] for [Amber]<br>
# 6: [<a class="moz-txt-link-freetext" href="https://wiki.openjdk.org/display/loom/Main">https://wiki.openjdk.org/display/loom/Main</a>] for [Loom]<br>
# 7: [projects/panama] for [Panama]<br>
# 8: [<a class="moz-txt-link-freetext" href="https://wiki.openjdk.org/display/valhalla/Main">https://wiki.openjdk.org/display/valhalla/Main</a>] for
[Valhalla]<br>
# 9: [projects/jdk/19] for [the next version of Java and the
JDK]<br>
# 10: [<a class="moz-txt-link-freetext" href="https://dev.java">https://dev.java</a>] for [dev.java]</p>
<p>... cut ...</p>
<p># 119: [/projects/tiered-attrib] for [Tiered Attribution]<br>
# 120: [/projects/tsan] for [Tsan]<br>
# 121: [/projects/type-annotations] for [Type Annotations]<br>
# 122: [/projects/valhalla] for [Valhalla]<br>
# 123: [/projects/verona] for [Verona]<br>
# 124: [/projects/visualvm] for [VisualVM]<br>
# 125: [/projects/wakefield] for [Wakefield]<br>
# 126: [/projects/zero] for [Zero]<br>
# 127: [/projects/zgc] for [ZGC]<br>
# 128: [<a class="moz-txt-link-freetext" href="https://oracle.com">https://oracle.com</a>] for []<br>
# 129: [/legal/tou/] for [Terms of Use]<br>
# 130: [/legal/gplv2+ce.html] for [GPLv2]<br>
# 131: [<a class="moz-txt-link-freetext" href="https://www.oracle.com/us/legal/privacy/">https://www.oracle.com/us/legal/privacy/</a>] for [Privacy]<br>
# 132: [<a class="moz-txt-link-freetext" href="https://openjdk.org/legal/openjdk-trademark-notice.html">https://openjdk.org/legal/openjdk-trademark-notice.html</a>]
for [Trademarks]<br>
</p>
</blockquote>
<p>This program runs on all versions of Java/OpenJDK unchanged.</p>
<p>With your currently intended warning all of a sudden all users of
such programs/applications get frightened for no good reason!</p>
<p>---rony</p>
<p> <br>
</p>
</body>
</html>