Skip to main content

A Python wrapper for the Wordpress REST API

Project description

A Python wrapper for the Wordpress REST API that also works on the WooCommerce REST API v1-3 and WooCommerce WP-API v1. Forked from the excellent Wordpress API written by Claudio Sanches @ WooThemes and modified to work with Wordpress: https://github.com/woocommerce/wc-api-python

I created this fork because I prefer the way that the wc-api-python client interfaces with the Wordpress API compared to the existing python client, https://pypi.python.org/pypi/wordpress_json which does not support OAuth authentication, only Basic Authentication (very unsecure)

Roadmap

  • [x] Create initial fork

  • [x] Implement 3-legged OAuth on Wordpress client

  • [ ] Implement iterator for convent access to API items

Requirements

You should have the following plugins installed on your wordpress site:

The following python packages are also used by the package

  • requests

  • beautifulsoup

Installation

Install with pip

pip install wordpress-api

Download this repo and use setuptools to install the package

pip install setuptools
git clone https://github.com/derwentx/wp-api-python
python setup.py install

Testing

If you have installed from source, then you can test with unittest:

python -m unittest -v tests

Getting started

Generate API credentials (Consumer Key & Consumer Secret) following these instructions: http://v2.wp-api.org/guide/authentication/

Check out the Wordpress API endpoints and data that can be manipulated in http://v2.wp-api.org/reference/.

Setup

Setup for the old Wordpress API:

from wordpress import API

wpapi = API(
    url="http://example.com",
    consumer_key="XXXXXXXXXXXX",
    consumer_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    api="wp-json",
    version=None,
    wp_user="XXXX",
    wp_pass="XXXX"
)

Setup for the new WP REST API v2:

#...

wpapi = API(
    url="http://example.com",
    consumer_key="XXXXXXXXXXXX",
    consumer_secret="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    api="wp-json",
    version="wp/v2",
    wp_user="XXXX",
    wp_pass="XXXX"
)

Setup for the old WooCommerce API v3:

#...

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    api="wc-api",
    version="v3"
)

Setup for the new WP REST API integration (WooCommerce 2.6 or later):

#...

wcapi = API(
    url="http://example.com",
    consumer_key="ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    consumer_secret="cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    api="wp-json",
    version="wc/v1"
)

Options

Option

Type

Required

Description

url

string

yes

Your Store URL, example: http://wp.dev/

consumerKey

string

yes

Your API consumer key

consumerSecret

string

yes

Your API consumer secret

api

string

no

Determines which api to use, defaults to wp-json, can be arbitrary: wc-api, oembed

version

string

no

API version, default is wp/v2, can be v3 or wc/v1 if using wc-api

timeout

integer

no

Connection timeout, default is 5

verify_ssl

bool

no

Verify SSL when connect, use this option as False when need to test with self-signed certificates

query_string_auth

bool

no

Force Basic Authentication as query string when True and using under HTTPS, default is False

Methods

Params

Type

Description

endpoint

string

API endpoint, example: posts or user/12

data

dictionary

Data that will be converted to JSON

GET

  • .get(endpoint)

POST

  • .post(endpoint, data)

PUT

  • .put(endpoint, data)

DELETE

  • .delete(endpoint)

OPTIONS

  • .options(endpoint)

Response

All methods will return Response object.

Example of returned data:

>>> r = wpapi.get("posts")
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=UTF-8'
>>> r.encoding
'UTF-8'
>>> r.text
u'{"posts":[{"title":"Flying Ninja","id":70,...' // Json text
>>> r.json()
{u'posts': [{u'sold_individually': False,... // Dictionary data

Changelog

1.2.1 - 2016/12/13

  • tested to handle complex queries like filter[limit]

  • fix: Some edge cases where queries were out of order causing signature mismatch

  • hardened helper and api classes and added corresponding test cases

1.2.0 - 2016/09/28

  • Initial fork

  • Implemented 3-legged OAuth

  • Tested with pagination

Project details


Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page