🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Google-API

Alles zur Programmierung im LibreOffice.
scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Google-API

Beitrag von scientific » Di 1. Mär 2016, 21:13

Hi Leute!

Hat von euch jemand Erfahrung mit den Google-APIs?
Konkret geht es diesmal (wieder) um das Erzeugen/Ändern eines Kalender-Events mittels Python aus LO-Base heraus. Ich Verwalte in einer Base-Datenbank Projekte und die dazugehörigen Termine. Und zu diesem Projekt möchte ich verschiedene Kalender beschicken können. Outlook klappt schon. Jetzt ist der Google-Kalender dran.
Ich möchte meine Projekt/Termin-Verwaltung - wenn sie fertig ist - gerne veröffentlichen. Und ich gehe davon aus, dass die Zielgruppe (Kleinunternehmer, Vereine) eher auf kostenlose Cloud-Kalender setzt, und so ist Google-Kalender ein essentieller Bestandteil der Projektverwaltung.

Aber ich habe zu wenig Erfahrung mit oauth2 und ähnlichem...

Laut Anleitung https://developers.google.com/google-apps/calendar/auth Muss ich das Projekt registrieren. Dann bekomme ich dafür einen api-Key und credentials in json-Form. Wenn ich nun meine Base-Datei mitsamt dem Python-Skript weitergebe, benötigt dann jeder einen API-Key für sich, oder benötigen die "meinen" Api-Key?

Kennt sich damit jemand aus?

lg scientific

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Google-API

Beitrag von karolus » Mi 2. Mär 2016, 00:12

Wenn ich deine Aussage im ersten Absatz richtig verstehe, möchtest du die Teminverwaltung weitergeben - und nicht deinen Kalender teilen - ergo benötigen andere dann auch ihren eigenen Anmeldungskram.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Google-API

Beitrag von scientific » Mi 2. Mär 2016, 10:12

Ja genau.

Ich schreibe an einer Datenbank, welche Projekte, Termine, Aufträge und Rechnungen verwaltet. Das ganze ist eine LO-Datenbank (odb-File + hsqldb gesplittet + pythonskripte).

Und dieses ganze Projekt möchte ich gerne - wenn es fertig ist - anderen geben. Da ich denke, dass es andere (Vereine, Kleinunternehmen mit ein paar keinen bis wenigen Mitarbeitern) gibt, die das auch gut brauchen können.

Daher gebe ich das ganze Projekt "gereinigt" - also von allen Einträgen befreit, ohne Login-Credentials, ohne Kalender usw. - weiter.

Man kann das ganze auch ohne Online-Kalender betreiben.
Aber wenn jemand einen Google-Kalender, oder Office365 oder ein Outlook.com-Konto schon nützt, dann kann man mit den Pythonskripten die Termine aus der ganzen Verwaltung in diese Kalender per Knopfdruck eintragen.

Das heißt, die Nutzer müssen ihre Zugangsdaten kennen, damit sie die Export (und später auch die Import)-Funktion nutzen können.

Aber was mich jetzt interessiert... müssen andere Nutzer auf Google AUCH ein Projekt anlegen, Projekt-Credentials runterladen und das ganze Brimborium machen, oder muss ich meine Projektcredentials im Projekt mitgeben und die Nutzer benötigen dann nur mehr ihre Kalender-ID und Login/Passwd?

Ich hoff ich hab mich verständlich ausgedrückt.

lg scientific

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Google-API

Beitrag von scientific » Mi 2. Mär 2016, 12:16

Ich habe jetzt auf meinem Windowsrechner (Win7) oauth2client und google-api-pyhton-client installiert.

Der Aufruf direkt mit Python funktioniert auch, es werden Events erstellt bzw. die Liste der Kalender oder Events abgerufen.
Ich habe mich an diese Anleitung gehalten: https://developers.google.com/google-ap ... art/python

