Dynamische Kursdaten-URLs

Hört sich gut an. Funktioniert das auch mit onvista?

https://www.onvista.de/onvista/times+sales/popup/historische-kurse/?notationId=3193857&dateStart=08.05.2018&interval=Y1&assetName=MSCI%20WORLD%20&exchange=außerbörslich

als Vorlage, daraus wird

https://www.onvista.de/onvista/times+sales/popup/historische-kurse/?notationId=3193857&dateStart={DATE:31.MM.yyyy}&interval=Y1&assetName=MSCI%20WORLD%20&exchange=außerbörslich

??? Der zweite Link ist natürlich so nicht aufrufbar, in PP geht es aber auch nicht.

Was habe ich noch nicht verstanden?

1 Like

Hallo @ProgFriese und Danke fürs Testen!

Das (und die Berichterstattung hier natürlich) sind in der Softwareentwicklung unerlässlich.

Ich habe es bei mir getestet und mir ist folgendes aufgefallen:

  1. Du hast den 31. Tag des Monats pauschal angesetzt. Bitte versuche in solchen Fällen immer zuerst den 32… (Warum: siehe meinen Beitrag weiter oben)
  2. Du verwendest Monats-basierende URLs, aber lässt Dir Daten für je ein Jahr mitgeben. Macht meiner Meinung nach wenig Sinn. Besser: {DATE:31.12.yyyy} + 1Y
  3. Wenn ich den zweiten Link mit rechter Maustaste kopiere und in TextEdit einfüge, wird er beschädigt: …&dateStart=%7BDATE:31.MM.yyyy%7D&… mit %7B %7D funktioniert das natürlich nicht, { } sind bindend – damit geht es dann auch (bei mir, PP 0.32.0, MacOS X).

MfG, AK

Faszinierend!

Mit https://www.onvista.de/onvista/times+sales/popup/historische-kurse/?notationId=3193857&dateStart={DATE:31.12.yyyy}&interval=Y1&assetName=MSCI%20WORLD%20&exchange=außerbörslich bekommt man beim Editieren des Links Daten zurück bis 1970, obwohl es bei onvista ja ein Startdatum ist. In den daraus resultierenden historischen Kursdaten sind diese 1970er-Werte nicht vorhanden.

Verstanden habe ich es noch nicht - aber es wirkt :wink:

Das war ich nicht. Foren-URL-Encoding oder so etwas, egal.

1 Like

Wo auf der Seite hast du denn diesen Link gefunden? Was kann man hinter exchange= angeben?

Ganz toll wären weitere Macros für {WKN} oder {ISIN}, und auch wenn man in der dynamischen URL bei onvista nach ISIN suchen kann. Dann brauchte PP am Ende nur noch eine globale Default URL.

Ich finde auf onvista.de unten bei Historische Kurse nur die Links “CSV runterladen” und “Druckansicht”.
CSV-URLs wäre als Import für PP auch nicht schlecht, anstelle von HTML parsen wäre das wohl auch stabiler.

Die Druckansicht wird aber auch erfolgreich gelesen von PP, die URL ist seltsam lang, geht aber::
https://www.onvista.de/derivative/snapshotHistoryPrint?idNotation=148153411&datetimeTzStartRange=01.12.2017&datetimeTzLastRange=06.07.2018&exchange=Emittent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Emittent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Emittent&codeResolution=1D

Wie würde ich hier mit dem {DATE} Macro arbeiten? StartRange kann ich ja fix auf 01.01.2010 setzen, das LastRange müsste aber dynamisch das heutige Datum sein. 2 Macros in der URL sind ja laut Dokumentation nicht möglich.

Ich habe die Doku nicht gelesen und schon gar nicht geschrieben – obwohl ich diese Funktion initiiert und entwickelt habe. Umso genauer kann ich darüber Auskunft geben, wie das ganze (tatsächlich) funktioniert:

Du kannst soviele Makros angeben wie Dein Arbeitsspeicher reicht (ich bin mal schnell bei Amazon… :wink:), aber Du darfst nicht verschiedene Arten von Makros mischen. D.h. https://192.0.2.1/?start={DATE:01.01.yyyy}&end={DATE:31.12.yyyy} geht (und sollte auf Deinen Fall übertragbar sein), aber bei https://192.0.2.1/?start={DATE:01.01.yyyy}&end={DATE:31.12.yyyy}&p={PAGE} ist Schluss mit lustig.

Hintergrund:

  1. Meine bodenlose Faulheit :wink:
  2. Meiner Vermutung nach sehr unwahrscheinlicher Mischbetrieb auf Seite der Kurslieferanten (ggf. wären im Einzelfall Workarounds i.d. URL möglich)

Bloß nicht! Damit belastest Du den Anbieter unverhältnismäßig ohne dass es Dir etwas bringt. Meine persönichte Empfelhung:

  1. Vorzugsweise https://192.0.2.1/?start={DATE:01.MM.yyyy}&end={DATE:32.MM.yyyy}
  2. Als Fallback https://192.0.2.1/?start={DATE:01.01.yyyy}&end={DATE:31.12.yyyy}
  3. Auf keinen Fall mit variablem Tag! Dafür gibts gerne mal 10 Jahre und ein Stück Seife.
1 Like

Hmm… Je mehr ich darüber nachdenke, desto besser gefällt mir die Idee… ich habe es mir mal auf die ToDo-Liste gesetzt. Aber bevor ich das einbaue, wüsste ich gerne (von Leuten, die sich mit einigen representativen Kurslieferanten rumschlagen), ob diese Art der URL-Variation so verbreitet und auch wirklich so einfach ist – und diese Funktion damit verhältnismäßig ist. Gegenbeispiel: boerse.de

1 Like

OK… habe nichts gesagt: Diese künstlich aufgeblähten URLs…

https://www.boerse.de/historische-kurse/Discount-Zertifikat-auf-Daimler-BNP-Paribas-Emissions-und-Handelsges-/DE000PP748L6

… lassen sich auch willkürlich abkürzen:

https://www.boerse.de/historische-kurse/DZ/DE000PP748L6

Das gleiche bei OnVista.

Das ist dann wohl falsch. Man kann mehrere Marcos in der URL verwenden - aber immer nur von einem Typ. Wobei ich mir den aktuellen PR noch nicht im Detail angeschaut habe: vielleicht ändert sich das mit den weiteren Marcos.

Oben rechts gibt es :writing_hand: Edit Link. Die Dokumentation ist einfach ein anderes GitHub Projekt.

