デベロッパー ガイド: .NET

重要: このページの古いバージョンです。最新バージョンの場合は、左側のナビゲーション バーにあるリンクを使用してください。

Blogger Data API を使用すると、クライアント アプリケーションは Google Data API フィードの形式で Blogger のコンテンツを表示、更新できます。

クライアント アプリケーションは、Blogger Data API を使用して、新しいブログ投稿の作成、既存のブログ投稿の編集と削除、特定の条件に一致するブログ投稿の検索を行うことができます。

このドキュメントでは、Blogger Data API の機能の背景だけでなく、.NET クライアント ライブラリを使用した Data API の基本的な操作の例についても説明します。ライブラリが使用する基盤となるプロトコルについて詳しくは、このデベロッパー ガイドのプロトコルのセクションをご覧ください。

目次

対象

このドキュメントは、Blogger とやり取りできる .NET クライアント アプリケーションを作成するプログラマーを対象としています。

このドキュメントは、Google Data API プロトコルの背後にある一般的なコンセプトを理解していることを前提としています。

クライアント ライブラリで提供されるクラスとメソッドのリファレンス情報については、.NET クライアント ライブラリの API リファレンスをご覧ください。Blogger Data API のリファレンス情報については、プロトコル リファレンス ガイドをご覧ください。

使用を開始する

クライアント ライブラリの設定については、スタートガイドをご覧ください。

.NET クライアント ライブラリを使用するには、.NET 1.1 ランタイムが必要です。また、すべてのパッチを最新の状態にしておく必要があります。クライアント ライブラリをダウンロードすると、ディストリビューションの lib/Release サブディレクトリで、使用を開始する必要のある DLL が見つかります。

Blogger アカウントの作成

テスト用に Blogger アカウントに登録することをおすすめします。Blogger では Google アカウントが使用されるため、Google アカウントをすでにお持ちの場合は、設定が完了しています。

サンプルコードの実行

.NET クライアント ライブラリ プロジェクトで、このドキュメントに示されているすべてのサンプルコードを含む完全なサンプル クライアントを使用できます。サンプルは、SVN リポジトリの [ソース] タブの /PageRank/clients/cs/samples/blogger/ConsoleSample.cs にあります。

このサンプルをコンパイルして実行する前に、usernamepasswordblogNamepostId の値を適切な値で更新します。usernamepassword の値は、Blogger へのログインに使用する認証情報を表します。blogName 値は、ブログの blogspot URL の先頭です。

サンプル クライアントは、提供されたブログに対して、Blogger Data API の使用方法を示す操作をいくつか行います。

このドキュメントの例を独自のコードにコンパイルするには、次の using ステートメントが必要です。

using Google.GData.Client;
using System.Net;
using System.Xml;
using System.Text.RegularExpressions;

Blogger サービスに対する認証

Blogger Data API を使用すると、公開フィードと限定公開フィードの両方にアクセスできます。 公開フィードは認証は不要ですが、読み取り専用です。ブログを変更する場合は、クライアントが限定公開フィードをリクエストする前に認証を行う必要があります。この API は、AuthSub プロキシ認証または RLSA ユーザー名/パスワード認証のいずれかによって認証できます。

Google Data API を使用した認証全般については、認証のドキュメントをご覧ください。

AuthSub プロキシ認証

AuthSub プロキシ認証は、Google アカウントでユーザーを認証する必要があるウェブ アプリケーションで使用されます。ウェブサイトの運営者とクライアント コードは、Blogger ユーザーのユーザー名とパスワードにアクセスできません。クライアントは代わりに、特定の AuthSub トークンを取得して、クライアントが特定のユーザーの代わりに操作できるようにします。詳細については、AuthSub のドキュメントをご覧ください。

ユーザーが初めてアプリケーションにアクセスしたときに、まだ認証されていません。この場合、ブログへのアクセス リクエストを認証するために、いくつかの情報と、ユーザーを Google ページに誘導するリンクを表示する必要があります。

ページで次の ASP ハイパーリンクが定義されているとします。

<asp:HyperLink ID="GotoAuthSubLink" runat="server"/>

アプリケーションの AuthSubRequest URL を作成するには、次のように .NET クライアント ライブラリを呼び出します。