Dann habe ich dieses Beispiel in mein Pythonskript eingearbeitet, welches ich aus LO heraus aufrufe.
Die selben import-Funktionen, die selben Aufrufe...

Doch ich bekomme immer folgenden Fehler:

Code: Alles auswählen

Type: com.sun.star.script.provider.ScriptFrameworkErrorException
Message: <class 'AttributeError'>: 'module' object has no attribute 'argv'
  C:\Program Files (x86)\LibreOffice 5\program\python-core-3.3.0\lib\argparse.py:1600 in function __init__() [prog = _os.path.basename(_sys.argv[0])]
  C:\Users\DKahl\AppData\Roaming\Python\Python33\site-packages\oauth2client\tools.py:57 in function _CreateArgumentParser() [parser = argparse.ArgumentParser(add_help=False)]
  C:\Users\DKahl\AppData\Roaming\Python\Python33\site-packages\oauth2client\tools.py:73 in function <module>() [argparser = _CreateArgumentParser()]
  C:\Program Files (x86)\LibreOffice 5\program\uno.py:265 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
  C:\Program Files (x86)\LibreOffice 5\program\uno.py:265 in function _uno_import() [return _g_delegatee( name, *optargs, **kwargs )]
  C:\Users\DKahl\AppData\Roaming\LibreOffice\4\user\Scripts\python\createOL365event.py:136 in function <module>() [from oauth2client import tools]
  C:\Program Files (x86)\LibreOffice 5\program\pythonscript.py:452 in function getModuleByUrl() [exec(code, entry.module.__dict__)]
  C:\Program Files (x86)\LibreOffice 5\program\pythonscript.py:993 in function getScript() [mod = self.provCtx.getModuleByUrl( fileUri )]
Aber ich kann damit überhaupt nichts anfangen. Ich verwende nirgendwo "argv"...
Und ich fand heraus, dass der Fehler in der import-Zeile auftritt.

Hat jemand eine Idee dazu?

lg scientific

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Google-API

Beitrag von karolus » Mi 2. Mär 2016, 13:51

Hallo

Du importierst irgendwo argparse
argparse möchte gern die Kommandozeile parsen
Dazu importiert argparse zum einen sys ( bis dahin klappt das )
zum anderen greift argparse dann auf:

Code: Alles auswählen

sys.argv
zu.
das Attribut .argv gibts aber aus naheliegenden Gründen nicht aus der GUI von soffice heraus

https://docs.python.org/3.4/library/sys ... v#sys.argv
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Google-API

Beitrag von karolus » Mi 2. Mär 2016, 14:18

Hallo

Das folgende ist eigentlich sinnfrei und zeigt nur das man ggf. auch sys.argv selbst definieren kann.

Code: Alles auswählen

import sys
try:
    sys.argv
except AttributeError:
    sys.argv = ['blah', 'blupp']

def sysargs():
    """
    nur aus leerem writer-dokument aufrufen !!!
    """
    doc = XSCRIPTCONTEXT.getDocument()
    doc.Text.String = '\n'.join(sys.argv) 
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Google-API

Beitrag von scientific » Mi 2. Mär 2016, 14:31

Also "ich" rufe das nicht auf...

Code: Alles auswählen

