1+ // Script for Hibiscus Depot Viewer
2+ // Updated 03.01.2025 by @dirkhe
3+ // Updated 18.01.2025 by @dirkhe - Logging added
14
25var ArrayList = java . util . ArrayList ;
36
4- var fetcher ;
7+ var fetcher ;
58var wc ;
6-
9+ var boerseSelect ;
10+ var searchButton ;
11+ //var tablePath;
712
813function getAPIVersion ( ) {
9- return "1" ;
14+ return "1" ;
1015}
1116
1217function getVersion ( ) {
13- return "2014-06-25 " ;
18+ return "2025-01-18 " ;
1419}
1520
1621function getDate ( year , month , day ) {
17- return new java . util . Date ( year - 1900 , month - 1 , day ) ;
22+ return new java . util . Date ( year - 1900 , month - 1 , day ) ;
1823}
1924
2025function getURL ( ) {
21- return "http://www.finanzen.net" ;
22- } ;
23-
26+ return "http://www.finanzen.net" ;
27+ }
2428
2529function getName ( ) {
26- return "Finanzen.net" ;
27- } ;
28-
29-
30- function prepare ( fetch , search , startyear , startmon , startday , stopyear , stopmon , stopday ) {
31- fetcher = fetch ;
32-
33- wc = fetcher . getWebClient ( true ) ;
34- page = wc . getPage ( "http://www.finanzen.net/suchergebnis.asp?frmAktiensucheTextfeld=" + search ) ;
35- links = page . getAnchorByText ( "Historisch" ) ;
36- page = links . click ( ) ;
37-
38- // Handelsplätze extrahieren
39- var liste = new ArrayList ( ) ;
40- var cfg = new Packages . jsq . config . Config ( "Handelsplatz" ) ;
41- select = page . getElementByName ( "strBoerse" ) ; // HtmlSelect Object
42- listeHandelsplaetze = select . getOptions ( ) ; // List of HtmlOption
43- for ( var i = 0 ; i < listeHandelsplaetze . size ( ) ; i ++ ) {
44- var platz = listeHandelsplaetze . get ( i ) ;
45- cfg . addAuswahl ( platz . getText ( ) , platz . getValueAttribute ( ) ) ;
46- }
47- liste . add ( cfg ) ;
48-
49- // Datum setzen
50- select = page . getElementByName ( "inJahr1" ) ; // HtmlSelect Object
51- option = select . getOptionByValue ( startyear ) ;
52- select . setSelectedAttribute ( option , true ) ;
53-
54- select = page . getElementByName ( "inMonat1" ) ; // HtmlSelect Object
55- option = select . getOptionByValue ( startmon ) ;
56- select . setSelectedAttribute ( option , true ) ;
57-
58- select = page . getElementByName ( "inTag1" ) ; // HtmlSelect Object
59- option = select . getOptionByValue ( startday ) ;
60- select . setSelectedAttribute ( option , true ) ;
61-
62-
63- select = page . getElementByName ( "inJahr2" ) ; // HtmlSelect Object
64- option = select . getOptionByValue ( stopyear ) ;
65- select . setSelectedAttribute ( option , true ) ;
66-
67- select = page . getElementByName ( "inMonat2" ) ; // HtmlSelect Object
68- option = select . getOptionByValue ( stopmon ) ;
69- select . setSelectedAttribute ( option , true ) ;
70-
71- select = page . getElementByName ( "inTag2" ) ; // HtmlSelect Object
72- option = select . getOptionByValue ( stopday ) ;
73- select . setSelectedAttribute ( option , true ) ;
74- return liste ;
75- } ;
30+ return "Finanzen.net" ;
31+ }
7632
77- function process ( config ) {
33+ function prepare (
34+ fetch ,
35+ search ,
36+ startyear ,
37+ startmon ,
38+ startday ,
39+ stopyear ,
40+ stopmon ,
41+ stopday
42+ ) {
43+ fetcher = fetch ;
44+
45+ wc = fetcher . getWebClient ( true ) ;
46+ wc . getOptions ( ) . setThrowExceptionOnFailingStatusCode ( false ) ;
47+ Packages . de . willuhn . logging . Logger . debug ( "load http://www.finanzen.net/suchergebnis.asp?frmAktiensucheTextfeld=" + search ) ;
48+ page = wc . getPage (
49+ "http://www.finanzen.net/suchergebnis.asp?frmAktiensucheTextfeld=" + search
50+ ) ;
51+
52+ try {
53+ Packages . de . willuhn . logging . Logger . debug ( "suche Link Kurse" ) ;
54+ links = page . getAnchorByText ( "Kurse" ) ;
55+ page = links . click ( ) ;
56+ Packages . de . willuhn . logging . Logger . debug ( "suche Select historic-prices-stock-market" ) ;
57+ boerseSelect = page . getElementById ( "historic-prices-stock-market" ) ;
58+ Packages . de . willuhn . logging . Logger . debug ( "suche Button request-historic-price" ) ;
59+ searchButton = page . getElementById ( "request-historic-price" ) ;
60+
61+ input = page . getElementById ( "fromDate" ) ;
62+ input . setValue ( input . getMin ( ) ) ;
63+
64+ input = page . getElementById ( "toDate" ) ;
65+ input . setValue ( input . getMax ( ) ) ;
66+ } catch ( e ) {
67+ try {
68+ Packages . de . willuhn . logging . Logger . debug ( "suche Link historische Kurse" ) ;
69+ links = page . getAnchorByText ( "Historische Kurse" ) ;
70+ page = links . click ( ) ;
71+ } catch ( error ) {
72+ Packages . de . willuhn . logging . Logger . debug ( "suche Link Kurse & Realtime" ) ;
73+ links = page . getAnchorByText ( "Kurse & Realtime" ) ;
74+ page = links . click ( ) ;
75+ Packages . de . willuhn . logging . Logger . debug ( "suche Link historische Kurse" ) ;
76+ links = page . getAnchorByText ( "Historische Kurse" ) ;
77+ page = links . click ( ) ;
78+ }
79+ Packages . de . willuhn . logging . Logger . debug ( "suche Select strBoerse" ) ;
80+ boerseSelect = page . getElementByName ( "strBoerse" ) ;
81+ Packages . de . willuhn . logging . Logger . debug ( "suche search-Button" ) ;
82+ searchButton = boerseSelect . getFirstByXPath ( "../../div/button" ) ;
83+
84+ input = page . getElementByName ( "dtDate1" ) ;
85+ input . setValue ( input . getMin ( ) ) ;
86+
87+ input = page . getElementByName ( "dtDate2" ) ;
88+ input . setValue ( input . getMax ( ) ) ;
89+ }
90+
91+ var liste = new ArrayList ( ) ;
92+ if ( ! page ) {
93+ Packages . de . willuhn . logging . Logger . error ( "Konnte Kurse Link nicht finden" ) ;
94+ } else {
95+ // Handelsplätze extrahieren
96+
97+ var cfg = new Packages . jsq . config . Config ( "Handelsplatz" ) ;
98+ var listeHandelsplaetze = boerseSelect . getOptions ( ) ; // List of HtmlOption
99+ for ( var i = 0 ; i < listeHandelsplaetze . size ( ) ; i ++ ) {
100+ var platz = listeHandelsplaetze . get ( i ) ;
101+ cfg . addAuswahl ( platz . getText ( ) , platz . getValueAttribute ( ) ) ;
102+ }
103+ liste . add ( cfg ) ;
104+ }
105+
106+
107+ return liste ;
108+ }
78109
79- select = page . getElementByName ( "strBoerse" ) ; // HtmlSelect Object
80- option = select . getOptionByValue ( config . get ( 0 ) . getSelected ( ) . get ( 0 ) . getObj ( ) ) ;
81- select . setSelectedAttribute ( option , true ) ;
82-
83- buttons = page . getByXPath ( "//div[@class='button']" ) ;
84- page = buttons . get ( 0 ) . click ( ) ;
85- wc . waitForBackgroundJavaScript ( 20000 ) ;
86- tab = getElementByStartText ( page . getByXPath ( "//table" ) , "Datum" ) ;
87- list = Packages . jsq . tools . HtmlUnitTools . analyse ( tab ) ;
88-
89- var res = new ArrayList ( ) ;
90- for ( i = 0 ; i < list . size ( ) ; i ++ ) {
91- hashmap = list . get ( i ) ;
92- if ( hashmap . get ( "Schluss" ) . equals ( "-" ) ) { // happens for the current day
93- continue ;
94- }
95- var dc = new Packages . jsq . datastructes . Datacontainer ( ) ;
96- dc . put ( "date" , Packages . jsq . tools . VarTools . parseDate ( hashmap . get ( "Datum" ) , "dd.MM.yyyy" ) ) ;
97- dc . put ( "first" , Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat ( hashmap . get ( "Eröffnung" ) ) ) ;
98- dc . put ( "last" , Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat ( hashmap . get ( "Schluss" ) ) ) ;
99- dc . put ( "low" , Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat ( hashmap . get ( "Tagestief" ) ) ) ;
100- dc . put ( "high" , Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat ( hashmap . get ( "Tageshoch" ) ) ) ;
101- dc . put ( "currency" , "EUR" ) ;
102- res . add ( dc ) ;
103- }
104- fetcher . setHistQuotes ( res ) ;
105- } ;
106-
107- function getElementByStartText ( elements , search ) {
108- for ( var i = 0 ; i < elements . size ( ) ; i ++ ) {
109- var e = elements . get ( i ) ;
110- if ( e . asText ( ) . substring ( 0 , search . length ) == search ) {
111- return e ;
112- }
113- }
114- return null ;
110+ function process ( config ) {
111+ var res = new ArrayList ( ) ;
112+ var currency = "EUR" ;
113+ var boerse = "" ;
114+ for ( i = 0 ; i < config . size ( ) ; i ++ ) {
115+ var cfg = config . get ( i ) ;
116+ for ( j = 0 ; j < cfg . getSelected ( ) . size ( ) ; j ++ ) {
117+ var o = cfg . getSelected ( ) . get ( j ) ;
118+ if ( cfg . getBeschreibung ( ) . equals ( "Handelsplatz" ) ) {
119+ boerse = o . getObj ( ) . toString ( ) ;
120+ } /* else if (cfg.getBeschreibung().equals("waehrung")) {
121+ currency = o.getObj().toString();
122+ }*/
123+ }
124+ }
125+
126+ if ( ! boerseSelect ) {
127+ Packages . de . willuhn . logging . Logger . error ( "Börsenauswahl nicht gefunden" ) ;
128+ } else {
129+ option = boerseSelect . getOptionByValue ( boerse ) ;
130+ boerseSelect . setSelectedAttribute ( option , true ) ;
131+ }
132+
133+ page = searchButton . click ( ) ;
134+ wc . waitForBackgroundJavaScript ( 10000 ) ;
135+ tab = Packages . jsq . tools . HtmlUnitTools . getTableByPartContent ( page , "Datum" ) ;
136+ if ( ! tab ) {
137+ Packages . de . willuhn . logging . Logger . error ( "Börsenauswahl nicht gefunden" ) ;
138+ } else {
139+ list = Packages . jsq . tools . HtmlUnitTools . analyse ( tab ) ;
140+ Packages . de . willuhn . logging . Logger . info ( list . size ( ) + " Kurse gefunden" ) ;
141+
142+
143+ for ( i = 0 ; i < list . size ( ) ; i ++ ) {
144+ try {
145+ hashmap = list . get ( i ) ;
146+ last = hashmap . get ( "Schluss" ) ;
147+ if ( ! last || last . equals ( "-" ) ) {
148+ // happens for the current day
149+ continue ;
150+ }
151+ var dc = new Packages . jsq . datastructes . Datacontainer ( ) ;
152+ dc . put (
153+ "date" ,
154+ Packages . jsq . tools . VarTools . parseDate (
155+ hashmap . get ( "Datum" ) ,
156+ "dd.MM.yyyy"
157+ )
158+ ) ;
159+ dc . put (
160+ "first" ,
161+ Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat (
162+ hashmap . get ( "Eröffnung" ) || ""
163+ )
164+ ) ;
165+ dc . put (
166+ "last" ,
167+ Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat ( last )
168+ ) ;
169+ dc . put (
170+ "low" ,
171+ Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat (
172+ hashmap . get ( "Tagestief" ) || ""
173+ )
174+ ) ;
175+ dc . put (
176+ "high" ,
177+ Packages . jsq . tools . VarTools . stringToBigDecimalGermanFormat (
178+ hashmap . get ( "Tageshoch" ) || ""
179+ )
180+ ) ;
181+ dc . put ( "currency" , currency ) ;
182+ res . add ( dc ) ;
183+ } catch ( error ) {
184+ Packages . de . willuhn . logging . Logger . error ( "Fehler beim Kurse auslesen: " + error + "\n" + hashmap ) ;
185+ }
186+ }
187+ }
188+ fetcher . setHistQuotes ( res ) ;
115189}
116190
117191function search ( fetch , search ) {
118- fetcher = fetch ;
119-
120- wc = fetcher . getWebClient ( true ) ;
121- page = wc . getPage ( "http://www.finanzen.net/suchergebnis.asp?frmAktiensucheTextfeld=" + search ) ;
122-
192+ fetcher = fetch ;
193+
194+ wc = fetcher . getWebClient ( true ) ;
195+ page = wc . getPage (
196+ "http://www.finanzen.net/suchergebnis.asp?frmAktiensucheTextfeld=" + search
197+ ) ;
123198}
0 commit comments