Mappen genereren
Canvas heeft ook een API, via de API van Canvas kunnen docenten bijvoorbeeld ingeleverd huiswerk opvragen. De documentatie van die API staat hier Canvas API. Om alle opdrachten te vinden vraag je in die API eerst alle cursussen op en vervolgens vraag je per cursus de opdrachten op. Jij hoeft dit niet te doen, wij hebben dit al voor je gedaan en per Cohort een json bestandje voor je klaargezet.
https://courses.devroc.nl/file/structure/c24.jsonhttps://courses.devroc.nl/file/structure/c23.json
https://courses.devroc.nl/file/structure/c22.json
https://courses.devroc.nl/file/structure/c21.json
https://courses.devroc.nl/file/structure/c20.json
Als je de JSON code bekijkt in je browser dan zie je dat er een structuur in zit. JSON staat voor JavaScript object notatie en wat je ziet is gewoon JavaScript code maar vrijwel elke programmeertaal kan JSON inlezen en genereren. In JavaScript en dus ook in JSON gebruiken we [ en ] om arrays aan te geven en met { en } maken we objecten. Je kan dus ook functies aan JSON toevoegen maar dat gebeurd in de praktijk bijna nooit. JSON wordt in de praktijk voornamelijk gebruikt als eenvoudige manier om gegevens door te geven tussen programma's, meestal via API's. Je kan de tekens { en } dan het beste zien als een associatieve array in PHP.
Het JSON bestand bevat een array met cursus objecten. Het start met [ (array) en dan voor elke cursus een { met daarin eigenschappen die over de cursus gaan. Elk cursus object heeft een name_lower en een array met assignments en elke assignment heeft ook een name_lower. Die properties kunnen we gebruiken om mappen aan te maken. Dit kan met Php of Python of NodeJS.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// Lees bestand van URL in en stop in nieuwe variabele
$jsonInput = file_get_contents('https://courses.devroc.nl/file/structure/c24.json');
// Decodeer JSON naar php array
$courses = json_decode($jsonInput, true);
foreach($courses as $course)
{
// Maak in de huidige directory een map aan voor de cursus
echo "Maak cursus map aan: ". $course['name_lower'] . PHP_EOL;
if(file_exists($course['name_lower']))
{
// Als de cursus map al bestaat dan skippen we deze
continue;
}
mkdir($course['name_lower']);
foreach($course['assignments'] as $assignment)
{
// Maak in de curus map een opdracht map aan.
$assignmentDir = $course['name_lower'] . '\\' . $assignment['name_lower'];
if(file_exists($assignmentDir))
{
// Als de opdracht map al bestaat dan skippen we deze
continue;
}
echo "Maak opdracht map aan: ". $assignmentDir . PHP_EOL;
mkdir($assignmentDir);
}
}
Als je dit bestand opslaat in bijvoorbeeld je htdocs map en het vervolgens uitvoert php ./mappen-aanmaken.php dan maakt het script voor alle opdrachten een mapje aan.