InstapaperのAPIを実行するJavaプログラム(URL登録編)
APIをJavaから呼び出すプログラムを書いていきます。 から大分空いてしまいましたが、引き続きInstapaperの
前回は、単にInstapaperのアカウントのユーザー名/パスワードで認証を行うだけでしたが、今回はURLを登録するAPIを実行します。これでようやくInstapaperのメインの機能を使ったことになります…。
前回に習って、APIの基本的な使い方をまとめますと。
- 決められたURLに対し、以下のパラメータを指定してHTTP POSTリクエストを投げる。
- username/password:ユーザー名、パスワード
- url:登録したい記事のURL
- title:記事のタイトル(任意の文字列)。省略した場合、自動でサイトから取得して設定される
- selection:記事に添える説明(任意の文字列)。省略した場合は何も登録されない。記事を登録したクライアントソフトウェアの情報などを記載したりする
- redirect=close:URL登録後に「Saved!」メッセージ画面にリダイレクトする。リダイレクト後の画面は自動で閉じる。省略可
- jsonp:APIの実行結果をJSON形式で受け取りたいときに指定。省略可
- URL登録に成功した場合、HTTP 201が返される。
- URL登録に成功した場合、以下のレスポンスヘッダーを取得可能
- Content-Location:記事のURL
- X-Instapaper-Title:上記3で指定したタイトル。省略した場合は自動で取得したタイトル
- URL登録に失敗した場合、失敗した原因に応じて所定のステータスコードが返される。
今回は、Javaのプログラムということで、入力パラメータの5,6は省略します。Javaのコードの中で、リダイレクトやJSONオブジェクトの受け取りは使わなそうですから…。
以下、サンプルコードです。
ーーーここから
import java.io.IOException;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
public class AddURLSample {
public static void main(String[] args) {
String username = "user";//ユーザー名
String password = "pass";//パスワード
String url = "http://charleysdiary.hatenablog.com/entry/2012/01/01/020001";
String title = "A Happy New Year !";
String selection = "Send from sample code.";
HttpClient httpclient = new HttpClient();
PostMethod post = new PostMethod("https://www.instapaper.com/api/add");
post.addParameter("username", username);
post.addParameter("password", password);
post.addParameter("url", url);
post.addParameter("title", title);
post.addParameter("selection", selection);
try {
int status = httpclient.executeMethod(post);
System.out.println(status);
System.out.println(new String(post.getResponseBody()));
System.out.println(post.getStatusLine().toString());
Header locationHeader = post.getResponseHeader("Content-Location");
if (locationHeader != null) {
System.out.print(locationHeader.toString());
}
Header titleHeader = post.getResponseHeader("X-Instapaper-Title");
if (titleHeader != null) {
System.out.print(titleHeader.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
前回に引き続きなんの変哲もないコードになってしまいましたが。
# 例によって、API仕様の詳細は本家の公開ドキュメントを参照して下さい。
さて、次回はこれらのAPIを使って何をやるかという話です。