ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

Microsoft To-Do のタスクをAPIで取得してみる

MicrosoftのTo-Doというアプリを使って、普段は日々のタスクを管理しています。
このTo-DoのタスクはOutlookAPIを使って操作できるなので、やってみました。

まずはお試しなので、curlでタスクを取得するところまでです。

手順について

1. アプリの登録

APIでタスクを取得するためには、APIを叩くためのアプリを登録しておく必要があります。
https://apps.dev.microsoft.com/#/appList

こちらよりアプリを登録します。
以下の項目を登録しておきました。

  • アプリケーションID
  • アプリケーションシークレット
  • プラットフォームとしてネイディブアプリケーション
  • Microsoft Graph のアクセス許可として「Tasks.Read」

これらの値は以降の手順で使うので、参照できるようにしておいてください。

2. コードの取得

以降はブラウザやcurlでの操作となります。
まずコードを取得するため、以下の値をブラウザのURL欄に入れて起動します。

https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=アプリケーションID&response_type=code&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&response_mode=query&scope=offline_access%20user.read%20tasks.read&state=12345

上記を実行するとアクセス許可を求めるダイアログが出ます。許可をすると空白のページにリダイレクトされます。
リダイレクトされたページのURLにコードが書かれているので、それをメモしておきます。以下のようなURLになっているはずです。

https://login.microsoftonline.com/common/oauth2/nativeclient?code=コード&state=12345

3. アクセストークンの取得

アクセストークンを取得します。curlで以下のコマンドを実行します。

curl -X POST https://login.microsoftonline.com/common/oauth2/v2.0/token -H "HTTP/1.1" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=アプリケーションID&scope=offline_access%20user.read%20tasks.read&code=コード&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&grant_type=authorization_code"

正常に実行できると、json形式でアクセストークン、リフレッシュトークンが取得できます。
タスクの取得や更新などの操作にはアクセストークンを、アクセストークンがタイムアウトした場合にはリフレッシュトークンを使って再取得します。

4. タスクの取得

タスクを取得します。curlで以下のコマンドを実行します。

curl -i https://graph.microsoft.com/beta/me/outlook/tasks -H "Authorization: Bearer アクセストークン"

今回はbeta版のAPIを使って取得しました。バージョン1.0のAPIもあるのですが、この記事を書いている時点では個人用のMicrosoftアカウントでタスクは取得できないようです。
正常に実行できると、json形式でタスクが返ってきます。「subject」欄にあるのがタスク名ですが、日本語のタスク名はUnicode形式となっています。
今回は以下のサイトでデコードして確認しました。

Unicodeエスケープシーケンス変換|コードをホームページに載せる時に便利 | すぐに使える便利なWEBツール | Tech-Unlimited

5. アクセストークンの再取得

アクセストークンがタイムアウトした場合は、以下のコマンドで再取得します。

curl -i -X POST https://login.microsoftonline.com/common/oauth2/v2.0/token -H "HTTP/1.1" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=アプリケーションID&scope=offline_access%20user.read%20tasks.read&refresh_token=リフレッシュトークン&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&grant_type=refresh_token"

まとめ

以上の手順でTo-Doに登録したタスクを取得することができました。
単純なcurlでの取得でしたが、ここまでできればアプリに組み込むこともできるかと思います。