Python-SDK
Überblick
Mit dem Python-SDK können Sie mithilfe der Programmiersprache Python mit LivingApps interagieren.
Sie können die Daten die Sie in den Datenquellen für eines Ihrer Anzeige-Templates konfiguriert haben, abrufen, neue Datensätze anlegen, sowie existierende ändern und löschen.
Installation
Das Python-SDK benötigt mindestens Python 3.6. Zum Anlegen eines virtuellen
Environment wird außerdem das venv
-Modul benötigt. Des weiteren wird zur
Installation evtl. ein C-Compiler benötigt. Wenn dies nicht bereits Teil der
Standard-Installation auf Ihrem System ist, kann beides mittels:
$ apt-get install python3.6-venv python3.6-dev
installiert werden (bzw. mit dem äquivalenten Aufruf für Ihr System).
Sodann sollte eine neue virtuelle Umgebung angelegt werden, in der alle
benötigten Module installiert werden. Wir nennen diese virtuelle Umgebung
livingapps
und installieren sie im Verzeichnis ~/pyvenvs
:
$ python3.6 -mvenv ~/pyvenvs/livingapps
Anschließend können wir diese Umgebung aktivieren:
$ . ~/pyvenvs/livingapps/bin/activate
Um Sie darauf hinzuweisen, daß Sie diese Umgebung aktiviert haben, wird forthin
dem Prompt der Name der Umgebung als Präfix vorangestellt. D.h. der Prompt ist
ab jetzt (livingapps) $
.
Um das Python-SDK selbst zu installieren, gehen Sie folgenden Befehl ein:
(livingapps) $ pip install ll-la
Dabei werden auch die benötigten Module ll.xist
, requests
und
geocoder
installiert.
Um das interaktive Ausprobieren des Python-SDK zu vereinfachen, empfielt es sich IPython zu installieren mittels:
(livingapps) $ pip install ipython
(Die folgenden Beispiele zeigen die Verwendung von IPython).
Beispiel-App
Als Beispiel-App benutzen wir eine App, mit der wir Daten zu berühmten Personen verwalten. Wir legen zwei Apps an. Die erste (namens „Persons“) enthält die Personen selbst. Sie hat folgende Felder:
Name |
Identifizierer |
Typ |
Sonstiges |
---|---|---|---|
Firstname |
|
|
|
Lastname |
|
|
|
Sex |
|
|
Auswahl |
Field of activity |
|
|
Mehrfach-Auswahl aus der zweiten App |
Date of birth |
|
|
|
Date of death |
|
|
|
Grave |
|
|
|
Portrait |
|
|
Die zweite App (namens „Fields of activity“) verwaltet die Tätigkeitsfelder und hat zwei Felder:
Name |
Identifizierer |
Typ |
Sonstiges |
---|---|---|---|
Name |
|
|
|
Parent |
|
|
Auswahl aus derselben App |
Vorbereitungen in der App
Damit Sie auf die Daten Ihrer App zugreifen können, müssen Sie für jeden Datenexport den Sie benötigen, das passende Anzeige-Template anlegen. Dazu muß Ihr Account vom Administrator als Experten-User freigeschaltet worden sein.
In Kürze: Fügen Sie unter Anzeige-Templates ein neues Anzeige-Template hinzu. Verwenden Sie
als Identifizierer export
, setzen Sie den Typ auf
Liste und setzen Sie Standard?.
Bei Quelltext muß nichts eingegeben werden (da wir die Daten ja gar nicht in dem Anzeige-Template anzeigen wollen, sondern mit dem SDK darauf zugreifen wollen). Bei Berechtigung für können Sie auswählen, wer auf diese Daten zugreifen darf. (Wenn Sie alle Benutzer wählen, muß der Benutzer nicht eingeloggt sein, um zugreifen zu können, d.h. die Daten sind öffentlich.) Klicken Sie auf Speichern um Ihr Anzeige-Template abzuspeichern.
Sodann können Sie die Datenquellen die Sie benötigen unter
Datenquellen anlegen. Wir legen hier zwei Datenquellen für unsere
beiden Apps an. Klicken Sie bei Ihrem neuen Anzeige-Template auf den
Maskenlink Datenquellen und dann auf Hinzufügen. Bei
App wählen Sie die App „Persons“ aus, als Identifizierer
geben Sie persons
ein, bei Felder/Datensätze wählen Sie
Felder und Datensätze, sowie bei Felder
Alle Felder. Klicken Sie dann auf Speichern um Ihren
neue Datenquelle abzuspeichern.
Legen Sie nun eine zweite Datenquelle für die App „Fields of activity“ an (mit
dem Identifizierer fieldsofactivity
).
Eine ausführliche Beschreibung von Anzeige-Templates und Datenquellen findet sich unter Anzeige-Templates.
Verwendung des SDKs
Starten Sie IPython mit
(livingapps) $ ipython
Python 3.6.4 (default, Jan 15 2018, 09:29:23)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
Anschließend importieren Sie das la
-Modul:
In [1]: from ll import la
Nun können Sie sich mit Ihrem Account bei LivingApps einloggen:
In [2]: handler = la.HTTPHandler("https://my.living-apps.de/", "username", "password")
Benutzername und Passwort kann auch weggelassen werden, dann können Sie nur auf öffentliche Anzeige-Templates zugreifen, d.h. auf Templates, bei denen unter Berechtigung für alle Benutzer ausgewählt wurde.
Um nun von Ihrer App und Ihren Anzeige-Template Daten abzuholen, benötigen Sie den Identifizierer Ihrer App. Diesen finden sie wenn Sie sich auf der Startseite der jeweiligen App befinden. Die URL diese Seite lautet in unserem Beispiel:
https://my.living-apps.de/apps/5bffc841c26a4b5902b2278c.htm
5bffc841c26a4b5902b2278c
ist dann der gesuchte Identifizierer.
Damit können Sie dann die Daten holen, die Sie für Ihr Template konfiguriert haben:
In [3]: data = handler.viewtemplate_data("5bffc841c26a4b5902b2278c")
In [4]: data
Out[4]:
{'globals': <ll.la.Globals version='7' platform='LivingApps' at 0x56d62e8>,
'app': <ll.la.App id='5bffc841c26a4b5902b2278c' name='LA-Demo: Persons' at 0x56d6080>,
'record': None,
'apps': {'5bffc841c26a4b5902b2278c': <ll.la.App id='5bffc841c26a4b5902b2278c' name='LA-Demo: Persons' at 0x56d6080>,
'5bffc44c5be111d74ed79972': <ll.la.App id='5bffc44c5be111d74ed79972' name='LA-Demo: Fields of activity' at 0x57d0550>},
'datasources': {'persons': <ll.la.DataSource id='5bffccdb8cd2298964e2c7b1' identifier='persons' at 0x57ca1d0>,
'fieldsofactivity': <ll.la.DataSource id='5bffdadd22f815dd7480dfcc' identifier='fieldsofactivity' at 0x57ca208>}}
Wenn Sie ein weiteres Anzeige-Template angelegt haben (z.B. mit dem
Identifizierer specialexport
), können Sie die Daten holen, indem Sie diesen
Template-Identifizierer als zweites Argument übergeben:
In [3]: data = handler.viewtemplate_data("5bffc841c26a4b5902b2278c", "specialexport")
(d.h. bei dem Anzeige-Template, das als Standard? konfiguriert wurde, muß der Template-Identifizierer nicht angegeben werden).
Das Objekt data
, das Sie als Ergebnis erhalten, besitzt drei Attribute:
globals
Globale Informationen zum System und dem eingeloggten Benutzer. Dieses Python-Objekt unterstüzt die unter Globals dokumentierten Attribute und Methoden der LivingAPI, die Ihnen im Sourcecode des Anzeige-Templates zur Verfügung stehen.
datasources
Ein Dictionary mit den von Ihnen konfigurierten Datenquellen. Die Keys sind die Identifizierer und die Werte DataSource-Objekte. Diese Objekte unterstützen ebenfalls die LivingAPI.
app
Die App, zur der das Anzeige-Template gehört (d.h. die App, deren Id Sie an den
get()
-Aufruf übergeben haben).
Damit können wir auf unsere App „Fields of activity“ folgendermaßen zugreifen:
In [3]: tfapp = data.datasources.fieldsofactivity.app
In [4]: tfapp
Out[4]: <ll.la.App id='5bffc44c5be111d74ed79972' name='LA-Demo: Fields of activity' at 0x10b857d30>
Die Datensätze sind folgendermaßen zugänglich:
In [5]: for r in tfapp.records.values():
......: print(r.v_name)
......:
Sport
Politics
Literature
Industry
Music
Art
Physics
Maths
Science
Computer science
Film
In [6]:
Die Datensätze sind Record-Objekte und unterstützen die entsprechenden Attribute und Methoden.
Aus der anderen Datenquelle können wir uns die Daten zu den Personen holen:
In [6]: papp = data.datasources.persons.app
In [7]: list(papp.records.values())
Out[7]:
[<ll.la.Record
id='5bf40f8f11b9ceb4ce7c75ac'
v_firstname='Albert'
v_lastname='Einstein'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8dc511b06d3be85c7d'
v_name='Physics'
at 0x10fa3ea90>]
v_date_of_birth=datetime.date(1879, 3, 14)
v_date_of_death=datetime.date(1955, 4, 15)
at 0x10fa5beb8>,
<ll.la.Record
id='5bf40f8f2249662d2b4a8c0b'
v_firstname='Marie'
v_lastname='Curie'
v_sex=<ll.la.LookupItem key='female' label='Female' at 0x10fa5be10>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8dc511b06d3be85c7d'
v_name='Physics'
at 0x10fa3ea90>]
v_date_of_birth=datetime.date(1867, 11, 7)
v_date_of_death=datetime.date(1934, 7, 4)
at 0x10fa3ef98>,
<ll.la.Record
id='5bf40f8f2ecda576c9d524fe'
v_firstname='Muhammad'
v_lastname='Ali'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8e29069905fe8c71f7'
v_name='Sport'
at 0x10fa3e748>]
v_date_of_birth=datetime.date(1942, 1, 17)
v_date_of_death=datetime.date(2016, 6, 3)
at 0x10fa670b8>,
<ll.la.Record
id='5bf40f8f3cc3d6e19dbe5c50'
v_firstname='Marilyn'
v_lastname='Monroe'
v_sex=<ll.la.LookupItem key='female' label='Female' at 0x10fa5be10>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8de2efb2a43c8185d2'
v_name='Film'
at 0x10fa3e8d0>]
v_date_of_birth=datetime.date(1926, 6, 1)
v_date_of_death=datetime.date(1962, 8, 4)
at 0x10fa67160>,
<ll.la.Record
id='5bf40f8f493c32a841ade504'
v_firstname='Elvis'
v_lastname='Presley'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8dee0ef934d6fe34de'
v_name='Music'
at 0x10fa3e7f0>]
v_date_of_birth=datetime.date(1935, 1, 8)
v_date_of_death=datetime.date(1977, 8, 16)
at 0x10fa671d0>,
<ll.la.Record
id='5bf40f8f58b852d36c8dc59c'
v_firstname='Bernhard'
v_lastname='Riemann'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8dba17a22c136c8f5b'
v_name='Maths'
at 0x10fa3e9e8>]
v_date_of_birth=datetime.date(1826, 6, 17)
v_date_of_death=datetime.date(1866, 6, 20)
at 0x10fa67278>,
<ll.la.Record
id='5bf40f8f692fb0cfbaf2c5b7'
v_firstname='Carl Friedrich'
v_lastname='Gauß'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8dba17a22c136c8f5b'
v_name='Maths'
at 0x10fa3e9e8>]
v_date_of_birth=datetime.date(1777, 4, 30)
v_date_of_death=datetime.date(1855, 2, 23)
at 0x10fa67320>,
<ll.la.Record
id='5bf40f8f78befe7d55dc40c2'
v_firstname='Ronald'
v_lastname='Reagan'
v_sex=<ll.la.LookupItem key='male' label='Male' at 0x10fa5bd30>
v_fieldofactivity=[<ll.la.Record
id='5bf40f8de2efb2a43c8185d2'
v_name='Film'
at 0x10fa3e8d0>,
<ll.la.Record
id='5bf40f8e1202ba6352c2c3c9'
v_name='Politics'
at 0x10fa3e0b8>]
v_date_of_birth=datetime.date(1911, 2, 6)
v_date_of_death=datetime.date(2004, 6, 5)
at 0x10fa673c8>]