MSGraph Rest Api, Wie kommuniziert Python mit Office 365

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Hallo,

Seit geraumer Zeit hänge ich an folgendem Projekt.
Ein Willkommensfenster mit Raumbelegung und Informationen für meine Schule.

Ich versuche das mit einem Kivy GUI (bisher nur Platzhalter) darzustellen.
Ich möchte alle 7 Sekunden ein Bild (von Übungen aus der Schule, Bilder während der Lehre etc) darstellen und zwischendurch immerwieder die Raumplanung des Tages.
Wir haben an unserer Schule (durch die Gemeinnützigkeit und dem Auftrag der Lehre) das Office 365 Education. Eigentlich eine Prima Möglichkeit (zumindest in meinen Gedanken) um Daten zu hosten und abfragen zu können.
Allerdings werde ich von der MSGraph Rest Api vollkommen überrannt. Ich suche hier Leute welche sich ggf in die Api etwas eingelesen haben und daher die Fragen an euch.

Ich habe mittels diesem Beispiel ein Token und die verschiedenen Infos des JsonOutputs in einer Ini Gespeichert. Soweit so gut...
Aber das weitere Verfahren ist Unklar.
Dieses Beispiel nutzt ja Flask dazu. Kann ich diese REST-Api nur mittels Flask ansprechen? In der Doku wird immer von Header, GET, Post etc gesprochen. Für mich bedeutet das man hier also "immer" mit Flask arbeiten muss. Ist das Richtig?
Hier im Punkt 5 findet ihre weitere Infos dazu. Falls dem so sein sollte, verstehe ich das Verfahren nicht. Wieso "sollte" eine Maschine über den Browser mit einer Maschine sprechen, wenn ein "wget" ähnliches Verfahren ja auch denkbar ist.
Im Endeffekt möchte ich 2 verschiedene Szenarios mit der OfficeAnbindung erreichen.
  • Download und Synchronisation der Bilder aus einen Onedrive oder Sharepoint Ordner (zum Anzeigen auf der GUI)
  • Auslesen einer Exceldatei ( um die Informationen, welcher Raum mit wem besetzt ist darzustellen)
Das ich Sharepoint / Onedrive nutzen möchte, liegt zu einem sehr großen Anteil daran, dass meine Kollegen noch weniger technisches Verständnis haben als ich. Aber ein DragnDrop von Bildern und die Bearbeitung der Excelliste keinerlei Herausforderung für sie darstellt. Das Script läuft im übrigen auf einen Raspberry 3, welcher hinter einen TV im Eingangsbereich läuft.

Python ist für mich ja schon neu aber diese Api gibt mir wahrlich den Rest... Da ich keinerlei Programmiervorkenntnisse besitze! Nicht umsonst bin ich Medizinpädagoge ;)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Kann ich diese REST-Api nur mittels Flask ansprechen
Nein. Eine REST-API kannst du im Prinzip über alles ansprechen, was das HTTP/HTTPS-Protokoll unterstützt. Flask ist ein Webframework, für Abfragen einer REST-API ist würde ich sagen das `request` Modul der quasi-Standard unter Python.
Wieso "sollte" eine Maschine über den Browser mit einer Maschine sprechen, wenn ein "wget" ähnliches Verfahren ja auch denkbar ist.
Du brauchst keinen Browser, der Legitimierung läuft über HTTP/HTTPS und Verwendung der OAuth Authentifizierung. Also im Prinzip so, was du "wget ähnliches Verfahren" nennst. Da musst du halt ein paar Schritte wie beschrieben ausführen, bevor der Zugriff auf die Daten da ist. Das ist halt ein Formalismus, der zur Sicherheit eingehalten werden muss - sonst kommst du nicht an Daten.

Für das request-Modul gibt es eine Erweiterung für OAuth2 (Link), die die Sache ggf. etwas vereinfacht.

Das ganz mag auf den ersten Blick kompliziert aussehen - aber eigentlich ist das alles gängige Praxis, da ist jetzt nicht schlimmes bei. Wobei das, wenn man das zum 1. Mal als "Hobbyprogrammierer" nacht, durchaus verwirrend sein kann. Du musst es halt 1x alles einrichten, danach sollte das kein Problem sein.

Gruß, noisefloor
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Ahh okay
Ja Browser war Falsch bezeichnet. Webframework ist natürlich die richtige Bezeichnung. Aber so ganz falsch war mein Gedanke ja dann nicht. Da es mir nicht bewusst war, das Request das dann "übernimmt"
Aber eine Frage dazu. Muss ich dann bei allen Funktionen (Login, Download, Auslesen der CSV etc) mit Dekoratoren (like @app.route("/login")) arbeiten? Erstellt man dadurch das Grundgerüst?
Oder wird jede Request Anfrage "einzeln" via Formating erstellt? Ich versuche gerade zu ergründen, welches Thema ich mir da jetzt anschauen müsste.
Jetzt ist der Kopf aber schon zu voll gepackt...mit Arbeitskram...Ich kann das gerade nicht mehr erfassen.

Das Modul "OAuth" schau ich mir mal an. Vielleicht klart es dann etwas auf.

Wenn man Office 365 und Request sucht, bekommt man auch ganz andere Beispiel Scripts.
Das hilft mir ggf auch.
Hier erster Treffer
Das Hier schaut sehr sehr vielversprechend aus

Ich muss mir zusammen mit den neuen Infos und Suchanfragen erstmal viel Text reinziehen!
Aber danke! Das wird mir erstmal weiterhelfen....Hoffe ich
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

In Deinem anfänglichen Beispiel werden zwei Dinge verknüpft, die dann einen Anfänger verwirren, weil sowohl ein Server programmiert wird, der Anfragen entgegen nimmt und gleichzeitig ein Client, der die Anfragen an Office365 weitergibt. Anfangen würde ich mit dem Client, also Requests, Flask ist da, um einen Server zu schreiben, solltest Du aber für den Anfang ignorieren.
Antworten