Kategorien
Python

Raspberry Pi – Sicherer Zugriff auf WordPress mit Python wordpress-api

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":
...