このブログの中を検索する

2012/06/20

Google Data APIを.NETで使用するための開発者ガイド、コードサンプル

title: Google Data APIを.NETで使用するための開発者ガイド、コードサンプル
url: https://sites.google.com/site/copypesouko/--manyuaru/netclientlibra2

snippet:
-----引用-----

.NETクライアントライブラリ開発者ガイド

このドキュメントはGoogle Data API("GData")質問を送って、返された応答を解釈するのに.NETクライアントライブラリを使用する方法を説明します。

チュートリアルと例

以下の例は、C#クライアントライブラリを使用することでどのように様々なGData要求を送るかを示しています。
それらをより具体的にするように、これらの例は、どのように特定のサービス:Googleカレンダー と対話するかを示しています。 私たちはCalendarがあなたが他のサービスで使用のためのこれらの例を適合させるのを助けるために他のGoogleサービスと異なっている場所を指摘するつもりです。Calendarに関する詳しい情報に関しては、Google Calendar Data APIドキュメントを見てください。
あなたのクライアントを構築して、走らせます。
このドキュメントの例をコンパイルするには、次のusingステートメントを使用する必要があります:

using Google.GData.Client;

フィードを要求

Google Calendar Data APIドキュメントで説明されるように、あなたは以下のHTTP要求をCalendarに送ることによって、Calendarフィードを要求できます:
GET http://www.google.com/calendar/feeds/userID/private/full
もちろん、あなたは userID をユーザのEメールアドレスに取り替えなければなりません。 詳細のためのCalendarドキュメントを見てください。あなたは、Calendarと対話するのに代わりに特別なデフォルトURLを使用できますが(Calendarドキュメントで説明されるように)、本書では私たちは private full feed URL を使用するつもりです。(それは、ユーザIDを含みます)。
また、あなたは適切な認証を提供しなければなりません。ウェブアプリケーションにおける、使用ではなく、デスクトップクライアントなどのインストールされたクライアントアプリケーションにおける使用だけに、私たちがここ(「インストールされたアプリケーションのためのGoogle認証」として、知られている)で使用している認証システムが適切であることに注意してください。認証に関する詳しい情報に関しては、 Google Account Authentication ドキュメンテーションを見てください。

ユーザにEメールアドレス" jo@gmail.com "とパスワード"mypassword"でC#クライアントライブラリを使用することでCalendarフィードを要求するには、以下のコードを使用してください:

// クエリーとサービスオブジェクトを作成してください:

FeedQuery query = new FeedQuery();
Service service = new Service("cl", "exampleCo-exampleApp-1"));
// あなたの証明書を設定します:
service.setUserCredentials("jo@gmail.com", "mypassword");

// クエリーオブジェクトを作成してください:
query.Uri = new Uri("http://www.google.com/calendar/feeds/jo@gmail.com/private/full");

// 以下についてクエリーするようにサービスに命令します。
AtomFeed calFeed = service.Query(query);

 Service のクラスはクライアント接続(認証がある)のGDataサービスに代理をします。クライアントライブラリを使用することで質問をサービスに送るための基本手順は以下のステップから成ります:
適切なURLを得るか、または構成してください。
データをサービスに送るなら(あなたが例えば新しいエントリーを挿入しているなら)、クライアントライブラリのクラスを使用することで生データをオブジェクトに変えてください。(あなたがただフィードを要求しているなら、私たちがこの例でしているように、このステップは適用されません。)
サービス名(Calendarのための「Cl」などの)とあなたのアプリケーションの名前を設定して、新しいServiceインスタンスを作成してください。(このフォームで。companyName-applicationName-versionID).
適切な証明書を設定してください。
リクエストを送信し、任意の結果を受け取るメソッドを呼び出します。
 service.setUserCredentials メソッドは標準の.NET Network資格証明書オブジェクトで service.Credentials の特性の用意をします。 資格証明書はあなたのクライアントがだれの代理にクエリーを送るかときのユーザのIDとパスワードへのセットです。 例は本書では「Authentication for Installed Applications」認証システムを使用します。 他の認証システムに関する詳しい情報に関しては、Google Account Authentication ドキュメンテーションを見てください。
