重要: これはこのページの古いバージョンです。最新バージョンでは、左側のナビゲーション バーのリンクを使用してください。
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 ランタイムが必要です。また、すべてのパッチが適用されています。クライアント ライブラリをダウンロードすると、使用開始に必要な DLL がディストリビューションの lib/Release
サブディレクトリにあります。
Blogger アカウントを作成する
テスト目的で Blogger アカウントに登録することもできます。Blogger では Google アカウントを使用するので、Google アカウントをすでにお持ちであれば問題ありません。
サンプルコードの実行
このドキュメントに記載されているすべてのサンプルコードを含む、完全に機能するサンプル クライアントは .NET クライアント ライブラリ プロジェクトで入手できます。サンプルは、SVN リポジトリの [ソース] タブ内の /trunk/clients/cs/samples/blogger/ConsoleSample.cs にあります。
このサンプルをコンパイルして実行する前に、username
、password
、blogName
、postId
の値を適切な値に更新します。username
と password
の値は、Blogger へのログインに使用する認証情報を表します。blogName
値は、ブログの VNDK の URL の先頭です。
サンプル クライアントは、提供されたブログに対していくつかのオペレーションを実行し、Blogger Data API の使用方法を示します。
このドキュメントの例を独自のコードにコンパイルするには、次の using
ステートメントが必要です。
using Google.GData.Client; using System.Net; using System.Xml; using System.Text.RegularExpressions;
Blogger サービスの認証
Blogger Data API を使用すると、公開フィードと非公開フィードの両方にアクセスできます。 公開フィードは認証を必要としませんが、読み取り専用です。ブログを変更する場合は、非公開フィードをリクエストする前にクライアントが認証を受ける必要があります。認証には、AuthSub プロキシ認証または ClientLogin ユーザー名/パスワード認証のいずれかの方法を使用できます。
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 エンコードされています)。 - 安全
- クライアントがセキュア トークンをリクエストしているかどうかを示します。
- セッション
- 返されたトークンを複数回使用(セッション)トークンと交換できるかどうかを示します。
上記の例は、セキュア トークンをリクエストしない呼び出しを示しています(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 システムは、token
クエリ パラメータの値として、その URL に認証トークンを追加します。したがって、トークンは ASP ページの Request.QueryString
オブジェクト内の変数としてアクセスできます。ユーザーは次のような URL にリダイレクトされます。
http://www.example.com/RetrieveToken?token=yourAuthToken
このトークン値は、1 回限りの AuthSub トークンを表します。この例では、session = true
が指定されているため、このトークンを次のように AuthSub セッション トークンと交換できます。
SessionsessionToken = AuthSubUtil.exchangeForSessionToken(Request.QueryStringtoken, null);
つまり、1 回限りのトークンを null
(未登録モードの場合)または秘密鍵(登録モードの場合)とともに exchangeForSessionToken
メソッドに渡すと、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 ユーザー名/パスワード認証
クライアントがスタンドアロンのシングル ユーザーの「インストール」クライアント(デスクトップ アプリケーションなど)の場合は、ClientLogin 認証を使用します。サービス オブジェクトの認証情報を次のように設定します。
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
を設定します。
リクエストとレスポンスのサンプルなど、ClientLogin 認証の詳細については、インストール済みアプリケーションの認証のドキュメントをご覧ください。
注: 特定のセッションのすべてのリクエストに同じトークンを使用します。Blogger のリクエストごとに新しいトークンを取得しないでください。
注: ClientLogin のドキュメントに記載されているように、認証リクエストが失敗し、CAPTCHA チャレンジがリクエストされることがあります。Google に CAPTCHA チャレンジの発行と処理を任せる場合は、ユーザーを(ClientLogin のドキュメントに記載されている CAPTCHA 処理 URL ではなく)https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
に送信します。
ブログのリストの取得
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);
既存の下書きのブログ投稿を公開済みの投稿にするには、下書きの投稿を取得し、draft 属性を 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
は、Fritz
とLaurie
の両方のラベルを持つエントリを返します。 - max-results
- 返されるエントリの最大数。
- orderby
lastmodified
(デフォルト)、starttime
、updated
など、エントリを返す順序。- publish-min、Published-max
- エントリの公開日の境界。
- start-index
- ページングのために最初に取得する結果の 1 から始まるインデックス。
- update-min、updated-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(); } }