Algemeen forum ontrent de ontwikkelng, design en hosting van weergerelateerde websites (dit laatste om een beetje on topic te blijven)
#73250
Ik gebruik de gegevens van een KNMI meetstation in de buurt om m'n eigen metingen er mee te vergelijken op m'n website. Tot voorkort werkte dat prima met de volgende apicall in php: " http://projects.knmi.nl/klimatologie/da ... 616&vars=Q".
KNMI heeft het pad veranderd, zie https://www.knmi.nl/kennis-en-datacentr ... een-script.

Maar als ik dat pad wijzig dan krijg ik een melding dat die pagina niet bestaat. Ik gebruik dan deze URL: "https://www.daggegevens.knmi.nl/klimato ... 616&vars=Q".

Wat doe ik fout?
Gebruikersavatar
Door wvdkuil
#73251
Ws Heinenoord schreef: 19 jun 2021, 12:18 Ik gebruik de gegevens van een KNMI meetstation in de buurt om m'n eigen metingen er mee te vergelijken op m'n website. Tot voor kort werkte dat prima met de volgende apicall in php: " http://projects.knmi.nl/klimatologie/da ... 616&vars=Q".
KNMI heeft het pad veranderd, zie https://www.knmi.nl/kennis-en-datacentr ... een-script.

Maar als ik dat pad wijzig dan krijg ik een melding dat die pagina niet bestaat. Ik gebruik dan deze URL: "https://www.daggegevens.knmi.nl/klimato ... 616&vars=Q".

Wat doe ik fout?
Niet allen het pad is gewijzigd.
Ook moeten de parameters via POST worden doorgegeven, voorheen was dat via GET
Met GET zet je de parameters achter de URL ?par1=xxx&par=yyy
Met post moeten de parameters in een PHP-array doorgeven worden als aparte parameter bij de curl.

Ik kon geen Nederlandse beschrijving vinden.
Maar wel deze in het Engels: https://stackoverflow.com/questions/213 ... ample-code

Dus de nieuwe URL is alleen https://www.daggegevens.knmi.nl/klimato ... aggegevens
Alle parameters moeten in 1 array

Als het niet lukt, zet dan even de exacte php code die je gebruikt in een volgend bericht.
Succes,
Wim
#73268
Beste Wim,

Dit is precies wat ik nodig heb. Ik heb er een functie van gemaakt in PHP:

function KNMIcall($url, $KNMI_postfields) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $KNMI_postfields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$answer = curl_exec($ch);
curl_close ($ch);
return $answer ; }

En die wordt aangeroepen met:

$vandaag=date("Ymd");
$date=date_create($vandaag);
date_sub($date,date_interval_create_from_date_string("1 days"));
$gisteren=date_format($date,"Ymd");
$KNMI_url = "https://www.daggegevens.knmi.nl/klimato ... aggegevens";
$KNMI_postfields = 'stns=344&start='.$gisteren.'&end='.$gisteren.'&vars=Q';
$KNMI_output = KNMIcall($KNMI_url, $KNMI_postfields);

Nogmaals bedankt!

Mvg, Peter
#73294
Even nog een kleine aanvulling. In de eerste versie stripte ik de CSV file van die enorme verklarende tekst die steeds voorgaat aan de KNMI downloads. En dat liep ook niet altijd goed de laatste tijd. Naast CSV formaat biedt het KNMI ook het zogenaamde JSON formaat aan dmv "&fmt=json" aan de postfieldsstring toe te voegen. De resulterende JSON-file zet je met een enkele "decode' opdracht om in een keurige meervoudige array. De PHP code is dan:
$KNMI_url = "https://www.daggegevens.KNMI.nl/klimato ... aggegevens";
$KNMI_postfields = 'stns=344&start='.$jaar_1.'1201&end='.$jaar.'1231&vars=Q:SQ&fmt=json';
$KNMI_output = KNMIcall($KNMI_url, $KNMI_postfields);
$KNMI_jaar_data = json_decode($KNMI_output,true);
$KNMI_Joule = array_column($KNMI_jaar_data, "Q");
$KNMI_zonuren = array_column($KNMI_jaar_data, "SQ");