全体のフィードを要求するために、あなたは service.Query メソッドを呼びます。(それは、 FeedQuery オブジェクトを取って、そのURLで見つけられた全体の給送を返します)。私たちは、後でどのように本書ではより特定のクエリーを送るかを示すつもりです。
 Service のクラスの他のメソッドのように、 Query は認証を扱って、必要に応じて向け直します。

新しい項目を挿入する

カレンダーフィードにアイテムを挿入するには、次のコードを使用する場合があります:

AtomEntry entry = new AtomEntry();
AtomPerson author = new AtomPerson(AtomPersonType.Author);
author.Name = "Jo March";
author.Email = "jo@gmail.com";
entry.Authors.Add(author);
entry.Title.Text = "Tennis with Beth";
entry.Content.Content = "Meet for a quick lesson.";

Uri postUri = new Uri("http://www.google.com/calendar/feeds/jo@gmail.com/private/full");

// 要求を送ってください、そして、応答を受けてください:
AtomEntry insertedEntry = service.Insert(postUri, entry);

URLを設定した後に、私たちは、 AtomEntry オブジェクトを組み立てます。
エントリータイトルは、 AtomTextConstruct、様々なフォーム(プレーンテキスト、HTML、またはXHTML)でテキストをつかむクラスです。エントリー内容は AtomContentオブジェクトによって表されます、プレーンテキストかフォームのどちらかの、他の中身を保持できるクラス、XMLとバイナリ・データを含んでいます。
各作者は名前、URI、およびEメールアドレスとして代理をされます。 (この例では、私たちはURIを省いています。)  あなたは、エントリーの Authors 収集に AtomAuthor オブジェクトを追加することによって、エントリーに作者を加えます。
私たちは私たちが前の例で作成したのと同じ Service オブジェクトを使用しています。この場合、呼ぶためのメソッドは Insertです。(そのInsertは指定された挿入URLにアイテム を送ります)。
サービスは新たに作成されたエントリーを返します、エントリーへの編集URLのように。(エントリーは追加サーバで発生している要素を含むかもしれません)。
上のコードは POST http://www.google.com/calendar/feeds/jo@gmail.com/private/full (適切な認証がある)を送って、エントリーを提供するのに同等です。

特定のエントリーを要求します。

以下のコードで、あなたは前の例に挿入した特定のエントリーを要求できます。
このシリーズの例の文脈では、そのエントリーを検索するのは本当に必要ではありません、Calendarが既に挿入されたエントリーを返したので。 しかし、あなたがURLをエントリーに知っているときはいつも、同じテクニックを適用できます。

FeedQuery singleQuery = new FeedQuery();
singleQuery.Uri = new Uri(newEntry.SelfUri.ToString());
AtomFeed newFeed = service.Query(singleQuery);
AtomEntry retrievedEntry = newFeed.Entries[0];

挿入されたエントリーには、特性、 ToString() メソッドを使用して、新しいURIオブジェクトを作成するのに使用できる AtomUri オブジェクトを返す SelfUri があります。
次に、私たちはただ新しいAtomFeedオブジェクトを手に入れるためのサービスの Query メソッドを呼ばなければなりません、Entries収集におけるちょうど1つのエントリーで。
上のコードは適切な認証と共に GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID  をCalendarに送るのに同等です。

エントリの検索

フルテキスト検索で最初に一致したものを取得するには、次のコードを使用します:

FeedQuery myQuery = new Query(feedUrl);
myQuery.Query = "Tennis";
AtomFeed myResultsFeed = myService.Query(myQuery);
if (myResultsFeed.Entries.Count > 0) {
  AtomEntry firstMatchEntry = myResultsFeed.Entries[0];
  String myEntryTitle = firstMatchEntry.Title.Text;
}

