デベロッパー ガイド: Java

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

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

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

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

目次

オーディエンス

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

このドキュメントは、Google Data APIs プロトコルの基本的な考え方を理解していることを前提としています。

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

スタートガイド

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

Java クライアント ライブラリを利用するには Java 1.5 が必要です。クライアント ライブラリをダウンロードすると、java/lib/gdataclient-1.0.jar ファイルに、使用を開始するために必要なクラスが見つかります。

Blogger アカウントを作成する

テスト用に Blogger アカウントを登録することをおすすめします。Blogger は Google アカウントを使用しているため、すでに Google アカウントをお持ちの場合は、すぐにご利用いただけます。

サンプルコードの実行

このドキュメントに記載されているすべてのサンプルコードを含む、完全なサンプル クライアントは、Java クライアント ライブラリ ディストリビューションの gdata/java/sample/blogger/BloggerClient.java ディレクトリにあります。ビルドと実行の手順は、同じディレクトリの README.txt ファイルに含まれています。

サンプル クライアントは、指定されたブログに対していくつかのオペレーションを実行し、Blogger Data API の使用方法を示します。

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

import com.google.gdata.client.*;
import com.google.gdata.data.*;
import com.google.gdata.util.*;
import java.io.IOException;
import java.net.URL;

Blogger サービスへの認証

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

Google Data API での認証の詳細については、認証のドキュメントをご覧ください。

このドキュメントの後半のセクションのサンプルのほとんどは、認証済みの GoogleService オブジェクトがあることを前提としています。

AuthSub プロキシ認証

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

ユーザーが初めてアプリケーションにアクセスした時点では、認証は行われていません。この場合は、ブログへのアクセス リクエストの認証を行う Google ページにユーザーを誘導する情報とリンクを表示する必要があります。Java クライアント ライブラリには、Google ページの URL を生成する関数があります。次のコードは、AuthSubRequest ページの URL を取得します。

String next = "http://www.example.com/welcome.html";
String scope = "http://www.blogger.com/feeds/";
boolean secure = false;
boolean session = true;
String authSubLogin = AuthSubUtil.getRequestUrl(next, scope, secure, session);

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

次へ
認証後にユーザーをリダイレクトするページの 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%2Fwelcome.html

ユーザーはリンクから Google のサイトにアクセスし、Google アカウントで認証します。

ユーザーが認証されると、AuthSub システムは AuthSubRequest URL の next クエリ パラメータで指定した URL にユーザーをリダイレクトします。AuthSub システムは、token クエリ パラメータの値として、その URL に認証トークンを追加します。次に例を示します。

http://www.example.com/welcome.html?token=yourAuthToken

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

String token = AuthSubUtil.getTokenFromReply(urlFromAuthSub);
String sessionToken = AuthSubUtil.exchangeForSessionToken(token, null);

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

その後、アプリケーションは Blogger との後続のやり取りでセッション トークンを使用できます。リクエストごとにセッション トークンを自動的に送信するように Java クライアント ライブラリに指示するには、GoogleService オブジェクトの setAuthSubToken メソッドを呼び出します。

GoogleService.setAuthSubToken(sessionToken, null);

その後、クライアント ライブラリは、すべてのリクエストとともにトークンを自動的に送信します。

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

クライアントがスタンドアロンのシングルユーザーの「インストール済み」クライアント(デスクトップ アプリケーションなど)の場合は、ClientLogin 認証を使用します。GoogleService オブジェクトで setUserCredentials メソッドを呼び出すだけで、Blogger とのその後のすべての操作が認証されます。

GoogleService myService = new GoogleService("blogger", "exampleCo-exampleApp-1");
myService.setUserCredentials("user@example.com", "secretPassword");

上のスニペットでは、2 つのパラメータを GoogleService コンストラクタに渡しています。最初のパラメータは、操作するサービスの名前です。2 番目のパラメータは、companyName-applicationName-versionID 形式のアプリの名前です。

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

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

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

ブログのリストを取得する

Blogger Data API は、特定のユーザーのブログを一覧表示するフィードを提供します。このフィードは「メタフィード」と呼ばれます。

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

public static void printUserBlogs(GoogleService myService)
    throws ServiceException, IOException {

  // Request the feed
  final URL feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
}

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

投稿の作成

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

: 現在のところ、投稿のカスタム作成者は設定できません。新しい投稿はすべて、現在認証されているユーザーによって作成されたものとして表示されます。

ブログ投稿の公開

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

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

public static Entry createPost(
    GoogleService myService, String blogID, String title,
    String content, String userName)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

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

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

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

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

public static Entry createPost(GoogleService myService, String blogId,
    String title, String content, String userName,
    Boolean isDraft)
    throws ServiceException, IOException {
  // Create the entry to insert
  Entry myEntry = new Entry();
  myEntry.setTitle(new PlainTextConstruct(title));
  myEntry.setContent(new PlainTextConstruct(content));
  myEntry.setDraft(isDraft);

  // Ask the service to insert the new entry
  URL postUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  return myService.insert(postUrl, myEntry);
}

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

投稿の取得

