Wäre es nicht cool, wenn die Raspberry Pi Artikel auf meiner Webseite erstellen und verändern könnte?
Und das mit einem eigenen User (Pi o.ä.)?
Wer WordPress einsetzt, hat es relativ einfach, da seit der Version 4.8 die REST Schnittstelle standardmäßig installiert ist.
Für ältere Versionen kann man entsprechende Plugins nachrüsten.
Man kann einfach feststellen, ob die REST Schnittstelle aktiv ist, indem man der Domain ‚wp-json‘ hinzufügt.
In meinem Fall sollte http://www.henrykoch.de/wp-json einen JSON String ahnlich dem Folgenden im Browser anzeigen.
"name":"www.HenryKoch.de","description":"","url":"http:\/\/www.henrykoch.de","home":"http:\/\/www.henrykoch.de\/de","gmt_offset":2,"timezone_string":"Europe\/Berlin"
Installation der Python wordpress-api
Für die Installation der WordPress Api für Python, bin ich dieser Anleitung gefolgt https://pypi.python.org/pypi/wordpress-api/1.2.2, was bei mir nicht auf sofort funktionierte.
Ich musste zusätzliche Pakete installieren, um die API zum Laufen zu bringen.
So funktionierte es auf der Raspberry Pi B+
sudo apt-get update sudo apt-get install libxml2-dev sudo apt-get build-dep python3-lxml pip install wordpress-api
Libxml und lxml hatten bei mir gefehlt.
Authentifizierung
Damit habe ich relativ viel Zeit verbracht.
Ich wollte eine echte OAuth Autentifizierung und scheiterte mit dem REST oauth1 Plugin.
Nach langen Hin und Her habe ich folgenden Plugin installiert: WP OAuth Server
Nach der Installation, kann man im Dashboard auf der linken Seite einen ‚OAuth Server‘ Eintrag sehen.
Dort habe ich einen USER erstellt.
Danach wird der USER inklusive Client ID (consumer_key im Python script) aufgelistet.
Zusätzlich kann der Secret Key angezeigt werden, der im Python Skript bei consumer_secret angegeben wird.
erstes Test Skript
#!/usr/bin/python # -*- coding: utf-8 -*- from wordpress import api as wpapi from wordpress import API wpapi = API( url="http://ai.henrykoch.de/", #your URL consumer_key="xxxxxxxxxxxxx", #your key consumer_secret="xxxxxxxxxxxxx", #your secret key api="wp-json", version="wp/v2", wp_user="xxx", #your wp User wp_pass="xxx" #wp users password ) r = wpapi.get("posts") print r.status_code print r.headers['content-type'] print r.encoding print r.text print r.json()
das Ergebnis
pi@raspberrypi:~/python/Wordpress $ python myscript.py 200 application/json; charset=UTF-8 UTF-8 [{"id":1,"date":"2017-08-08T15:25:58","date_gmt":"2017-08-08T13:25:58","guid":{"rendered":"http:\/\/ai.henrykoch.de\/?p=1"},"modified":"2017-08-08T15:38:46","modified_gmt":"2017-08-08T13:38:46","slug": ...