Kirjoitin php:llä ohjelman, joka kaivaa spottihinnan esille.
Ohjelma näyttää pitkältä, koska lisäsin siihen reilusti kommentteja
Jos testaat tätä, pistä tähän viestiketjuun kommentti, niin tiedän lisätä kommentteja.
Päivämäärien käsittely on vielä työn alla.
#!/usr/bin/php
<?php
/*******************************************************************************
261122 PTMusta, "Mistofeles", cordite(at)outlook.com
Jos jaat ohjelmaa eteenpäin, toivon, että yllä oleva puumerkkini säilyisi
If you copy and modify this program, I hope you don't remove my namestamp above
Ohjelma on tässä muodossaan testattu
Linux Mint 20.3 Una, 5.4.0-132-generic, php 7.4
Ubuntu 22.04.1 LTS, 5.15.0-53-generic, php 8.1
Toimii varmasti muissaskin Linux-versioissa ainakin pienin muutoksin
M$:n käyttöjärjestelmäyritelmä on kokeilijan vastuulla
Ohjelma hakee ENTSO-E-palvelimelta sähkön spot-hinnan
Tätä varten pitää rekisteröityä ENTSO-E -järjestelmään ja anoa [u]security tagia[/u] ohjeiden mukaan sähköpostilla
OHJEITA:
https://transparency.entsoe.eu/content/static_content/Static%20content/web%20api/Guide.html#_parameters
https://transparency.entsoe.eu/content/static_content/download?path=/Static%20content/web%20api/RestfulAPI_IG.pdf
******************************************************************************************\
// Tulostetaan tämä ja huomispäivä
// Kellonajat ovat UTC
$alkaa=date('Ymd0000&');
$huominen = new DateTime('tomorrow');
$loppuu=$huominen->format('Ymd0000&');
//********OHJELMAN YDIN***************//
// Rakennetaan http-osoiterivi:
// (MUOKKAA riveille tuodaan päivämäärä)
$d1="https://transparency.entsoe.eu/api?";
// Pistä tähän oma Security tagisi (ota hakaset pois):
$d2="securityToken=[b]<Security Tagi>[/b]";
// DocumentType A44: pricedocument:
$d3="documentType=A44&";
// Maakoodit löytyvät:
// https://eepublicdownloads.entsoe.eu/clean-documents/EDI/Library/Market_Areas_v2.1.pdf
$d4="In_Domain=10YFI-1--------U&";
$d5="out_Domain=10YFI-1--------U&";
$d6="periodStart=".$alkaa;
$d7="periodEnd=".$loppuu;
$data=$d1.$d2.$d3.$d4.$d5.$d6.$d7;
// Lähetetään pyyntö, talletetaan muuttujaan:
$contents = file_get_contents($data, false);
// Pannaan raakadatatalteen siltä varalta, että halutaan tutkia:
// Ei välttämätön
$fp=fopen("raakadata",'w');
fwrite($fp,$contents);
fclose($fp);
//************************************//
// Tästä eteenpäin haetun datan muokkausta ja tiivistystä
// Haettavat rivit:
// <start>2022-08-25T22:00Z</start>
// <end>2022-08-26T22:00Z</end>
// <position>1</position>
// <price.amount>206.93</price.amount>
// Käsitellään muuttuja rivi kerrallaan
// Irroitetaan <start><position> ja <price.amount>
// Talletetaan vain tämän ja huomisen tiedot:
$fd=fopen("loppudata.txt",'w');
// Linuxissa rivin loppumerkiksi riittää "\n"
// M$Wintoosasta en halua tietää mitään
$separator = "\n";
$rivi = strtok($contents, $separator);
while ($rivi !== false) {
// Rivin alusta roskat pois:
$rivi=trim($rivi," \n\r\t\v\x00");
// onko etsittävä merkkiono tällä rivillä
$needle="start>";
$pos=strpos($rivi,$needle);
if ($pos != false){
// Rivin lopusta ja alusta tagit pois
$start=str_replace("</start>","",$rivi);
$start=str_replace("<start>","",$start);
echo"START:$start,";
// Poimitaan tunti
$hour=substr($start,11,2);
// echo"HOUR:$hour\n";
}
//<end> on meille turha
$needle="end>";
$pos=strpos($rivi,$needle);
if ($pos != false){
$endo=str_replace("</end>","",$rivi);
$endo=str_replace("<end>","",$endo);
// echo"END: $endo\n";
}
// <position> on tasatunti startsta alkaen
$needle="position>";
$pos=strpos($rivi,$needle);
if ($pos != false){
$posi=str_replace("</position>","",$rivi);
$posi=str_replace("<position>","",$posi);
}
// Vihdoinkin se oleellisin: hinta
$needle="amount>";
$pos=strpos($rivi,$needle);
if ($pos != false){
$price=str_replace("</price.amount>","",$rivi);
$price=str_replace("<price.amount>","",$price);
$price/=10;
// Lasketaan hinnan kellonaika
$hetki=$hour+$posi;
// Vuorokausi vaihtuu:
if($hetki==24){
$hour-=24;
$hetki='00';
$day+=1; // $day -arvon laskennassa on virhe:
}
echo"$day $hetki:00, $price\n";
fwrite($fd,$posi.",".$price."\n");
}
// Poimitaan seuraava rivi käsittelyyn:
$rivi=strtok($separator);
}