この例は、 FeedQuery オブジェクトを組み立てることによって、始まります。(オブジェクトはほとんどURLと関連質問パラメータから成ります)。それぞれの標準のGData クエリーパラメータに、特性があります。
 FeedQuery を組み立てた後に、私たちは、サービスの Query 方法にそれを通過します。(それは、クエリー結果を含むフィードを返します)。 代替的アプローチが自分でURLを構成して(フィードURLにクエリーパラメータを追加することによって)、次に、 Query 方法を呼ぶだろうことですが、 FeedQuery 方法が役に立つ層の抽象化を提供するので、あなたは自分でURLを構成する必要はありません。
フィードの Entries 収集は給送におけるエントリーのリストを返します。 Entries.Count はフィードにおける、エントリーの数を返します。
この場合、クエリーが何か結果を返したなら、私たちは、最初の合う結果を AtomEntry オブジェクトに割り当てます。そして、私たちは、エントリーのタイトルを検索するのに AtomEntry のクラスの Title プロパティを使用します。
上のコードは GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full?q=Tennis をCalendarに送るのに同等です。

カテゴリ別の照会

Note: Google Calendarがラベルをイベントに関連づけないので、この例はCalendarで動作しません。
以前の全文検索に合って、特定のカテゴリにあるすべてのエントリーから成るフィードを検索するか、または特定のラベルを持つには、以下のコードを使用してください:

AtomCategory myCategory = new AtomCategory("by_jo");
QueryCategory myCategoryFilter = new QueryCategory(myCategory);
myQuery.Categories.Add(myCategoryFilter);
AtomFeed myCategoryResultsFeed = myService.Query(myQuery);

 AtomCategory のクラスは、カテゴリフィルタで使用されるためにもちろんカテゴリを表します。 QueryCategory のクラスは複数のカテゴリを含むことができますが、この場合、私たちは、1つのカテゴリだけがあるフィルタを組み立てています。
そして、私たちは既存のクエリーにそのフィルタを加えます。(まだ、それは、前の例からの全文クエリーストリングを含んでいます)。
私たちは再び質問をサービスに送るためのQueryメソッドを使用します。
Calendarがカテゴリ検索を許すなら、上のコードは GET http://www.google.com/calendar/feeds/jo@gmail.com/private/full/-/by_jo?q=Tennis をCalendarに送るのに同等でしょう。

アイテムを更新

既存の項目をアップデートするには、以下のコードを使用してください。 以下の例では、私たちは以前に検索されたエントリーのタイトルを古いテキスト(「ベスがいるテニス」)から「重要なミーティング」に変えています。

retrievedEntry.Title.Text = "Important meeting";
retrievedEntry.Update();

まず最初に、私たちは、私たちが、より早くとって来たエントリーのための新しいタイトルを設定します。 そして、私たちは、 Upate をただアップデートされたエントリーをサービスに送るためのメソッドと呼びます。
サービスはアップデートされたエントリーを返します、このエントリーの新しいバージョンのための新しいURLを含んでいます。(エントリーバージョンの詳しい情報に関して、protocol reference document の Optimistic concurrency 部を見てください)
上のコードはおよそ元のエントリーを取り替えるために新しいエントリー(Atomフォーマットにおける)と共に  PUT http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID  をサービスに送るのに同等です。

アイテムを削除する

既存の項目を削除するには、以下のコードを使用してください:

updateEntry.Delete();

削除に使用するURLは編集URLと同じです、したがって、この例が前のものと非常に同様です、もちろんそれを除いて、私たちが Update の代わりに Delete メソッドを呼んでいます。
上のコードはおよそ DELETE http://www.google.com/calendar/feeds/jo@gmail.com/private/full/entryID をサービスに送るのに同等です。

-----引用-----

0 件のコメント:

コメントを投稿