RからWunderlist APIを使うパッケージwunderlistrをつくりました

Rに管理されたい勢のみなさまこんにちは。

WunderlistというToDo管理ツールがあって前からちょっと気になってたところ、↓の記事を見かけました。

ということで(?)、RからAPIを使うパッケージをつくりました。これでもうRに管理され放題ですねっ!

インストール

Githubからインストールできます。

devtools::install_github("yutannihilation/wunderlistr")

使い方

基本的なノリ

それぞれのAPIの詳細は公式ドキュメントを見てください。

Documentation | Wunderlist Developer

一部の例外を除いて、wunderlistrの関数は以下のような命名規則になっています。

  • wndr_get_XXX: XXXの情報を取得する(例:wndr_get_task()はタスクの情報を取得する)
  • wndr_create_XXX: XXXを作成する(例:wndr_create_task()はタスクを新規に作成する)
  • wndr_update_XXX: XXXの情報を更新する(例:wndr_update_task()はタスクの情報を更新する)
  • wndr_delete_XXX: XXXを削除する(例:wndr_delete_task()はタスクを削除する)

認証

まず、WunderlistからOAuthのアクセストークンを取得します。wndr_access_token()httr::oauth2.0_token()を内部で使っていて、トークンをローカルファイルとして保存するか聞かれます。なお、ファイルとして保存しなくても、環境変数にキャッシュするようにしているので少なくとも同じセッション中であればキャッシュが効きます。

library(wunderlistr)

wndr_access_token()
#> Use a local file to cache OAuth access credentials between R sessions?
#> 1: Yes
#> 2: No
#> 
#> Selection:

これに答えると、ブラウザが立ち上がり、f:id:yutannihilation:20160328084304j:plain:w32というアイコンのアプリ連携の認証を求められます(注:ここの動作を確かめようと思ってアプリ連携の取り消しを探したんですが、どうやらないらしく、一度認証しちゃうと取り消す操作ができないみたいです。覚悟が必要です...信じてくださいとしか言いようがないですが...)

これが終わると、アクセストークンが表示されます。上述のようにキャッシュされるので覚える必要はありません。

#> [1] "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

リストを取得

さて、さっそくタスク一覧を取得したいですが、タスクを取得するには、

  • タスクのID
  • リストのID

のいずれかを指定する必要があります。タスクのIDをあらかじめ知ってたりしないかぎり、まずはリストのIDを取得します。wndr_get_list()を使います。

l <- wndr_get_list()
l
#>          id                  title owner_type owner_id list_type public revision               created_at type
#> 1 123456789                  inbox       user 111111111     inbox  FALSE        8 2016-03-26T19:53:32.997Z list
#> 2 123456788     映画とか舞台を観る       user 111111111      list  FALSE       17 2016-03-26T19:54:44.425Z list
#> 3 123456787           遠い人と会う       user 111111111      list  FALSE       23 2016-03-26T19:54:44.465Z list
#> 4 123456786               本を読む       user 111111111      list  FALSE        2 2016-03-26T19:54:44.458Z list
...

ここでrevisionというカラムがありますが、更新や削除をするにはこのrevisionを必ず指定しなくてはいけません。これが一致していないとエラーになります。

タスクを取得

先ほど取得したリストIDを指定して、そのリストに含まれるタスクを取得します。wndr_get_task()を使います。

t <- wndr_get_task(list_id = l$id[2])
t
#> id               created_at created_by_id
#> 1 2345678912 2016-03-26T20:02:44.224Z      11111111
#> 2 2345678913 2016-03-26T20:06:46.389Z      11111111
#> created_by_request_id   due_date completed
#> 1 xxxxxxxxxx 2016-05-14     FALSE
#> 2       <NA>       <NA>     FALSE
#> starred   list_id revision                                    title type
#> 1   FALSE 123456788        7                         殿、利息でござる task
#> 2   FALSE 123456788        4 Vamp Bamboo Burn~ヴァン・バン・バーン~ task

タスクを追加

そういえば、都内随一のエンターテイメント・Tokyo.Rが4月30日にあると風の噂で聞いたので、タスクに登録しておきましょう。

new_task <- wndr_create_task(list_id = l$id[2], title = "Toyko.R", due_date = as.POSIXct("2016-04-30 12:00"))
new_task
#> $id
#> [1] 2345678914
#> 
#> $created_at
#> [1] "2016-03-28T00:15:58.716Z"
#> 
#> $created_by_id
#> [1] 11111111
#> 
#> $due_date
#> [1] "2016-04-30"
#> 
#> $completed
#> [1] FALSE
#> 
#> $starred
#> [1] FALSE
#> 
#> $list_id
#> [1] 123456788
#> 
#> $revision
#> [1] 1
#> 
#> $title
#> [1] "Toyko.R"
#> 
#> $type
#> [1] "task"

タスクを更新

あれ、よく見ると誤字がありますね。なんだToyko.Rって??

ということで、修正します。情報を更新するにはwndr_update_task()を使います。

wndr_update_task(id = new_task$id, revision = new_task$revision, title = "Tokyo.R")
#> ...
#> $revision
#> [1] 2
#> 
#> $title
#> [1] "Tokyo.R"
#> ...

ちゃんと修正されてますね。

リマインダを設定

例によってまだATNDは立っていないので参加登録できません。忘れないようにリマインダを設定しておきます。wndr_create_reminder()を使います。

wndr_create_reminder(task_id = new_task$id, date = as.POSIXct("2016-04-01 10:00"))
#> $id
#> [1] 2468024
#> 
#> $date
#> [1] "2016-04-01T01:00:00.000Z"
#> ...

ファイルをアップロード

そういえばLTで使おうと思っていたネタ画像があったんだった。そんなときはファイルをアップロードしておきましょう。wndr_create_file()を使います。

wndr_create_file(task_id = new_task$id, filepath = "データサイエンティストさとようへいさん.png")
#> Part1: Geting upload info...
#> Part2: Upload to Amazon S3...
#> Part3: Marking the upload as finished...
#> file is successfully uploaded as ID 55555555
#> ...

ブラウザから確認すると、ちゃんとアップロードされていることがわかります。

f:id:yutannihilation:20160328093647p:plain

懺悔と感想

とまあ、こんなノリで使えます。一点謝っておかなくてはならないのは、ドキュメント書くのめんどくさくてまだヘルプが出ません…。関数の使い方は、しばらくは察するかAPIの公式ドキュメントを読んでください。すみません。

バグ報告や要望は、Github(英語)またはTwitter(日本語)などにお願いします。

こうしたツールを使って、Rによる素敵な管理社会を実現していきましょう。古事記にもこう書かれています:

2 + 2 <- 5 is a valid expression as far as the parser is concerned.

1984的な。