Strommarktdaten automatisch downloaden

Für allgemeine Fragen zur Programmierung mit PureBasic.
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Strommarktdaten automatisch downloaden

Beitrag von SMaag »

unter smard.de kann man die Strommarktdaten herunterladen. Man muss aber zuerst einiges auswählen, bis man zur richtigen Datei kommt.
https://www.smard.de/home/downloadcente ... arktdaten/

Die Frage ist, wie man das mit PB automatisiert?
Ich hab leider mit dem http und ftp Funktionen von PB noch nie gearbeitet.

Ich vermute aber mal, dass es hier ein paar Profis dazu gibt, die genau wissen wie das geht.

Hintergrund ist, die Daten dann einer Industrie SPS zur Verfügung zu stellen um.

Hier ein Forums-Thread aus dem SPS-Forum wo das diskutiert wird.
Da ich das wohl selbst in Zukunft brauchen könnte, bin ich schon wieder dabei!
https://www.sps-forum.de/threads/stromm ... en.116959/

Alo hat jedmand eine Beispielcode wie man das runterläd?
evtl. sogar mit einer kleinen GUI, wo man was auswählen kann


Mein Problem ist schon mal, dass ich gar nicht an einen entsprechenden Pfad komme, den man verwenden könnte,
da man die ganzen Filter manuell anwählen muss.

Da einen anderen Link automatisch zusammenbasteln bring ich selbst auf die Reihe.
Übertragung an die SPS ist für mich auch kein Problem!


Ergänzung:
es gibt einn offiziellen Python api client. Ich versteh da aber nur 'Bahnhof'!
https://github.com/bundesAPI/smard-api/ ... _client.py
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Strommarktdaten automatisch downloaden

Beitrag von Kiffi »

Die Adresse, die aufgerufen wird, lautet:

https://www.smard.de/home/downloadcente ... marktdaten

Dieser Adresse musst Du Parameter übergeben. Beispielweise:

Code: Alles auswählen

https://www.smard.de/home/downloadcenter/download-marktdaten/?downloadAttributes=%7B%22selectedCategory%22:2,%22selectedSubCategory%22:5,%22selectedRegion%22:%22DE%22,%22selectedFileType%22:%22CSV%22,%22from%22:1730242800000,%22to%22:1731193199999%7D
Und das hier muss noch via POST übergeben werden (Beispiel):

Code: Alles auswählen

{
    "request_form": [
        {
            "format": "CSV",
            "moduleIds": [
                5000410,
                5004387,
                5004359
            ],
            "region": "DE",
            "timestamp_from": 1730242800000,
            "timestamp_to": 1731193200000,
            "type": "discrete",
            "language": "de",
            "resolution": ""
        }
    ]
}
Manche Parameter sind ja selbsterklärend. Bei den anderen musst Du mal ein wenig ausprobieren.

Drücke in Deinem Browser <F12>. Dann öffnet sich die Entwicklerkonsole. Dort kannst Du im Tab "Netzwerk" sehen, was via Header und Nutzlast übermittelt wird, wenn Du auf der Seite "Datei herunterladen" klickst. Screenshot

Das ganze lässt sich mit HTTPRequest() realisieren.
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Strommarktdaten automatisch downloaden

Beitrag von NicTheQuick »

Das ist eigentlich ganz einfach herauszufinden. Du öffnest im Browser die Entwicklerkonsole und gehst in den Netzwerk-Tab. Dann wählst du auf der Seite aus, was du herunterladen willst und startest den Download. Im selben Moment siehst du im Netzwerk-Tab einen POST-Request, in dem genau steht, was an den Server gesendet wurde, damit er mit der entsprechenden Datei antwortet.
Ich weiß nicht wie es bei Chrome ist, aber bei Firefox kann man dann auch einen Rechtsklick auf die Abfrage machen und dann den Wert als cURL-Adresse kopieren. Und das sieht dann zum Beispiel so aus:

Code: Alles auswählen

curl 'https://www.smard.de/nip-download-manager/nip/download/market-data' -X POST -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:132.0) Gecko/20100101 Firefox/132.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: de,en-US;q=0.7,en;q=0.3' -H 'Accept-Encoding: gzip, deflate, br, zstd' -H 'Content-Type: application/json' -H 'Origin: https://www.smard.de' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Referer: https://www.smard.de/home/downloadcenter/download-marktdaten/?downloadAttributes=%7B%22selectedCategory%22:2,%22selectedSubCategory%22:5,%22selectedRegion%22:%22DE%22,%22selectedFileType%22:%22CSV%22,%22from%22:1730242800000,%22to%22:1731193199999%7D' -H 'Cookie: guid=9897ac1e-bc68-48b4-ab0c-144db652aedf+4cd0ff50128c5c669d1680dbf811fa7800dc8f6d624eb9b6ea1fc83d8bb34e250e90d4d80160686d22e801cfb37c1a8bc9496c08378a0ed618d5fcb6d0be338555b174ef7bd3e35c148f7e949ff7ca7f9833fd9a4a44fcc72e7ebd7bfac791436cc5b09498fb413ec760f4b7e8e0d82f2afb306547ac0247e407f18edaf9ebccd33b195383b5d1ff6f1b481212e8d4abd92fae7760d81f4ffa0f8893aff6be4aa14f5a2276bf82ffff4fdda9c750d77ef20deb27bcec5148df35e9d832d99ed193be4b70f0e9455d6b6ef148dc3ecb7976907c5abda8124917b2d0e0a4ca8fb286acdaa86c2a510ae0118f91c6252eef430d5d9c88a142eb8d2b5019577756f4; CM_SESSIONID=B28F212302A33FE7C17E50B6301198B5; bnetza_cookie=!DwHOWDYxoHK+nPVnZMt9BfHyonaFV3+xLtYwUH2kJNDb5OLN8MIH0CzadTDnjSrCd9vGNaaNW9h3Nw==; TS01418b58=01e68c70d5a67a5af9ab6d05a08e9ebf28076e4d5c7d3327791fe0d295eeb26041bbfb0ef4d552294d75b2d14305da409223128118813ad80be8f165dcca7c42589338545378110afd4ba9ee7ce41f483b548c76f11861382d20b54c0cd1476f1b42fd0426' -H 'Sec-Fetch-Dest: empty' -H 'Sec-Fetch-Mode: cors' -H 'Sec-Fetch-Site: same-origin' -H 'Priority: u=0' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data-raw '{"request_form":[{"format":"CSV","moduleIds":[5000410,5004387,5004359],"region":"DE","timestamp_from":1730242800000,"timestamp_to":1731193200000,"type":"discrete","language":"de","resolution":"quarterhour"}]}'
Jetzt bereinigt man das noch von allem, was man sehr wahrscheinlich nicht braucht (Cookies, sonstige Header), und schon hat man seinen Aufruf:

Code: Alles auswählen

curl 'https://www.smard.de/nip-download-manager/nip/download/market-data' -X POST -H 'Content-Type: application/json' --data-raw '{"request_form":[{"format":"CSV","moduleIds":[5000410,5004387,5004359],"region":"DE","timestamp_from":1730242800000,"timestamp_to":1731193200000,"type":"discrete","language":"de","resolution":"quarterhour"}]}'
Und wenn man den so im Terminal unter Linux eingibt, funktioniert es auch:

Code: Alles auswählen

nicolas@Rocky:~$ curl 'https://www.smard.de/nip-download-manager/nip/download/market-data' -X POST -H 'Content-Type: application/json' --data-raw '{"request_form":[{"format":"CSV","moduleIds":[5000410,5004387,5004359],"region":"DE","timestamp_from":1730242800000,"timestamp_to":1731193200000,"type":"discrete","language":"de","resolution":"quarterhour"}]}'
Datum von;Datum bis;Gesamt (Netzlast) [MWh] Originalauflösungen;Residuallast [MWh] Originalauflösungen;Pumpspeicher [MWh] Originalauflösungen
30.10.2024 00:00;30.10.2024 00:15;11.349,25;9.560,75;512,25
30.10.2024 00:15;30.10.2024 00:30;11.225,25;9.394,00;506,00
30.10.2024 00:30;30.10.2024 00:45;11.110,00;9.271,25;543,00
30.10.2024 00:45;30.10.2024 01:00;11.024,50;9.219,75;718,50
30.10.2024 01:00;30.10.2024 01:15;10.827,50;9.069,75;683,75
30.10.2024 01:15;30.10.2024 01:30;10.744,00;9.018,75;737,75
30.10.2024 01:30;30.10.2024 01:45;10.650,00;8.971,75;824,75
30.10.2024 01:45;30.10.2024 02:00;10.627,00;9.008,75;813,75
30.10.2024 02:00;30.10.2024 02:15;10.507,25;8.936,00;835,00
...
Das kann man jetzt recht einfach in Purebasic übersetzen, indem man `HTTPRequest()` nutzt, als Typ `#PB_HTTP_Post` nutzt, den Header für den Content-Type setzt und als Daten den JSON-Request mitgibt.

Edit: Kiffi war schneller. :lol:
SMaag
Beiträge: 184
Registriert: 08.05.2022 12:58

Re: Strommarktdaten automatisch downloaden

Beitrag von SMaag »

also das mit curl unter Linux hat bei mir auch genauso funktioniert!
Die Adresse für Curl direkt in die Adresszeile des Browsers kopiert bringt Fehler! Schließe daraus, dass geht direkt mit Browser nicht!

Hab jetzt aber hier die Dokumentation der Parameter (Filter, Region, timestamp ...):

https://github.com/bundesAPI/smard-api/ ... p_json_get

Erster Schritt erstmal das aufdrößeln und über ComboBox oder Liste als Auswahlwerte bereitstellen. -> kein Problem

Mein Problem geht aber bei de, HTTP Request weiter:

Wenn das fertig ist, hab ich bestimmt noch einige Fragen
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Strommarktdaten automatisch downloaden

Beitrag von NicTheQuick »

Nein, das geht nicht direkt mit dem Browser, weil du einen POST-Request absetzen musst. Und die Request über die Browserzeile sind immer GET-Requests.

Übrigens ist dein Link falsch, der zeigt einen 404. Der hier ist richtig:
https://github.com/bundesAPI/smard-api/ ... p_json_get
Antworten