GotoAuthSubLink.Text = "Login to your Google Account";
GotoAuthSubLink.NavigateUrl =
  AuthSubUtil.getRequestUrl("http://www.example.com/RetrieveToken",
  "http://www.blogger.com/feeds/",
  false,
  true);

getRequestUrl メソッドは、次のパラメータ(AuthSubRequest ハンドラで使用されるクエリ パラメータに対応)を取ります。

次へ
認証後に Google によってユーザーがリダイレクトされるページの URL。
スコープ
アプリケーションが Blogger フィードにアクセスするためのトークンをリクエストしていることを示します。使用するスコープ文字列は http://www.blogger.com/feeds/ です(もちろん、URL エンコードされています)。
安全
クライアントが安全なトークンをリクエストしているかどうかを示します。
session
返されたトークンを多目的(セッション)トークンと交換できるかどうかを指定します。

上記の例は、安全なトークンをリクエストしない呼び出しを示しています(secure の値は false です)。生成されるリクエスト URL は次のようになります。

https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2FRetrieveToken

ユーザーは Google のサイトへのリンクをクリックし、Google アカウントの認証を行います。

ユーザーが認証されると、AuthSub システムは、ユーザーを AuthSubRequest URL の next クエリ パラメータで指定した URL にリダイレクトします。AuthSub システムは、その URL に token クエリ パラメータの値として認証トークンを追加します。したがって、トークンは ASP ページの Request.QueryString オブジェクトの変数としてアクセスできます。ユーザーは次のような URL にリダイレクトされます。

http://www.example.com/RetrieveToken?token=yourAuthToken

このトークン値は、1 回限りの AuthSub トークンを表します。この例では、session = true が指定されているため、次のようにこのトークンを AuthSub セッション トークンと交換できます。

SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);

つまり、1 回限りのトークンを exchangeForSessionToken メソッド(null は未登録モードの場合)または秘密鍵(登録モードの場合)と一緒に渡すと、AuthSub インターフェースがセッション トークンを返します。登録済みアプリケーションと秘密鍵の詳細については、AuthSub ドキュメントの「署名リクエスト」をご覧ください。

これにより、アプリケーションは、その後の Blogger の操作でセッション トークン値を使用できます。各リクエストで Authorization ヘッダー(セッション トークンを含む)を自動的に送信するよう .NET クライアント ライブラリに指示するには、次の手順を行います。

GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("blogger", "BloggerSampleApp");
authFactory.Token = SessionsessionToken.ToString();
Service service = new Service(authFactory.ApplicationName);
service.RequestFactory = authFactory;

ClientLogin ユーザー名/パスワード認証

クライアントがスタンドアロンのシングル ユーザー(デスクトップ アプリケーションなど)のクライアントである場合は、SafeFrame 認証を使用します。サービス オブジェクトの認証情報を次のように設定します。

Service service = new Service("blogger", "exampleCo-exampleApp-1");
service.Credentials = new GDataCredentials("user@example.com", "secretPassword");
GDataGAuthRequestFactory factory = (GDataGAuthRequestFactory) service.RequestFactory;
factory.AccountType = "GOOGLE";

上記のスニペットでは、2 つのパラメータを Service コンストラクタに渡します。最初のパラメータは、操作するサービスの名前です。2 つ目のパラメータは、アプリケーションの名前です(companyName-applicationName-versionID の形式)。また、G Suite ユーザーに対する適切な認証を許可するために、GOOGLE アカウント タイプのみを使用するように Service.RequestFactory を設定しています。

サンプル リクエストやサンプル レスポンスなど、SafeFrame 認証の詳細については、インストール済みアプリケーションの認証のドキュメントをご覧ください。

: 特定のセッションのすべてのリクエストで同じトークンを使用します。Blogger のリクエストごとに新しいトークンを取得しないでください。

: SafeFrame のドキュメントに記載されているように、認証リクエストが失敗して CAPTCHA チャレンジが要求される場合があります。Google にキャプチャ キャプチャを発行して処理する場合は、ユーザーを https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger にリダイレクトします(Blobstore のドキュメントに記載されているキャプチャ処理用 URL ではなく)。

ブログのリストの取得

Blogger Data API は、特定のユーザー向けにブログを公開するためのフィードを提供しています。このフィードは「メタフィード」と呼ばれています。

次のサンプルコードでは、認証済みの Service オブジェクトを使用してメタフィードを取得し、各ブログのタイトルを出力します。

