OneDrive への接続方法まとめ

[Home] 投稿日 2015/05/28


はじめに

Microsoft の OneDrive (旧 SkyDrive) ですが、Microsoft アカウント (Hotmail ID) を持っていれば、誰でも使える便利なサービスです。特にモバイルユーザには便利でしょうね。

このサービスですが、通常はブラウザ経由、Windows 8.1 だとデスクトップから Explorer 経由で簡単にアクセスできます。でも、OneDrive を使って何かを自動化したいとなると、アプリケーションの認証が必要になります。以下ではこの認証に必要なアクセストークンの取得手順を調べた結果を報告させていただきます。


大まかな手順

  1. たいていの人は Microsoft アカウントを持っているでしょうけど、もし持ってなければ下記のサイトで取得します。
    Microsoft アカウント
  2. localhost 以外のウェブサイトを用意します。これは、一連の手順でリダイレクト先として使用されます。プロバイダが提供している無料ホームページサービスみたいなものでもかまいません。それもない場合は、Microsoft Azure の無料枠を利用するとかします。
  3. 必要なデータを POST するためのHTMLページを作成しておきます。(下記「Access Token の取得」参照)
  4. 画像ファイル (48 x 48 または 50 x 50, 形式は png, jpg, gifのどれか) を用意しておきます。これはアプリケーションロゴとして使用されます。
  5. 下記の Live Connect Developers Site で、[アプリケーションの作成] リンクをクリックして登録します。
    Live Connect Developers Site
  6. Live Connect Developers Site で「クライアントID」と「クライアントシークレット」を取得します。(他にもいろいろ情報入力を行うので、画面全体を保存しておいた方が無難です)
  7. OAuth 2.0 で認証をおこない Auth Code を取得する。これは 1 時間しか有効期間がないので注意。
  8. 前に取得した Auth Code を使って Access Token を取得する。
  9. 取得した Access Token を使って必要なウェブサービスを呼び出す。(参考) リクエスト、レスポンスは JSON ベースである。

クライアントID とクライアントシークレットの取得

下記のアドレスをブラウザで開きます。(Microsoft Accountが必要)

Live Connect Developers Site

画面は3画面構成になっています。必要な項目を入力して「保存」ボタンをクリックします。保存されたのを確認してキャンセルボタンの下のリンクをクリックします(自動的には画面は切り替わりません)。

1画面目
2画面目
3画面目 ここで表示されたクライアントIDとクライアントシークレットを必ず保存しておく。

Auth Code の取得

クライアントID とクライアントシークレットを使って下記のURLを開きます。

https://login.live.com/oauth20_authorize.srf?response_type=code&client_id=000000004???????&scope=wl.signin%20onedrive.readonly&redirect_uri=http://your_website/page

client_id=000000004??????? は前に取得済みのクライアントIDです。redirect_uri=http://your_website は2画面目で入力したリダイレクトURLを指定します。

指定したリダイレクト URL のページが開くので、その URL "http://your_website/page?code=....... " の code の値 (code=...の...部分) を保存します。これが Auth Code です。この Auth Code の有効時間は1時間なので注意してください。

(例) http://your_website/page?code=Ma3b4a74f-84fa-86dd-2372-0183702b4451

Access Token の取得

アクセストークンは Auth Code とその他の情報を POST することにより取得できます。POST フォームは次のような感じになります。code は Auth Code, client_id はクライアントID、client_secret はクライアントシークレットです。

<form method="post" action="https://login.live.com/oauth20_token.srf">
grant_type: <input type="text" name="grant_type" value="authorization_code" /><br />
code: <input type="text" name="code" value="Ma3b4a74f-84fa-86dd-2372-?????????" /><br />
client_id: <input type="text" name="client_id" value="000000004??????" /><br />
client_secret: <input type="text" name="client_secret" value="SDurkEwg4i?????????????????????" /><br />
redirect_uri: <input type="text" name="redirect_uri" value="http://you_website/page" /><br />

<input type="submit" value="Submit" /><br />
</form>

呼出しが成功すると、下のような JSON が返ってくるのでそれを保存します。

{"token_type":"bearer","expires_in":3600,"scope":"wl.signin onedrive.readonly",
"access_token":"EwBwAq1DBAAUGCCXc8wU/zFu9QnLdZXy+YnElFkAAbudvk4b/YjWC5fl4t4JTJpb24FOYk
RJtyu52vtoxXtaWSJtnIl66VFhv+sx+AHf6+AWzFbeCKTpfwpgEDkIEMi5oIfsTpUMhXzHABzt9X7kofE/+7QA
XgN8fKrWJAv4NCx0L/nmzIE33HZVQolZOVmQIKOXRXYgdaN828dunVzoxUkcDOi1Gz/6mcIoaCLa7ik8L8EdRw8lO7
YzoP38Hb+RO1shZObjmxAJa+e8N5EwaGW09ZWSeIJjathI8XUSoklbCPLYD7w7Qyd0z/dZ3HbGtwq4pNZGaOc
DvSdDsKjXo5ylGE+MxJSwNhvN+ecA???????????????????????????????????????????????????????
????????????????????????????????????iYXBwaWQ6Ly8wMDAwMDAwMDQ4MTU3NUQzIiwidXJuOm1p
Y3Jvc29mdDphcHBpZCI6IjAwMDAwMDAwNDgxNTc1RDMifQ.k9oeD8vU-GSnjiAoWd8MfamPLOL323Zga
5UpKb_wLmE","user_id":
"8aa9e15d62fb3??????e178d9cfce"}

サービスの呼び出し

上で取得したアクセストークンを使ってサービスを呼び出します。下の例は、OneDrive の (root の) アイテム (Folder, File) の一覧を取得するため、以下の通り GET 要求 (Request) を出します。

https://api.onedrive.com/v1.0/drive/root/children?access_token=EwA4Aq1DBAAUGCCXc8w...

呼出しが成功すると下のような JSON が返ってくるはずです。

{"@odata.context":"https://api.onedrive.com/v1.0/$metadata#drives('me')/items('root')/
children","value":[{"createdBy":{"user":{"displayName":"user","id":"1e8ff4d96d6804a4"}},   
"createdDateTime":"2011-02-20T06:17:34.257Z","cTag":"adDoxRThGRjREOTZENjg????????2MzU
 1Njc4NzI2Mzk0MzAwMDA","eTag":"aMUU4RkY0RDk2RDY4?????E0OTEuMQ","id":
 "1E8FF????D6804A4!491","lastModifiedBy":{"user":{"displayName":"user","id":
 "1e???????6804a4"}},"lastModifiedDateTime":"2015-01-13T23:07:43.943Z","name":"pub",
 "parentReference":{"driveId":"1e8ff????d6804a4","id":"1E8FF4???????804A4!157",
 "path":"/drive/root:"},
 "size":69276,"webUrl":"https://onedrive.live.com/redir?resid=1E8FF4D96D?????A4!491",
 "fileSystemInfo":{"createdDateTime":"2011-02-20T06:17:34.257Z","lastModifiedDateTime":
 "2012-01-05T12:13:45.847Z"},"folder":{"childCount":3}},{"createdBy":...

参考資料

 

このページの先頭へ