こんにちは。製品開発部の渡辺です。
昨今、AWSのS3をはじめとして、クラウド上のファイルストレージを利用したシステム構築はごく当たり前になってきました。SkyOnDemandにもAWS S3アダプタがあり、ご好評頂いております。
そんな中、個人でも手軽にアカウントが取れるMicrosoftアカウントで利用できるクラウドストレージの「One Drive」に、SkyOnDemandを使ってつないでみました。
「One Drive」とは
Microsoftがコンシューマ向けに展開しているクラウドストレージサービスになります。 Microsoftアカウントを取得することで利用できるようになります。
アップロードした、ExcelやWord、Power PointなどのOffice系ファイルは、Office Onlineを利用して閲覧・編集が可能になります。
ビジネス向けには、「OneDrive for business」というサービスが存在します。Office 365などから利用できる、有料のサービスになります。SharePoint Serverで管理されているので、コンシューマ向けの「One Drive」に比べファイル数や最大ファイルサイズなどに制限がある一方、SLAなどのビジネス向けの機能が付加されたサービスとなっています。(こちらの記事を参考にしました:OneDriveとOneDrive for Businessは何が違う?)
接続方式の概要
SkyOnDemandからOneDriveに接続する為には、RESTアダプタを利用します。
OneDriveのREST APIを利用し、最近主流となっているOAuth2.0による認証を利用して接続していきます。
OAuth認証に必要なクライアントIDやクライアントシークレットを取得するには、Microsoftアカウントでアプリケーションを作成する必要があります。
OneDriveに対する各種操作には"アクセストークン"が必要になります。取得方法はいくつかありますが、SkyOnDemandでスクリプトを作成し繰り返し使う事を考慮し、"リフレッシュトークン"を利用して取得していきます。
今回は以下のような流れで、OneDriveにファイルをアップロードしてみます。
- アプリケーションの作成
- 認証コードを取得し、リフレッシュトークンの取得
- リフレッシュトークンでアクセストークンを取得し、フォルダの作成
- リフレッシュトークンでアクセストークンを取得し、ファイルのアップロード
Step1: アプリケーションを作成する。
※Microsoftアカウントは事前に取得しておいてください。
Microsoft デベロッパーセンター(https://account.live.com/developers/applications/)へアクセスし、利用したいアカウントでログインします。
「アプリケーションの作成」というリンクから、アプリケーションの作成画面に進み、「アプリケーション名」と「言語」を設定し、[同意する]ボタンをクリックします。これで、アプリケーションが作成されます。
WebアプリケーションからAPIを利用する場合は、その他の設定も必要ですが、今回の作業では不要です。
左のメニューから「アプリケーション設定」を選択し、"クライントID"が発行されていることを確認します。
Step2: リフレッシュトークンを取得する。
リフレッシュトークンを取得する為に、認証コードが必要になります。
URL : https://login.live.com/oauth20_authorize.srf
[クエリパラメータ]
client_id :Step1で作成したアプリケーションのクライアントIDを指定します。
scope:取得した認証コードに対して付与する権限を指定します。(wl_skydrive_update, wl_offline_access, wl_singin )
response_type:"code" レスポンスの種類を指定します。
上記のリクエストをブラウザのアドレスバーに直接入力してリクエストを発行します。
ログイン画面が表示され、Step1でアプリケーションの作成時に利用したアカウントでログインします。リクエストのクエリーパラメータの"scope"に設定した権限に対する許可を求める画面が表示されますので、「はい」を選択します。
以下のような画面が表示され、アドレスバーに表示されたURLの中に「code」というパラメータが表示されています。
※以下のように存在しないページに遷移していますが、処理としてはエラーではありません。
Step1のアプリケーション設定で、"リダイレクトURL"を指定していると、[リダイレクトURL]?code=XXXXXという形で表示されますが、目的は「code=」の値を取得する事なので、本記事ではリダイレクトURLは設定しておりません。
この「code」の値が、認証コードになります。
ここから先は、SkyOnDemandでスクリプトを作りながら進めていきます。
RESTアダプタを利用して、POSTリクエストを実行しその結果からリフレッシュトークンを取得します。
URL:https://login.live.com/oauth20_token.srf
[リクエストヘッダー]
Content-type:application/x-www-form-urlencoded
[クエリーパラメータ]
client_id:Step1で作成したアプリケーションのクライアントIDを指定します。
client_secret:取得した認証コードに対して付与する権限を指定します。
code:直前のGETリクエスト実行後に、ブラウザのアドレスバーから取得したcodeの値
grant_type:"authorization_code"
スクリプト全体図:
exec_http_post to get refresh token:(RESTアダプタ-POST実行処理)
このスクリプトを実行し、正常終了しました。POSTリクエストのレスポンスからJSON形式のデータに、「refresh_token」というキーの値があり、これがリフレッシュトークンになります。
Step3: OneDriveにフォルダを作成する。
冒頭でも述べましたが、基本的な操作にはアクセストークンを使用しますが、アクセストークンは一度利用したり、取得後一定時間経過すると期限切れになってしまいます。
アクセストークンを取得し、それを利用して各種フォルダ/ファイル操作を実行していくスクリプトを作成します。
リフレッシュトークンを利用して、アクセストークンを取得するには次のPOSTリクエストを実行します。
URL:https://login.live.com/oauth20_token.srf
[リクエストヘッダー]
Content-type:application/x-www-form-urlencoded
[リクエストパラメータ]
client_id:Step1で作成したアプリケーションのクライアントIDを指定します。
client_secret:Step1で作成したアプリケーションのクライアントシークレットを指定します。
refresh_token:Step2で取得したリフレッシュトークン
grant_type:"refresh_token"
スクリプト全体図:
mapping:(マッピング)
exec_http_post to get access token:(RESTアダプタ-POST実行処理)
variable: (変数代入)
こちらのスクリプトを実行すると、レスポンスのJSON形式データ中に、"access_token"というキーがあり、これがOneDrive操作で必要となる、アクセストークンになります。
この値をスクリプト変数に格納し、以降の処理で利用できるようにします。
アクセストークンを取得してスクリプト変数に格納する処理は、フォルダ/ファイル操作で共通して利用できるので、1つのスクリプトとして保存し、スクリプトの呼び出しアダプタを利用して流用できます。
アクセストークンを取得できたので、これを利用してOneDrive上にフォルダを作成していきます。
以下の内容で、POSTリクエストを作成します。
URL:https://apis.live.net/v5.0/me/skydrive
[リクエストヘッダー]
Authorization:Bearer [取得したアクセストークン]
Content-type:application/json
[リクエストパラメータ]
name:[作成したいフォルダー名]
スクリプト全体図:
mapping:(マッピング)
execute_http_post Create Folder:(RESTアダプタ-POST実行処理)
この処理を実行して得られる、JSON形式のレスポンス内の"id"というキー値に、作成されたフォルダへファイル操作をする為のパスが記載されています。
実際にOneDrive(https://onedrive.live.com/)にログインすると、フォルダが作成されている事が確認できました。
Step4: OneDriveにファイルをアップロードする。
続いて、作成したフォルダにファイルをアップロードしていきます。
フォルダ作成と同様に、アクセストークンを取得するスクリプトに続けて以下の様なファイルアップロードのPOSTリクエストを作成します。
URL:https://apis.live.net/v5.0/me/skydrive/[フォルダ作成のレスポンス内の"id"の値]/?
[クエリパラメータ]
access_token=[取得したアクセストークン]
[リクエストパラーメータ]
Path:アップロードしたいファイルの、SkyOnDemand上のパス+ファイル名
Mime-type:アップロードしたいファイルのmime type
スクリプト全体:
mapping:(マッピング)
exec_http_post write_file:(RESTアダプタ-POST実行処理)
このスクリプトを実行し、正常に終了することが確認できました。
実際にOneDrive上で確認しましょう。先ほど作成したフォルダの中にファイルが作成されています。
ついでに、このファイルをダブルクリックしてみましょう。そのままOffice OnlineでExcelが起動してファイルの中身を確認することができました。
認証コードを取得したり、リフレッシュトークンを取得するまではやや面倒な手続きがありますが、リフレッシュトークンさえ取得できれば、アクセストークンの取得に始まり各種フォルダ/ファイル操作が簡単にできる事が確認できました。
実際のビジネスにおいて、SkyOnDemandでコンシューマ向けのこのようなサービスを利用するシーンは少ないかと思いますが、メールアダプタと併用して、添付ファイルだけをクラウドストレージに格納するといったような使い方はありそうですね。
また、SkyOnDemandでつないでみたら、投稿したいと思います。
それでは、今回はこの辺で。。。