以降のセクションでは、クエリ パラメータありとなしの場合の、ブログ投稿のリストを取得する方法について説明します。

Blogger の公開フィードを認証なしでクエリできます。そのため、公開ブログから投稿を取得する前に、setUserCredentials メソッドを呼び出したり、AuthSub 認証を行う必要はありません。

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

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

public static void printAllPosts(
    GoogleService myService, String blogId)
    throws ServiceException, IOException {
  // Request the feed
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
  }
  System.out.println();
}

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

Blogger Data API を使用すると、指定した条件に一致するエントリセットをリクエストできます。たとえば、特定の日付範囲に公開または更新されたブログ投稿をリクエストできます。これを行うには、Query オブジェクトを作成し、GoogleService.getQuery メソッドに渡します。

たとえば、期間クエリを送信するには、Query オブジェクトの setPublishedMin メソッドと setPublishedMax メソッドを使用します。次のコード スニペットは、指定された開始時間と終了時間の間に公開された各ブログ投稿のタイトルを出力します。

public static void printDateRangeQueryResults(
    GoogleService myService, String blogId,
    DateTime startTime, DateTime endTime)
    throws ServiceException, IOException {
  // Create query and submit a request
  URL feedUrl = new URL("http://www.blogger.com/feeds/" + blogID + "/posts/default");
  Query myQuery = new Query(feedUrl);
  myQuery.setPublishedMin(startTime);
  myQuery.setPublishedMax(endTime);
  Feed resultFeed = myService.query(myQuery, Feed.class);

  // Print the results
  System.out.println(resultFeed.getTitle().getPlainText() +
      " posts between " + startTime + " and " + endTime);
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" + entry.getTitle().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

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

Blogger Data API は、次の Query メソッドをサポートしています。

addCategoryFilter
カテゴリ(ラベルとも呼ばれます)を指定して、フィード結果をフィルタします。たとえば、http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie は、ラベル FritzLaurie の両方を含むエントリを返します。
setMaxResults
返されるエントリの最大数を設定します。
setPublishedMin、setPublishedMax
エントリの公開日の範囲を設定します。
setStartIndex
取得する最初の結果の 1 ベースのインデックスを設定します(ページング用)。
setUpdatedMin、setUpdatedMax
エントリの更新日付の範囲を設定します。これらのクエリ パラメータは、orderby パラメータが updated に設定されていない限り無視されます。

: 現在、orderby クエリ パラメータのセッターはありません。ただし、設定する必要がある場合は、Query.addCustomParameter() メソッドを使用できます。

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

投稿の更新

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

public static Entry updatePostTitle(
    GoogleService myService, Entry entryToUpdate, String newTitle)
    throws ServiceException, IOException {
  entryToUpdate.setTitle(new PlainTextConstruct(newTitle));
  URL editUrl = new URL(entryToUpdate.getEditLink().getHref());
  return myService.update(editUrl, entryToUpdate);
}

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

: 投稿に関連付けられた作成者データを変更することは現在サポートされていません。

投稿の削除

投稿を削除するには、投稿の編集 URL を GoogleService オブジェクトの delete メソッドに渡します。次に例を示します。

public static void deletePost(
    GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

コメント

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

コメントの作成

コメントを投稿するには、Entry オブジェクトを作成し、次のように挿入します。

public static Entry createComment(
    GoogleService myService, String blogID, String postId,
    String commentText)
    throws ServiceException, IOException {
  // Build the comment feed URI
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);

  // Create a new entry for the comment and submit it to the GoogleService
  Entry myEntry = new Entry();
  myEntry.setContent(new PlainTextConstruct(commentText));
  return myService.insert(feedUrl, myEntry);
}

: 現在、コメントを投稿できるのは、認証済みユーザーが所有するブログに限られます。

: 現在のところ、コメントのカスタム作成者を設定することはできません。新しいコメントはすべて、現在認証されているユーザーによって作成されたものとして表示されます。

コメントの取得

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

public static void printAllComments(
    GoogleService myService, String blogID, String postId)
    throws ServiceException, IOException {
  // Build comment feed URI and request comments on the specified post
  String commentsFeedUri = "http://www.blogger.com/feeds/" + blogID + "/" + postId + "/comments/default";
  URL feedUrl = new URL(commentsFeedUri);
  Feed resultFeed = myService.getFeed(feedUrl, Feed.class);

  // Display the results
  System.out.println(resultFeed.getTitle().getPlainText());
  for (int i = 0; i < resultFeed.getEntries().size(); i++) {
    Entry entry = resultFeed.getEntries().get(i);
    System.out.println("\t" +
        ((TextContent) entry.getContent()).getContent().getPlainText());
    System.out.println("\t" + entry.getUpdated().toStringRfc822());
  }
  System.out.println();
}

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

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

コメントの削除

コメントを削除するには、次のように、コメントの編集 URL を GoogleService オブジェクトの delete メソッドに渡します。

public static void deleteComment(GoogleService myService, String editLinkHref)
    throws ServiceException, IOException {
  URL deleteUrl = new URL(editLinkHref);
  myService.delete(deleteUrl);
}

トップへ戻る