XAML / C#UWPアプリケーションの世界からの興味深い/有用なことについて話し続けます。 OneDrive APIはMicrosoft Graphの一部です。 OneDriveを使用するには、HTTPプロトコル、特にそのメソッドGET、POST、DELETE、PUTを使用するOneDrive REST APIを使用できます。
さらに、Microsoftの新しい原則に従って、CSharpラッパーライブラリ用のOneDrive SDKが作成されました。これにより、アプリケーションのコードからのサービスの使用と使用が容易になります。
OneDrive SDK for CSharpは、以下のタイプのプロジェクト向けに設計されたポータブルクラスライブラリ(PCL)です。
.NET 4.5.1
.NET for Windowsストアアプリ
Windows Phone 8.1以降
SDKをインストールするには、 NuGetパッケージマネージャーのコンソールでコマンドを実行できます。
Install-Package Microsoft.OneDriveSDK
または、NuGet VSマネージャーで、 Microsoft.OneDriveSDKフレーズ検索を使用します
ユニバーサルアプリケーションを作成したら、Windowsストアに関連付ける必要があります。 したがって、Live SDKアプリケーショングループに自動的に登録されます。 https://apps.dev.microsoft.com/#/appListで 、アプリケーションがLive SDKアプリケーショングループに登録されていることを確認できます。 私の理解では、すべてのWindowsストアアプリはデフォルトでこのグループに分類されます。
認証は数行のコードで行われます:
string[] scopes = { "wl.signin", "onedrive.readwrite" }; IOneDriveClient _client = OneDriveClientExtensions.GetClientUsingOnlineIdAuthenticator(scopes); await _client.AuthenticateAsync();
すべての権利/許可(スコープ)は、 認証スコープで利用できます。
認証中に、ユーザーがデータを入力できる新しいウィンドウが開きます。
次のコードを使用して終了できます。
await _client.SignOutAsync();
最も典型的なファイル操作を説明します。 このスニペットを使用してファイルをダウンロードできます。
string[] scopes = { "wl.signin", "onedrive.readwrite" }; IOneDriveClient _client = OneDriveClientExtensions.GetClientUsingOnlineIdAuthenticator(scopes); AccountSession session = await _client.AuthenticateAsync(); if (!_client.IsAuthenticated) return; Item item = await _client .Drive .Root .ItemWithPath("CodeExamples/MyDemo.zip") .Request() .GetAsync(); using (Stream contentStream = await _client .Drive .Items[item.Id] .Content .Request() .GetAsync()) { StorageFile file = await ApplicationData.Current.LocalFolder. CreateFileAsync("MyDemo.zip", CreationCollisionOption.OpenIfExists); using (Stream outputstream = await file.OpenStreamForWriteAsync()) { await contentStream.CopyToAsync(outputstream); } }
これを使用してダウンロードします。
string[] scopes = { "wl.signin", "onedrive.readwrite" }; IOneDriveClient _client = OneDriveClientExtensions.GetClientUsingOnlineIdAuthenticator(scopes); AccountSession acse = await _client.AuthenticateAsync(); if (!_client.IsAuthenticated) return; FileOpenPicker fileOpenPicker = new FileOpenPicker(); fileOpenPicker.FileTypeFilter.Add(".jpg"); StorageFile file = await fileOpenPicker.PickSingleFileAsync(); if (file != null) { using (Stream contentStream = await file.OpenStreamForReadAsync()) { var uploadedItem = await _client .Drive .Root .ItemWithPath("CodeExamples/" + file.Name) .Content .Request() .PutAsync<Item>(contentStream); } }
他のファイル操作の説明は、GitHubリンクで入手できます。OneDriveSDK for Cのアイテム#
ただし、この方法では、ルートフォルダー内のアイテムのリストを取得できます。
IChildrenCollectionPage ic= await _client .Drive .Root .Children .Request() .GetAsync();
次に、同じ操作を少し見てみましょうが、すでにREST APIを使用しています。 これを行うには、アクティブセッションのオブジェクトであるAccountSessionから取得できるアクセストークンが必要です(OneDrive SDKの機能を使用して、REST APIでの作業を簡素化します)。 また、System.Net.HttpスペースのHttpClientクラスも必要です。
Uri uri = new Uri("https://api.onedrive.com/v1.0/drive/root/children"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", session.AccessToken); string jsonstring = await client.GetStringAsync(uri);
その結果、ルートフォルダー内のOneDriveにあるすべてのアイテムをリストするJSON形式の文字列を取得します。
ストアにアプリケーションを登録することはできませんが、実験のために一時的なアクセストークン(1時間有効)を取得します。 これを行うには、 OneDriveの認証とサインインページで、[トークンの取得]ボタンをクリックします。
最初の方法は明らかに単純で短いですが、2番目の方法も有用です。 次のようなファイルへのリンクを取得できるとします。
Uri uri = new Uri("https://api.onedrive.com/v1.0/drive/root:/CodeExamples/MyDemo.zip:/action.createLink"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", session.AccessToken); var requestJson = JsonConvert.SerializeObject( new RequestLinkInfo { type = "view" }); var content = new StringContent(requestJson,Encoding.UTF8,"application/json"); var response = await client.PostAsync(uri,content); LinkResponseInfo result = JsonConvert.DeserializeObject<LinkResponseInfo>( await response.Content.ReadAsStringAsync());
コンテンツを見ると、ファイルへのパスがUri行のコロンで囲まれていることがわかります。 または、ファイルのID /drive/items/{item-idasket/action.createLinkを使用できます。
JSONをシリアライズおよびデシリアライズするには、次のクラスが必要です。
public class RequestLinkInfo { public string type { get; set; } // : view, edit embed public string scope { get; set; } // optional - : anonymous organization } public class LinkResponseInfo { public string id { get; set; } public string[] roles { get; set; } public Link link { get; set; } } public class Link { public string type { get; set; } public string scope { get; set; } public string webUrl { get; set; } public OneDriveApplication application { get; set; } } public class OneDriveApplication { public string id { get; set; } public string displayName { get; set; } }
URL自体は、結果オブジェクトから取得できます。
string fileurl = result.link.webUrl;
興味深いのは、古いLive APIを使用して、ログインしたユーザーに関する情報にアクセスできることです。
Uri uri = new Uri("https://apis.live.net/v5.0/me"); HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", session.AccessToken); string jsonstring = await client.GetStringAsync(uri);
ただし、Live APIがいつまで利用可能になるかを言うのは困難です。
ホワイトペーパーはこちらから入手できます: OneDrive APIを使用して開発する