Help us understand the problem. What is going on with this article?

Python で Wunderlist API を使ってみる

More than 3 years have passed since last update.

タスク管理、してますか?

タスク管理アプリケーションとして有名な Wunderlist の API に Python で触ってみました。API の Document もしっかり書いてあるので扱いやすい API だと思います。認証は OAuth2 が使われています。

1. 下準備

自分の Wunderlist のアカウントがあるのが最低条件です。
まず、自分のアカウントを使って下記ページにログインします。
https://developer.wunderlist.com/

その後、REGISTER YOUR APP をクリック
スクリーンショット 2015-11-13 15.17.05.png

登録画面が出てくるので、必要事項を入力し、SAVEをクリック。後からでも変更できますが、NAME、APP URL、AUTH CALLBACK URL は入力必須です。
スクリーンショット 2015-11-13 15.21.26.png

すると CLIENT ID と CLIENT SECRET が取得できます。
スクリーンショット 2015-11-13 15.21.52.png

今回は簡略化のために、自分のアカウントに対する ACCESS TOKEN を取得します。CREATE ACCESS TOKEN をクリックしましょう。
スクリーンショット 2015-11-13 15.32.46.png

自分のアカウント情報を取得するのに必要なのは CLIENT ID と ACCESS TOKEN の2つです。必要な情報が取得できたので、早速ユーザー情報を取得してみます。

oauth2 認証には Requests-Oauthlib というライブラリを使用させてもらいました。
認証の詳細は ここ に書いてあります。リクエストするヘッダー情報に X-Client-ID と X-Access-Token をつければOK。

from requests_oauthlib import OAuth2Session
import json

client_id = "YOUR CLIENT ID"
access_token = "YOUR ACCESS TOKEN"
url = "https://a.wunderlist.com/api/v1/user"
params = {}

wunderlist = OAuth2Session()
wunderlist.headers['X-Client-ID'] = client_id
wunderlist.headers['X-Access-Token'] = access_token
req = wunderlist.get(url, params=params)

if req.status_code == 200:
    user = json.loads(req.text)
    print user['name']
else:
    print ("Error: %d" % req.status_code)

無事、自分のユーザー名が表示されたでしょうか?

2. API に触ってみる

a. リストの一覧を取得してみる

https://developer.wunderlist.com/documentation/endpoints/list

url を変更

url = "https://a.wunderlist.com/api/v1/lists"

リストの id はタスクを CRUD するのに使います。

req = wunderlist.get(url, params=params)

if req.status_code == 200:
    lists = json.loads(req.text)
    for list in lists:
        print list["id"], list["title"].encode('utf-8')
else:
    print ("Error: %d" % req.status_code)

b. タスクを作成する

url と params を変更します。ちなみに買い物リストで一番書かれることが多いのはトイレットペーパーだそうで。(本社の人の情報なので間違いないです。)

url = "https://a.wunderlist.com/api/v1/tasks"
params = {
    "list_id": "買い物リストのID", #integer
    "title": "トイレットペーパー", #string
}

今度は GET ではなく POST ですね。status_code も変わります。

req = wunderlist.post(url, json=params)

if req.status_code == 201:
    print "New task was successfully created."
else:
    print ("Error: %d" % req.status_code)

自分の Wunderlist を見て、買い物リストにトイレットペーパーが追加されていればOKです。

c. タスクを完了する

タスクのアップデートに当たります。さっき追加したトイレットペーパーを買ったことにしましょう。

url と params を変更します。

url = "https://a.wunderlist.com/api/v1/tasks/"
params = {
    "revision": 1, # 基本は1で大丈夫
    "completed": True,
}
task_id = "トイレットペーパーのID"
url += task_id

PATCH という関数を使います。

req = wunderlist.patch(url, json=params)

if req.status_code == 200:
    print "Task was successfully completed."
else:
    print ("Error: %d" % req.status_code)

Wunderlist を確認してトイレットペーパーのタスクが完了していることを確かめましょう。

タスクやリストの id は Web版の Wunderlist の url を見れば一目瞭然だと思います。

Kei18
I'm not good at coding, but I like it.
https://kei18.github.io
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした