Für ein aktuelles Projekt brauche ich sämtliche WordPress-Beiträge im JSON-Format. Eigentlich hatte ich PHPStorm schon gestartet und wollte anfangen, das Ganze zu Programmieren. Da ich nicht sonderlich gerne für WP entwickle, war die Motivation entsprechend gering. Also doch noch einmal kurz eine Google-Suche angestoßen.
Nach kurzer Zeit hatte ich dann auch schon das PlugIn JSON API gefunden. Hier bekommt man nicht nur die letzten Posts, sondern auch jede Menge andere Informationen zur Verfügung gestellt. So könnte man auch die gespeicherten Seiten auslesen, Posts von bestimmten Autoren und so weiter. Die Liste der zur Verfügung gestellten Funktionen ist lang:
- info
- get_recent_posts
- get_posts
- get_post
- get_page
- get_date_posts
- get_category_posts
- get_tag_posts
- get_author_posts
- get_search_results
- get_date_index
- get_category_index
- get_tag_index
- get_author_index
- get_page_index get_nonce
Und das ist nur der core – theoretisch kann das PlugIn noch mehr liefern. Unter domain.de/api/<Funktion> kann man die Informationen dann abrufen. Blöd ist nur, dass das dann eben jeder kann. Viel einfacher kann man es anderen nicht machen, die Inhalte vom eigenen Blog zu kopieren – so schön aufbereitet findet man die benötigten Informationen selten.
Also musste eine Lösung her, wie ich die API schütze. Über die Settings habe ich keine entsprechende Lösung gefunden – eine einfache HTTP-Basic-Authentication würde mir ja schon reichen. Aber nichts.
Um das PlugIn nicht umprogrammieren zu müssen, habe ich mich für eine Lösung per .htaccess entschieden. Also fix einen Zufalls-Key generiert und diesen abgefragt. Existiert der Schlüssel nicht, bekommt man Forbidden (403) zurück. Das sollte mir also erstmal reichen.
RewriteCond %{REQUEST_URI} ^/api/ RewriteCond %{QUERY_STRING} !(^|&)VwSSSYK9kFdsafz234g9sdSADfjkdlgysEm9vV9Ft($|&) RewriteRule ^(.*)$ / [R=403,L]
Viel Zeit gespart! Die eigentlich Arbeit konnte beginnen.