Skip to content

Commit f0a8429

Browse files
committed
Fix von finanzen.net und portfolioreport #13
1 parent 4e2d40f commit f0a8429

3 files changed

Lines changed: 197 additions & 112 deletions

File tree

docs/index.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,18 @@
1717
```
1818
- Jameica neu starten
1919
20+
## Finanzen.net
21+
22+
- [finanzennet.js](https://raw.githubusercontent.com/faiteanu/JavaStockQuotes/master/js/finanzennet.js) (zuletzt geändert 18.01.2025)
23+
herunterladen und unter Windows speichern unter
24+
`C:\Users\{USERNAME}\.jameica\hibiscus.depotviewer\js`
25+
Unter Linux das entsprechende Benutzer-Verzeichnis wählen.
26+
27+
- Jameica neu starten
28+
2029
## PortfolioReport
2130
22-
- [portfolioreport.js](https://raw.githubusercontent.com/faiteanu/JavaStockQuotes/master/js/portfolioreport.js) (zuletzt geändert 17.12.2024)
31+
- [portfolioreport.js](https://raw.githubusercontent.com/faiteanu/JavaStockQuotes/master/js/portfolioreport.js) (zuletzt geändert 18.01.2025)
2332
herunterladen und unter Windows speichern unter
2433
`C:\Users\{USERNAME}\.jameica\hibiscus.depotviewer\js`
2534
Unter Linux das entsprechende Benutzer-Verzeichnis wählen.

js/finanzennet.js

Lines changed: 175 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,123 +1,198 @@
1+
// Script for Hibiscus Depot Viewer
2+
// Updated 03.01.2025 by @dirkhe
3+
// Updated 18.01.2025 by @dirkhe - Logging added
14

25
var ArrayList = java.util.ArrayList;
36

4-
var fetcher;
7+
var fetcher;
58
var wc;
6-
9+
var boerseSelect;
10+
var searchButton;
11+
//var tablePath;
712

813
function getAPIVersion() {
9-
return "1";
14+
return "1";
1015
}
1116

1217
function getVersion() {
13-
return "2014-06-25";
18+
return "2025-01-18";
1419
}
1520

1621
function 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

2025
function getURL() {
21-
return "http://www.finanzen.net";
22-
};
23-
26+
return "http://www.finanzen.net";
27+
}
2428

2529
function 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

117191
function 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
}

js/portfolioreport.js

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
// Script for Hibiscus Depot Viewer
22
// Original version by b3nn0
33
// Updated 17.12.2024 by dirkhe and faiteanu
4+
// Updated 18.01.2025 by dirkhe
45

56
var ArrayList = java.util.ArrayList;
67
var Logger = Packages.de.willuhn.logging.Logger;
78

8-
var fetcher;
9+
var fetcher;
910
var webClient;
1011

1112

@@ -16,7 +17,7 @@ function getAPIVersion() {
1617
};
1718

1819
function getVersion() {
19-
return "2024-12-17";
20+
return "2025-01-18";
2021
};
2122

2223
function getName() {
@@ -35,16 +36,16 @@ function prepare(fetch, search, startyear, startmon, startday, stopyear, stopmon
3536
s = search;
3637
y1 = startyear; m1 = startmon; d1 = startday;
3738
y2 = stopyear; m2 = stopmon; d2 = stopday;
38-
39+
3940
var cfgliste = new ArrayList();
40-
41+
4142
// Währung
4243
var currencies = new Packages.jsq.config.Config("Waehrung");
4344
currencies.addAuswahl("EUR", new String("waehrung"));
4445
currencies.addAuswahl("USD", new String("waehrung"));
4546

4647
cfgliste.add(currencies);
47-
48+
4849
return cfgliste;
4950
}
5051

@@ -55,13 +56,13 @@ function process(config) {
5556
var cfg = config.get(i);
5657
for (j = 0; j < cfg.getSelected().size(); j++) {
5758
var o = cfg.getSelected().get(j);
58-
if (o.getObj().toString().equals("waehrung")) {
59-
currency = o.toString();
60-
}
59+
if (cfg.getBeschreibung().equals("waehrung")) {
60+
currency = o.toString();
61+
}
6162
}
6263
}
63-
64-
var webClient = fetcher.getWebClient(false);
64+
65+
var webClient = fetcher.getWebClient(false);
6566

6667
var page = webClient.getPage("https://api.portfolio-report.net/v1/securities/search?q=" + s);
6768
var json = JSON.parse(page.getWebResponse().getContentAsString());
@@ -82,7 +83,7 @@ function process(config) {
8283
dc.put("currency", currency);
8384
dc.put("date", Packages.jsq.tools.VarTools.parseDate(price["date"], "yyyy-MM-dd"));
8485
dc.put("last", Packages.jsq.tools.VarTools.stringToBigDecimal(price["close"]));
85-
86+
8687
//dc.put("first", Packages.jsq.tools.VarTools.stringToBigDecimal(record.get("Open")));
8788
//dc.put("last", Packages.jsq.tools.VarTools.stringToBigDecimal(price["close"]));
8889
//dc.put("low", Packages.jsq.tools.VarTools.stringToBigDecimal(record.get("Low")));

0 commit comments

Comments
 (0)