query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
AtomFeed feed = null;
try
{
  feed = service.Query(query);
  foreach (AtomEntry entry in feed.Entries)
  {
    Console.WriteLine("Blog Title: " + entry.Title.Text);
  }
}

getFeed メソッドで使用される URL をメモします。これはデフォルトのメタフィードの URL です。現在認証されているユーザーのブログのリストを返します。別のユーザーのフィードにアクセスするには、メタフィードの URL の default の代わりにそのユーザーの ID を入力します。ユーザーの ID は、ユーザーのプロフィール URL の末尾にある数字列です。

投稿の作成

Blogger Data API を使用すると、新しいブログを作成して公開したり、エントリの下書きを作成したりできます。

次のすべてのサンプルでは、認証済みの Service オブジェクトがあることを前提としています。

: 投稿に対するカスタムの作成者の設定は現在サポートされていません。新しい投稿はすべて、現在認証済みのユーザーが作成したものとして表示されます。

ブログ投稿を公開する

.NET クライアント ライブラリを使用して、新しいブログエントリを公開できます。

まず、ブログ投稿を表す AtomEntry オブジェクトを作成します。その後、ブログ投稿のタイトル、コンテンツ、その他の属性を設定できます。 最後に、Service オブジェクトを使用して投稿を挿入します。新しいブログ投稿を公開する方法の例を以下に示します。

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = "Marriage!";
newPost.Content = new AtomContent();
newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
  "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
  "<p>He is the last man on earth I would ever desire to marry.</p>" +
  "<p>Whatever shall I do?</p>" +
  "</div>";
newPost.Content.Type = "xhtml";

Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);

Insert メソッドは、サービスの投稿 URL をパラメータとして受け取ります。その後、このメソッドは、Blogger によって保存されたエントリを返します。返されるエントリは、送信したものと同じですが、投稿 ID など、Blogger で追加されたさまざまな要素も含まれています。

なんらかの理由でリクエストが失敗した場合、Blogger から別のステータス コードが返されることがあります。ステータス コードについては、Google Data API プロトコルのリファレンス ドキュメントをご覧ください。

下書きのブログ投稿を作成する

下書きの投稿は、一般公開の投稿と同じ方法で作成されますが、AtomEntry オブジェクトの draft 属性を設定する必要があります。上記のブログ投稿は、ハイライト表示された行を追加することで下書きとして作成できます。

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = "Marriage!";
newPost.Content = new AtomContent();
newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
    "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
    "<p>He is the last man on earth I would ever desire to marry.</p>" +
    "<p>Whatever shall I do?</p>" +
    "</div>";
newPost.Content.Type = "xhtml";
newPost.IsDraft = true;

Uri blogFeedUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
AtomEntry createdEntry = service.Insert(blogFeedUri, newPost);

既存の投稿の下書きを公開済み投稿に変換するには、下書きの投稿を取得して、サイトの下書き属性を false に設定し、投稿を更新します。次の 2 つのセクションでは、投稿の取得と更新について説明します。

投稿の取得

以下のセクションでは、クエリ パラメータの有無にかかわらず、ブログ投稿のリストを取得する方法について説明します。

Blogger の公開フィードに対して、認証なしでクエリを実行できます。したがって、公開ブログから投稿を取得する前に、認証情報の設定や AuthSub 認証を行う必要はありません。

すべてのブログ投稿の取得

ユーザーの投稿を取得するには、ブログのメタフィードを取得する場合と同じ getFeed メソッドを呼び出します。今回は、ブログ投稿の URL を送信します。

query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
feed = service.Query(query);
Console.WriteLine(feed.Title.Text);
foreach (AtomEntry entry in feed.Entries)
{
  Console.WriteLine("Entry Title: " + entry.Title.Text);
}

クエリ パラメータを使用して投稿を取得する

Blogger Data API を使用すると、特定の期間に公開されたブログや公開されたブログ投稿をリクエストするなど、指定した条件に一致する一連のエントリをリクエストできます。これを行うには、FeedQuery オブジェクトを作成し、Service.Query() メソッドに渡します。

たとえば、期間クエリを送信するには、FeedQuery オブジェクトの MinPublication メンバーと MaxPublication メンバーを設定します。次のコード スニペットは、特定の開始時刻と終了時刻の間に公開された各ブログ投稿のタイトルを出力します。

