Dynamische Kursdaten-URLs

Seid gegrüßt, edle Kapitalisten!

Manche Seiten machen es einem aber auch echt nicht einfach, massenhaft Kursdaten zu beziehen. So nach dem Motto: Man kann nicht alles haben. So auch die hier genannte Ariva.

Und manche Leute betteln nicht um neue (unentgeltliche) Features, sondern bauen sie selbst ein. So auch ich.

Sowohl das Problem, als auch meine Lösung habe ich hier veranschaulicht.
Edit: Verbesserte Version gibts hier.

Ich würde mich über Feedback freuen (nicht unterm Video, sondern hier), da ich damit werde besser beurteilen können, ob ich das ganze noch rund schleifen und einreichen soll, oder ob das kein Mensch braucht.

MfG, AK

Hallo AK,

danke für den Tip, leider stimmt bei deinem Video etwas mit der Tonspur nicht, man hört nur Musik und keine Erklärung. Dann wäre es natürlich toll, hier deine Beispiel URLs als kopierbaren Text zu bekommen.

Ich mache das mal:

▷ Goldpreis aktuell | Goldspot Realtime | Goldkurs heute | Ariva.de

https://www.ariva.de/goldpreis-gold-kurs/historische_kurse?boerse_id=130&month=%{LAST+28:yyyy-MM-dd|LITERAL:2010-01-31}&currency=EUR&clean_split=1&clean_split=0&clean_payout=0&clean_bezug=1&clean_bezug=0

Die dynamische URL funktioniert bei mir allerdings nicht!
Mir bleibt auch der Vorteil gegenüber der simplen Eingabe des yahoo-Symbols (noch) verborgen.

Viele Grüße aus dem Süden

Thomas

Ich habe historische Kursdaten meistens für Optionsscheine verwendet und mich über die zeitliche Limitierung geärgert. Der Work-around die Kurse manuell zu laden und zu importieren ist mühselig.
Dann darf man regelmäßig PP öffnen und nicht zu lange warten mit dem Aktualisieren sonst hat man eine Lücke. Wenn ich richtig verstehe, wären mit deiner Lösung diese Probleme passé. :heart_eyes:

Aktuell gibt es mal wieder Probleme mit Yahoo; soweit ich weiß werden von dort Tagesschlußkurse geladen. Wenn ich nun mit deinem dynamischen Konzept alle Wertpapiere auf Ariva historisch umstellen würde, könnte das eine evlt. praktikable Lösung sein!? :+1:

@Al2Klimov hat den Source Code geändert damit das funktioniert.

1 Like

Ja, @maxlrain, genau solche Lücken hätten mich im Falle von Gold treffen können. Was mir gerade auffällt: So ganz 100%ig habe ich das auch nicht zugekleistert:

  1. Ariva nimmt blöderweise 2018-03-31 und nicht 2018-03. Somit kommt es leider auf den Tag des Monats an. Den kannst Du zum Glück auch pauschal mit 32 ansetzen. Also yyyy-MM-32 statt yyyy-MM-dd!
  2. Ariva nimmt von einem solchen Datum nicht die letzten 30 Tage, sondern den Monat. Da kann es passieren, dass Du heute (25.) aktualisierst und in einem Monat verpasst Du 26.-31…

Ich habe schon eine Vorstellung, wie man dem beikommen könnte… (ich melde mich wieder wenn es soweit ist)

1 Like

Moin, da bin ich wieder!

Habe das ganze mal etwas vereinfacht und zugleich flexibilisiert: https://youtu.be/WCukm_z8o7w
(Diesmal mit “richtiger” Tonspur, für Leute, die lieber meine Stimme hören als Disco Lounge Mukke.)

Du, @maxlrain, hast Dich ja schon positiv geäußert – jetzt braucht es nur noch grünes Licht von Großmeister @AndreasB.

PS: Es ginge auch %{PAGE}, sequenziert von 1 bis… es nichts neues mehr gibt.

1 Like

Die Idee ist wirklich cool, ich würde es sogar direkt als Pull Andreas vorschlagen. Dann könnte er auch gleich die Auswirkungen auf den Sourcecode sehen und Tipps geben.

Ein/zwei Frage hätte ich da noch. Wiederholt dieses Feature eigentlich dann bei jedem Programmstart die vollständige Schleife über die letzten Jahre oder werden nach dem ersten vollem Download nur noch Lücken aufgefüllt? Wie verhält es sich wenn bereits Kurse vorhanden sind, werden diese dann überschrieben? Und, lässt sich der Zeitraum eingrenzen?

Schöne Grüße
Marco

Klar - push mal einen PR auf Github, dann können wir schauen wie wir das einbauen. Ich habe auch schon mal überlegt, ob man Platzhalter eingeben kann. Die Platzhalter oben habe ich noch nicht ganz verstanden - es sieht mir so aus als würden mehrere Abfragen gemacht?

Auf jeden Fall habe ich beim Kurs-Download auch das Datum des letzten historischen Kurses. Je nachdem könnte man die URL auch anpassen. Zum Beispiel sowas wie {lastHistoricalDate-1d;yyyy-MM-dd} könnte das in dem angegeben Format einfügen.

2 Likes

Das ist noch untertrieben. Hier habe ich es erklärt.

PR gibts heut Abend. Ciao mit V.

So, noch einmal überflogen, ob das auch passt und… bitteschön.

Moin an alle die hier noch mitlesen!

Danke noch einmal für das positive Feedback bezogen auf den Grundsatz / die Idee.
Mittlerweile habe ich Seite an Seite mit Großmeister Andreas getüftelt… und er hat ein Machtwort gesprochen:

Ich nehme die Change mit rein. Vermutlich nächstes Wochenende werde ich eine neue Version bauen und veröffentlichen.

:tada: :tada: :tada:

Nun heißt es nicht mehr %{DATE:yyyy-MM-32} oder %{PAGE}, sondern {DATE:yyyy-MM-32} oder {PAGE}.
Nachdem ich diesen Post hier fertig habe, mache ich mich an die Tests und dann… heißt es eigentlich nur noch abwarten. :star_struck:

Und eine Sache vielleicht noch: Wenn ihr euch und anderen hier einen Gefallen tun wollt, nehmnt doch bitte bspw. bei so krummen Monatsangaben wie bei Ariva, JJJJ-MM-{letzter Tag} aus Prinzip yyyy-MM-32 und nicht etwa 31. Aus eigener Erfahrung u.a. als Berufsprogrammierer kann ich dieses “Ausreiz-Prinzip” vielerseits empfehlen: Entweder es fährt alles “gegen die Wand” (den 32. Monatstag gibts so nicht) oder alles funktioniert – aber bitteschön kein inkonsistenter Zustand dazwischen!

Genug geschrieben, jetzt heißt es: weiter tüfteln.
Ich bin raus, euer Klaus.

4 Likes

Mit Version 0.32.0 sind die dynamischen Macros jetzt drin.

Und es gibt auch ein bisschen Dokumentation.

1 Like

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.