Seite 1 von 2
Google-API
Verfasst: Di 1. Mär 2016, 21:13
von scientific
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 00:12
von karolus
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.
Re: Google-API
Verfasst: Mi 2. Mär 2016, 10:12
von scientific
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 12:16
von scientific
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 13:51
von karolus
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:
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 14:18
von karolus
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)
Re: Google-API
Verfasst: Mi 2. Mär 2016, 14:31
von scientific
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 16:57
von scientific
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
Re: Google-API
Verfasst: Mi 2. Mär 2016, 17:13
von karolus
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.
Re: Google-API
Verfasst: Mi 2. Mär 2016, 17:31
von scientific
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