Giter VIP home page Giter VIP logo

zermelo-google-rooster's Introduction

damstede-google-rooster

Rooster voor Damstede, geïmporteerd naar Google Calendar met Hangouts Meet link i.v.m. COVID-19

Vereisten

  • een Linux-server met nodejs en npm
  • een G-suite-abonnement bij Google met docent- en leerlingaccounts
  • een Zermelo-rooster met docent- en leerlingaccounts gekoppeld aan lessen
  • kennis van G-suite, Google Calendar, Google Hangouts Meet, Zermelo
  • een Zermelo-beheerder bij jou op school die een access token kan aanmaken met toegang tot alle roosters
  • enige kennis van het Google Cloud Platform is niet vereist, maar kan wel van pas komen

De docent- en leerlingaccounts binnen G-suite dienen als alias (of als hoofd-e-mailadres) de gebruikersnaam van Zermelo te bevatten. Een voorbeeld:

Download

Download of kloon deze repository. Pak het ZIP-bestand uit indien je de repository hebt gedownload met behulp van de link.

Installatie

Let op dat alle bestanden in een subfolder bewaard dienen te worden. Zet ze niet in een standaard downloads-folder of iets dergelijks.

Allereerst dien je een nieuw Google Cloud project aan te maken. Maak vervolgens OAuth2-credentials aan onder APIs en services > Inloggegevens. Doe dit door op "+ gegevens maken" te drukken, te kiezen voor "Client-ID OAuth", dan voor "Overige". Voer een naam in en druk op "maken". Als er wordt gevraagd om "redirect-URLs" op te geven, voeg dan urn:ietf:wg:oauth:2.0:oob en http://localhost toe.

Druk daarna in het overzicht van alle credentials op de net aangemaakte client-ID. Kies dan voor "JSON downloaden". Sla deze JSON op als credentials.json in de installatiemap. Dit bestand heeft een structuur die lijkt op het volgende:

{
  "installed": {
    "client_id": "***",
    "project_id": "***",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "***",
    "redirect_uris": [
      "urn:ietf:wg:oauth:2.0:oob",
      "http://localhost"
    ]
}

Vervolgens dien je een serviceaccount aan te maken onder IAM & Beheer > Serviceaccounts. Hieruit krijg je een bestand, wat gedownload moet worden en geplaatst dient te worden met de naam service.json in de installatiemap. Dit bestand heeft een structuur die lijkt op het volgende:

{
  "type": "service_account",
  "project_id": "***",
  "private_key_id": "***",
  "private_key": "***",
  "client_email": "***",
  "client_id": "***",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/***"
}

In de installatiemap maak je vervolgens een bestand met de naam credentials-z.json aan met de volgende inhoud:

{
  "school": "<SCHOOLNAAM_ZERMELO (subdomein zportal.nl, bijv. damstedelyceum)>",
  "token": "<TOKEN_ZERMELO (access token verkregen bij de beheerder van Zermelo op jouw school)>",
  "branch": "<BRANCH_ZERMELO (branch van het huidige schooljaar, bijv. 901)>"
}

Dan, een belangrijke stap: open vervolgens een terminal (command line interface), en run in de installatiemap het commando npm install. Wacht tot de installatie van de benodigde onderdelen is voltooid voor je doorgaat.

Het script uitvoeren & first-time set-up

Run het commando node main.js.

Bij de eerste keer starten van het script wordt er gevraagd een Google-account te verbinden via OAuth2. Dit account zal worden gebruikt als systeembeheer-account. Als een docent niet kan worden gevonden in G-suite, dan wordt dit account aan de les gekoppeld. Tevens is dit account bij elke les uitgenodigd ter ondersteuning.

Er zal worden gevraagd een URL te bezoeken in een internetbrowser. Doe dit en log in met het Google-account van het systeembeheer op jouw school. Deze moet in G-suite zijn opgenomen. Na het inloggen geeft Google een code terug. Deze dient te worden ingevoerd in het terminalvenster.

Hierna zal de verbinding met Zermelo worden gemaakt en worden alle lessen voor de komende 24 uur opgehaald. Deze lessen worden gekoppeld aan de Google Agenda's van de docentenaccounts in G-suite, waarna de leerlingen als deelnemers worden toegevoegd. Dit werkt alleen als de vereisten juist zijn! Deze stap kan even duren.

Automatiseren

Met behulp van cron kun je vervolgens het script automatisch laten draaien. Op Damstede kozen we ervoor elke 2 uur het script uit te voeren, m.u.v. de weekenden.

Voer het commando sudo crontab -e uit. Indien vereist, kies "nano" als editor.

Voeg aan het geopende bestand onderaan de volgende regels toe:

# Maandag tot en met donderdag
0 6,8,10,12,14,16,18,20,22 * * 1-4 node /pad/naar/installatiemap/main.js
# Vrijdag
0 6,8,10,12,14 * * 5 node /pad/naar/installatiemap/main.js
# Zondag
0 16,20,22 * * 7 node /pad/naar/installatiemap/main.js

Om de dagen en tijden aan te passen kan ik crontab.guru aanbevelen. Dit hulpprogramma laat ook zien wat er met welke regel wordt bedoeld. Probeer het maar eens uit!

Ondersteuning voor foutoplossing

Mocht er iets mis gaan of niet lukken, maak dan gerust een Issue aan. Ik ben bereid ondersteuning te bieden (tot op zekere hoogte).

zermelo-google-rooster's People

Contributors

dependabot[bot] avatar freekbes avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.