/usr/local/lib/python3.5/dist-packages:  $ grep argp * -R
googleapiclient/sample_tools.py:import argparse
googleapiclient/sample_tools.py:    parents: list of argparse.ArgumentParser, additional command-line flags.
googleapiclient/sample_tools.py:  parent_parsers = [tools.argparser]
googleapiclient/sample_tools.py:  parser = argparse.ArgumentParser(
googleapiclient/sample_tools.py:      formatter_class=argparse.RawDescriptionHelpFormatter,
Übereinstimmungen in Binärdatei googleapiclient/__pycache__/sample_tools.cpython-35.pyc.
oauth2client/client.py:    # once the argparse import gets fixed (it is not present in Python 2.6)
oauth2client/tools.py:__all__ = ['argparser', 'run_flow', 'message_if_missing']
oauth2client/tools.py:        import argparse
oauth2client/tools.py:    parser = argparse.ArgumentParser(add_help=False)
oauth2client/tools.py:# argparser is an ArgumentParser that contains command-line options expected
oauth2client/tools.py:argparser = _CreateArgumentParser()
oauth2client/tools.py:        parser = argparse.ArgumentParser(
oauth2client/tools.py:            formatter_class=argparse.RawDescriptionHelpFormatter,
oauth2client/tools.py:            parents=[tools.argparser])
oauth2client/tools.py:        flags: ``argparse.Namespace``, The command-line flags. This is the
oauth2client/tools.py:               ``argparse.ArgumentParser`` as described above.
Übereinstimmungen in Binärdatei oauth2client/__pycache__/tools.cpython-35.pyc.
Übereinstimmungen in Binärdatei simplejson/_speedups.cpython-35m-x86_64-linux-gnu.so.
Bedeutet das jetzt, dass ich das Modul oauth2client im Zusammenhang mit Libreoffice nicht verwenden kann?
Es tut mir leid, wenn ich solche Anfängerfragen stelle... Irgendwann fängt jeder einmal an.

lg scientific

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Google-API

Beitrag von scientific » Mi 2. Mär 2016, 16:57

scientific hat geschrieben:Ich habe jetzt auf meinem Windowsrechner (Win7) oauth2client und google-api-pyhton-client installiert.

Der Aufruf direkt mit Python funktioniert auch, es werden Events erstellt bzw. die Liste der Kalender oder Events abgerufen.
Ich habe mich an diese Anleitung gehalten: https://developers.google.com/google-ap ... art/python
Anders gefragt... wie würdest du dieses Beispiel quickstart.py umgestalten, dass es sich aus LO heraus auch starten lässt. Und geht das überhaupt?

lg scientific

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Google-API

Beitrag von karolus » Mi 2. Mär 2016, 17:13

Hallo
Bedeutet das jetzt, dass ich das Modul oauth2client im Zusammenhang mit Libreoffice nicht verwenden kann?
Das kann man so pauschal nicht sagen, man müsste halt schauen was man benutzen kann, und wie man die Teile die Benutzenamen, Passphrasen, etc per (Benutztereingabe auf Kommandozeile) abhandeln sinnvoll ersetzen kann -- und nein! -- den Job erledige ich momentan nicht für dich.
Es tut mir leid, wenn ich solche Anfängerfragen stelle... Irgendwann fängt jeder einmal an.
korrekt --die Frage ist auch nicht wann sondern womit man anfängt -- du hast ja auch nicht in der dritten Grundschulklasse mit Differential- und Integralrechnung losgelegt.
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Google-API

Beitrag von scientific » Mi 2. Mär 2016, 17:31

Nur so eine Frage... hast du dir das Beispiel quickstart.py überhaupt angesehen?

Das macht nämlich genau, was es soll. Es sieht im Dateisystem an definierter Stelle nach, ob User-Credentials existieren und verwendet diese. Wenn nicht, öffnet es einen Browser (Fenster oder Tab) um die Erlaubnis mit dem eigenen Google-Konto abzufragen und legt dann diese Credentials im Dateisystem an der definierten Stelle ab.

Mit deinem Beispiel des manuellen Definierens von sys.argv und ein paar Kunstgriffen um das Ganze zu verstehen, gelang es mir jetzt zumindest bis zu einem Punkt vorzudringen, wo aus Libreoffice heraus dieses Authorisierungs-Browserfenster geöffnet wird, so noch keine Credentials hinterlegt sind.

Ich ende derzeit noch in einem 403 - Not Authorized-Error... aber ich bin schon einen Schritt weiter.

Vielen Dank für deinen wertvollen Hinweis.

lg scientific


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten