Hallo,

Ik weet niet of het in de juiste categorie zit, maar geraak niet verder ( grote deels door mijn heel beperkte kennis van json & PHP).

Ik zoek hulp om een script te krijgen dat json ( afkomstig van de site: https://www.volleyadmin2.be/services/wedstrijden_xml.php?province_id=4&format=json&stamnummer=L-0923)
Omzet in een tabel ( en in de toekomst vb enkel de laatste en de toekomstige 14dagen gaat tonen).

Ik heb de tutorials gevolgd van w3s, maar geraak er niet echt uit.
Kan er iemand mij op de weg helpen, of mij een goede cursus of boek aanraden?

Alvast bedankt voor de info. Excuses als ik in de verkeerde categorie zit.

mvg,
Jenthe
Op welk punt loop je precies vast?
Het loont al om de JSON-string om te zetten in een array, en deze al uit te lezen. Dan weet je precies wat je hebt, en hoe je het moet uitlezen.


<?php
// De URL met JSON-data die je wilt uitlezen
$url= "https://www.volleyadmin2.be/services/wedstrijden_xml.php?province_id=4&format=json&stamnummer=L-0923";

// We halen de data op
$data = file_get_contents($url);

// We decoden de JSON-string naar werkbare data. True is bedoeld om er een array van te maken, i.p.v. een object. 
$json = json_decode($data,true); 

// Even de data in een array tonen voor de handigheid tijdens het ontwikkelen. 
echo "<pre>".print_r($json,true)."</pre>";

// Vanaf hier kan je bijvoorbeeld $json met foreach($json as $item) { ...} doorlopen zodat je elk los items in de loop kan opvragen om uiteindelijk te verwerken.

?>
Bedank voor de reactie.
Ik heb nu een een klein probleem met de omvorming van de datum naar een date - format.
Ik gebruik hiervoor de code strtodate() - functie. Maar ik krijg de datum 01/01/70 .

Hier is de huidige code:

<?php
// De URL met JSON-data die je wilt uitlezen
$url= "https://www.volleyadmin2.be/services/wedstrijden_xml.php?province_id=4&format=json&stamnummer=L-0923";

// We halen de data op
$data = file_get_contents($url);

// We decoden de JSON-string naar werkbare data. True is bedoeld om er een array van te maken, i.p.v. een object.
$json = json_decode($data,true);

// Even de data in een array tonen voor de handigheid tijdens het ontwikkelen.
//echo "<pre>".print_r($json,true)."</pre>";
echo "<table>";
foreach($json as $row)
{
	
	echo "<tr>";
	echo "<td>" . $row['Reeks'] . "</td>";
	echo "<td>" . $row['Wedstrijdnr'] . "</td>";
	$date = strtotime($row['t']);
	echo "<td>" . date("d-m-Y",$date) . "</td>";
	echo "<td>" . $row['t'] . "</td>";
	echo "<td>" . $row['Aanvangsuur'] . "</td>";
	echo "<td>" . $row['Thuis'] . "</td>";
	echo "<td>" . $row['UitslagHoofd'] . "</td>";
	echo "<td>" . $row['Bezoekers'] . "</td>";
	echo "<td>" . $row['SporthalNaam'] . "</td>";
	echo "<td>" . $row['UitslagHoofd'] . "</td>";
	echo "</tr>";
}
echo "</table>";
// Vanaf hier kan je bijvoorbeeld $json met foreach($json as $item) { ...} doorlopen zodat je elk los items in de loop kan opvragen om uiteindelijk te verwerken.

?>


mvg
<?php
$t = "12/10/2019";
$date = strtotime($t);
echo strftime("%e %B %Y",$date);
?>

Dit geeft gewoon: 10 December 2019.
Los van het probleem zou ik date() niet aanraden. Deze is niet eenvoudig om te latten naar een locale.
Oke op andere pagina's moet ik vb enkel de wedstrijden tonen die de komende 14dagen zijn.
Volgens mij kan dit enkel als je het omzet naar een date, klopt dit?

Een timestamp bedoel je? Dat is wel het gemakkelijkst.
"Volgens mij kan dit enkel als je het omzet naar een date, klopt dit?"

Date (yyyy-mm-dd), datetime (yyyy-mm-dd hh:mm:ss) of timestamp inderdaad

Let wel op dat je voor Ariens voorbeeld de setlocale waarden moet setten.
<?php
setlocale(LC_ALL, 'nl_NL');
?>
En ten tweede @Arien, je gebruik het voorbeeld 12/10/2019 (maand-dag-jaar) maar in de json zijn ze opgeslagen als dag-maand-jaar en dat gaat dus fout.

<?php
setlocale(LC_ALL, 'nl_NL');

$date = '28/09/2019';
list($dag,$maand,$jaar) = explode('/', $date);

echo strftime("%A %e %B %Y", (new \DateTime($jaar.'-'.$maand.'-'.$dag))->getTimestamp());
// zaterdag 28 september 2019
?>
Bedankt voor de info.

Ik heb nu nog 1 probleem. Door de grote hoeveelheid data kan ik niet alles in een databank zetten.
Per keer moet er gezien worden of de wedstrijd al in de databank staat of niet.

Dus eerst moet er gezien worden bestaat de wedstrijd al of niet, daarna moet er ofwel een insert gebeuren ofwel een update.

Maar ik kan max een 1500 - tal rijen nakijken.

mvg,
Jenthe
grote hoeveelheid data

Over hoeveel data hebben we het? Als ik dit op kan hoesten in een browser via bovenstaande link zou dit een peuleschil moeten zijn voor een database.

Per keer moet er gezien worden of de wedstrijd al in de databank staat of niet.

Hiervoor zul je inderdaad een mechanisme moeten verzinnen, maar als alle informatie chronologisch wordt aangeleverd (en je er vanuit gaat dat er in het verleden geen informatie wordt toegevoegd) dan kun je een duidelijke rode streep trekken in deze lijst die de scheiding tussen "reeds bekend" en "nieuw" markeert. Elke keer als je een import draait zul je alles tot dit punt in moeten lezen in code en vervolgens moeten toevoegen in de database. Als je ook alles chronologisch opslaat in jouw database is dit een kwestie van het laatste record ophalen en dan alles tot dat punt binnentrekken.

ofwel een update

Met bovenstaande strategie zul je nooit iets hoeven te updaten.

Maar ik kan max een 1500 - tal rijen nakijken.

Waar komt deze limiet vandaan? Wat gaat er vervolgens mis? Het zou mogelijk moeten zijn om veel meer informatie in te lezen, tenzij je op (hele) goedkope shared hosting zit die hele strenge geheugenlimieten hanteert?

Ik kan mij ook niet voorstellen dat de datafeed alleen maar groeit, maar tegelijkertijd inspireert het custom formaat voor datums nou niet bepaald veel vertrouwen...
Ben inderdaad ook benieuwd hoe je aan 1500 rijen komt. De URL bevat maar 175 rijen en dit mag absoluut geen probleem zijn.

Over het inserten/updaten. Je kunt ook gewoon INSERT IGNORE gebruiken icm een uniek veld bijv het wedstrijdnr. Als deze dan al bestaat dan wordt de insert genegeerd.
Het nadeel hiervan is, als er bijv een wedstrijd tijd verandert, dat deze niet wordt bijgewerkt, maar dat zelfde probleem heb je ook met de oplossing van Thomas.
Je zou ook kunnen kijken naar ON DUPLICATE UPDATE wederom met een uniek veld. Bestaat deze, update, bestaat deze niet, insert.

[edit]Mocht het inserten echt een probleem zijn, kun je ook controleren op het veld "uitslaghoofd". Als deze is gevuld, is de wedstrijd gespeeld en ga er dan vanuit dat deze niet meer wijzigt.[/edit]

Kun je de limiet van 1500 rijen eens uitleggen?

Reageren