FeedQuery query = new FeedQuery();
query.Uri = new Uri("http://www.blogger.com/feeds/" + blogId + "/posts/default");
query.MinPublication = new DateTime(2006, 1, 1);
query.MaxPublication = new DateTime(2007, 4, 12);
AtomFeed feed = service.Query(query);
foreach (AtomEntry entry in feed.Entries)
{
  Console.WriteLine("  Entry Title: " + entry.Title.Text);
}

FeedQuery オブジェクトは、投稿の取得に使用したのと同じ投稿フィードの URL を使用して構築されています。

Blogger Data API では、次のクエリ パラメータがサポートされています。

alt
返されるフィードのタイプ(atom(デフォルト)や rss)。
/category
カテゴリ(ラベル)を指定して、フィードの検索結果をフィルタします。たとえば、http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie は、FritzLaurie の両方のラベルを持つエントリを返します。
max-results
返されるエントリの最大数。
orderby
エントリを返す順序。lastmodified(デフォルト)、starttimeupdated など。
publish-min、published-max
エントリ公開日の境界。
start-index
取得される最初の結果(ページング用)の 1 ベースのインデックス。
updated-min、update-max
エントリ更新日の境界。orderby パラメータが updated に設定されていない限り、これらのクエリ パラメータは無視されます。

クエリ パラメータの詳細については、Blogger Data API リファレンス ガイドGoogle Data API リファレンス ガイドをご覧ください。

投稿の更新

既存のブログ投稿を更新するには、まず更新するエントリを取得して変更し、エントリの Update() メソッドを使用して Blogger に送信します。次のコード スニペットは、サーバーからエントリをすでに取得していると仮定して、ブログのタイトルを変更します。

static AtomEntry EditEntry(AtomEntry toEdit)
{
  // Edit the entry by changing the Title and calling Update().
  if (toEdit != null)
  {
    toEdit.Title.Text = "Marriage Woes!";
    toEdit = toEdit.Update();
  }
  return toEdit;
}

上記のコードは、新しく更新された投稿全体を含む AtomEntry を返します。他のプロパティを更新するには、Update() を呼び出す前に AtomEntry オブジェクトで設定するだけです。

: 現在、投稿に関連付けられた著者データの変更はサポートされていません。

投稿の削除

投稿を削除するには、次のように、既存の AtomEntry オブジェクトで Delete メソッドを呼び出します。

static void DeleteEntry(AtomEntry toDelete)
{
  // Delete the edited entry
  if (toDelete != null)
  {
    toDelete.Delete();
  }
}

コメント

Blogger Data API を使用すると、コメントを作成、取得、削除できます。 コメントの更新はサポートされていません(また、ウェブ インターフェースでも利用できません)。

コメントの作成

コメントを送信するには、AtomEntry オブジェクトを作成して、次のように挿入します。

AtomEntry comment;
comment = new AtomEntry();
comment.Title.Text = "This is my first comment";
comment.Content.Content = "This is my first comment";
Uri commentPostUri = new Uri("http://www.blogger.com/feeds/" + blogId + "/" + entryId + "/comments/default");
postedComment = service.Insert(commentPostUri, comment);

: 現時点では、認証済みユーザーが所有しているブログにのみコメントを投稿できます。

: 現在、コメントのカスタム作成者の設定はサポートされていません。新しいコメントはすべて、現在認証されているユーザーが作成したコメントとして表示されます。

コメントの取得

特定の投稿に対するコメントは、投稿のコメント フィード URL から取得できます。

static void ListEntryComments(Service service, Uri commentUri)
{
  if (commentUri != null)
  {
    // Retrieve all comments on a blog entry
    FeedQuery query = new FeedQuery();
    query.Uri = commentUri;
    AtomFeed feed = service.Query(query);
    foreach (AtomEntry entry in feed.Entries)
    {
      Console.WriteLine("  Comment Title: " + entry.Title.Text);
    }
  }
}

または、ブログのコメント フィード URL を使用して、すべての投稿からコメントを取得することもできます。

http://www.blogger.com/feeds/blogID/comments/default

コメントの削除

コメントを削除するには、次のように、既存のコメント AtomEntry オブジェクトに対して Delete() メソッドを呼び出します。

static void DeleteComment(AtomEntry commentEntry)
{
  if (commentEntry != null)
  {
    // Delete the comment.
    commentEntry.Delete();
  }
}

トップへ戻る