Neuerdings kannst Du die Typen auch durchmischen, wichtig ist nur, dass Du nicht mehr als einen “uneingeschränkt variablen” Typ hast (DATE + PAGE, die mit Macro#getVariableURLConstructor() != null). Das Problem ist, dass diese fortlaufend iterieren und Du (AFAIK) mehrere unbeschränkte Iterationen nicht sinnvoll zusammenlegen kannst.

Yahoo findet bei manchen Werten einfach nichts auch wenn es ein Kürzel gibt, wie bei diesem:
AT0000746748
IWTQ.F
676337

Daher überlege ich bereits, alle Werte von ariva zu nehmen.

Soweit ich das nun verstanden habe, wäre die passende URL:
https___www.ariva.de/espa_stock_biotec_a_%28eur%29-fonds/historische_kurse?boerse_id=8&month={DATE:yyyy-MM-32}
(Das Forum hat mir nicht erlaubt, den Link zu posten, daher musste ich ihn etwas abwandeln…)

Über boerse_id kann man bequem den Handelsplatz wählen.
Warum war nun das Format yyy-MM-32 ideal? Warum nicht 31 und warum überhaupt nicht -dd?
Wenn die Dokumentation nun in diesem Punkt noch aktuell ist, wird er beim ersten Mal rückwärts alle Kurse abrufen, bis keine mehr kommen. Das ist teuer für den Anbieter. Beim nächsten Mal würde er nur noch vom letzten vorhandenen Kurs aufwärts bis zum aktuellen Datum abrufen, also nur noch die fehlenden?

Kann man die URL der /historischen_kurse bei ariva nun auch beim Tab “Aktueller Kurs” verwenden, oder wird hier immer der aktuelle Kurs fehlen?

Hallo @Mssm und danke für Deine kritischen Fragen! (Heutzutage ist sowas Mangelware…)

Die Empfehlungen bzgl. des 32. und konstanten Monatstags in der Doku (die ich mittlerweile gelesen habe) hat Andreas von mir übernommen. Ich selbst habe sie aus folgendem Grund abgegeben:

Den klassischen Nutzer interessieren weder die Programm-Abläufe, noch die Konsequenzen, sondern nur, dass es geht – einmal eine URL zusammenbauen und fertig! Deshalb habe ich mir diese Empfehlungen überlegt, aus denen eine URL hervorgeht, die alles abdeckt:

  • Keine Daten vorhanden, gib mir alles
  • Habe die letzten 10 Jahre PP nicht aufgemacht (Alzheimer/Koma/JVA/…), gib mir ein Update
  • Habe PP erst gestern aufgemacht, bin ein aktiver Anleger

In den ersten 2 Fällen wäre eine tagesbasierte URL eine 30x größere Last für den Anbieter und 30x längere Wartezeit für den Nutzer als eine monatsbasierte. Im letzten Fall macht es nicht sonderlich viel aus, da manche auch mal gerne wöchentlich aktualisieren. Und selbst wenn nicht, macht es wenig aus, ob Du Dir nur den Kurs von gestern oder für 31 Tage holst. Die 31-Tage-Abfrage ist bei den Anbietern Standard. Wenn man das Intervall bspw. auf ein Jahr anhebt (sofern überhaupt vom Anbieter unterstützt), nützt das zwar in den Fällen 1 und 2, aber schadet im 3…

Und den Hintergrund zum 32. Monatstag… hat Andreas bereits hinreichend in der Doku zitiert.

Aktuelle Kurse: keine Ahnung, habe mich nie mit denen beschäftigt.

MfG, AK

@AndreasB Lass mich raten, TODAY ist für die altuellen Kurse?

Hallo @Al2Klimov, vielen Dank für diese Erweiterung, ich nutze die dynamische Kurs-URL sehr intensiv. Leider ist es mir bislang nicht gelungen, auch die isin oder wkn in der Kursabfrage zu eresetzen:
https://www.ariva.de/851399/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&clean_split=1&clean_split=0&clean_payout=0&clean_bezug=1&clean_bezug=0
und
https://www.ariva.de/US4592001014/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&clean_split=1&clean_split=0&clean_payout=0&clean_bezug=1&clean_bezug=0
funktionieren super für die IBM Kurse, aber
https://www.ariva.de/{isin}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&clean_split=1&clean_split=0&clean_payout=0&clean_bezug=1&clean_bezug=0
oder
https://www.ariva.de/{wkn}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&clean_split=1&clean_split=0&clean_payout=0&clean_bezug=1&clean_bezug=0
funktionieren nicht.
habe isin, ISIN, wkn und WKN versucht.
Mache ich etwas falsch oder funktionieren die Macros so nicht? Wäre echt toll, wenn dies irgendwie klappen würde!
Danke für die tolle Arbeit bisher,
Udo

Ich versuche die Frage noch einmal etwas kürzer:
https://www.ariva.de/851399/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}
funktioniert, aber
https://www.ariva.de/{wkn}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}
funktioniert bei mir nicht.
Sind {wkn} / {isin} bzw. {WKN} / {ISIN} in der Kurs-URLs für historische Kurse erlaubt?
Wäre für jeden Tipp dankbar!
Udo

Also wenn ISIN oder WKNgroß geschrieben werden, funktioniert es bei mir. Nur bei ARIVA funktioniert bei mir keiner deiner Links. Ursache dürfte sein, das PP die direkte URL erwartet und ARIVA eine Weiterleitung auf ᐅ IBM Historische Kurse | Historische Werte | ARIVA.DE vornimmt, damit rechnet PP mE nicht.

Habe mal rumgestöbert und das Fehlerprotokoll gefunden :wink:

Für die URL:

https://www.ariva.de/{ISIN}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&currency=EUR&clean_split=1&clean_payout=0&clean_bezug=1

habe ich folgendes Fehlerprotokoll gefunden:

Wed Jan 16 12:57:07 CET 2019
Während “ABInBev” ist ein interner Fehler aufgetreten.

java.lang.NullPointerException

at name.abuchen.portfolio.online.impl.variableurl.macros.ISIN.resolve(ISIN.java:17)

at name.abuchen.portfolio.online.impl.variableurl.iterators.DateIterator.resolve(DateIterator.java:80)

at name.abuchen.portfolio.online.impl.variableurl.iterators.DateIterator.hasNext(DateIterator.java:41)

at java.util.Iterator.forEachRemaining(Unknown Source)

at name.abuchen.portfolio.online.impl.variableurl.urls.DateURL.(DateURL.java:22)

at name.abuchen.portfolio.online.impl.variableurl.Factory.fromString(Factory.java:103)

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.internalGetQuotes(HTMLTableQuoteFeed.java:315)

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.updateHistoricalQuotes(HTMLTableQuoteFeed.java:289)

at name.abuchen.portfolio.ui.jobs.UpdateQuotesJob$2.run(UpdateQuotesJob.java:269)

at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Vielleicht hilft das ja weiter…

Wenn ich eine URL habe, wo bei den Variablen ?isin={ISIN} auftaucht wird {ISIN} aufgelöst.
Vielleicht funktioniert das nur in der Serveradresse nicht?? Wenn ich da ein eigenes Attribut einsetze gibt es folgende Fehlermeldung:
hatte 3m_company-aktie in tickerSymbol eingetragen, also den Wert, den Ariva in der URL ersetzt.

Illegal character in path at index 21: https://www.ariva.de/{tickerSymbol}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&currency=EUR&clean_split=1&clean_payout=0&clean_bezug=1

java.io.IOException: https://www.ariva.de/{tickerSymbol}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&currency=EUR&clean_split=1&clean_payout=0&clean_bezug=1
Illegal character in path at index 21: https://www.ariva.de/{tickerSymbol}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&currency=EUR&clean_split=1&clean_payout=0&clean_bezug=1

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.parseFromURL(HTMLTableQuoteFeed.java:369)

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.internalGetQuotes(HTMLTableQuoteFeed.java:328)

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.updateHistoricalQuotes(HTMLTableQuoteFeed.java:289)

at name.abuchen.portfolio.ui.jobs.UpdateQuotesJob$2.run(UpdateQuotesJob.java:269)

at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Caused by: java.net.URISyntaxException: Illegal character in path at index 21: https://www.ariva.de/{tickerSymbol}/historische_kurse?boerse_id=1&month={DATE:yyyy-MM-32}&currency=EUR&clean_split=1&clean_payout=0&clean_bezug=1

at java.net.URI$Parser.fail(Unknown Source)

at java.net.URI$Parser.checkChars(Unknown Source)

at java.net.URI$Parser.parseHierarchical(Unknown Source)

at java.net.URI$Parser.parse(Unknown Source)

at java.net.URI.(Unknown Source)

at name.abuchen.portfolio.online.impl.HTMLTableQuoteFeed.parseFromURL(HTMLTableQuoteFeed.java:362)

… 4 more

Ich kann den Bug nachvollziehen. Aktuell kann man das DATE Makro nicht zusammen mit einem “Wertpapier” Makro (ISIN, TICKER, …) mischen. Das behebe ich.

(BTW, für die Markos gibt es eine Seite in der (noch) überschaubaren Hilfe - es heißt TICKER und nicht tickerSymbol)