XML-RPC が公開されたとのことで、ちょっと使ってみました。
まず、XML-RPC が使える環境を整えることにしました。
言語は Java を使うことにしました。
ここから Apache XML-RPC をダウンロードして、xmlrpc-2.0.jar をクラスパスに追加。
で、ここを参考に簡単なテストプログラムを書いて実行してみると、、エラー。
メッセージは以下のとおり。
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/codec/DecoderException
デコーダーが無いのね。。ということで、ここから commons-codec-1.3.jar を
ダウンロードしてクラスパスに追加。
でテストプログラムを実行してみると、、、成功!
環境が整ったところで、勢いに乗って goo ブログから記事を取得するプログラム
を書いてみました。
参考にしたのはこちら。
実行すると、、日本語が文字化け。( ̄□ ̄;)!!
なんで、、テストプログラムでは日本語通ったのに。。。
レスポンスを調べたところ、テストプログラムでは日本語が
XML のエンティティで表現されているのに対し、
goo ブログは UTF-8 で返ってくるからだと判明。
XML を読み込むときに UTF-8 と指定できればよいのね。
けど、そんなパラメータないぞ。。
ぐぐってみたけど、解決には至らず。。
仕方ない、、ソースコードを改ざんするか、、と思い、ソースをのぞいた
ところ、ちゃんと文字コードを指定できる部分があることが判明。
static メンバを参照してるので、
XmlRpc.setDefaultInputEncoding("UTF-8");
を早めに呼び出すことで、UTF-8 の XML を読み込めるように
なります。 (日本語表示できるようになります。)
実行結果がこちら↓。
% java XMLRPCTest "pie001" "password"
goo RSSリーダーで「ココだけの話」の更新に気づく方法
DVD スターウォーズ・エピソード3
Firefox インストール
マイルール
普天王関 復帰!
タイトルしか表示してませんが、記事の内容とかもちゃんと取得できて
ます。
サンプルソースコード XMLRPCTest.java はこちら↓。
まず、XML-RPC が使える環境を整えることにしました。
言語は Java を使うことにしました。
ここから Apache XML-RPC をダウンロードして、xmlrpc-2.0.jar をクラスパスに追加。
で、ここを参考に簡単なテストプログラムを書いて実行してみると、、エラー。
メッセージは以下のとおり。
Exception in thread "main" java.lang.NoClassDefFoundError:
org/apache/commons/codec/DecoderException
デコーダーが無いのね。。ということで、ここから commons-codec-1.3.jar を
ダウンロードしてクラスパスに追加。
でテストプログラムを実行してみると、、、成功!
環境が整ったところで、勢いに乗って goo ブログから記事を取得するプログラム
を書いてみました。
参考にしたのはこちら。
実行すると、、日本語が文字化け。( ̄□ ̄;)!!
なんで、、テストプログラムでは日本語通ったのに。。。
レスポンスを調べたところ、テストプログラムでは日本語が
XML のエンティティで表現されているのに対し、
goo ブログは UTF-8 で返ってくるからだと判明。
XML を読み込むときに UTF-8 と指定できればよいのね。
けど、そんなパラメータないぞ。。
ぐぐってみたけど、解決には至らず。。
仕方ない、、ソースコードを改ざんするか、、と思い、ソースをのぞいた
ところ、ちゃんと文字コードを指定できる部分があることが判明。
static メンバを参照してるので、
XmlRpc.setDefaultInputEncoding("UTF-8");
を早めに呼び出すことで、UTF-8 の XML を読み込めるように
なります。 (日本語表示できるようになります。)
実行結果がこちら↓。
% java XMLRPCTest "pie001" "password"
goo RSSリーダーで「ココだけの話」の更新に気づく方法
DVD スターウォーズ・エピソード3
Firefox インストール
マイルール
普天王関 復帰!
タイトルしか表示してませんが、記事の内容とかもちゃんと取得できて
ます。
サンプルソースコード XMLRPCTest.java はこちら↓。
// --- ここから ---
import java.util.Iterator;
import java.util.Vector;
import java.util.Hashtable;
import org.apache.xmlrpc.XmlRpc;
import org.apache.xmlrpc.XmlRpcClient;
public class XMLRPCTest {
private static String getBlogid(XmlRpcClient client, String username, String password)
throws Exception {
Vector<String> params = new Vector<String>();
params.add("appkey"); // appkey は何でもよいらしい
params.add(username);
params.add(password);
// ブログリストを取得
Object result = client.execute("blogger.getUsersBlogs", params);
if (result instanceof Boolean) { // ブログリストが取得できなかった場合、false が返る
throw new Exception("can't get UsersBlogs");
}
// 1 件目のブログの blogid を返す
return (String) ((Hashtable) ((Vector) result).get(0)).get("blogid");
}
public static void main(String[] args) throws Exception {
String username = null; // gooID
String password = null; // 投稿専用パスワード
if (args.length > 1) {
username = args[0];
password = args[1];
} else {
System.err.println("usage: java XMLRPCTest username password");
System.exit(-1);
}
XmlRpc.setDefaultInputEncoding("UTF-8");
XmlRpcClient client = new XmlRpcClient("http://blog.goo.ne.jp/xmlrpc.php");
// blogid を取得する。
String blogid = getBlogid(client, username, password);
Vector<Object> params = new Vector<Object>();
params.add(blogid);
params.add(username);
params.add(password);
params.add(new Integer(5)); // 5 件取得
// 記事を取得する。
Vector result = (Vector) client.execute("metaWeblog.getRecentPosts", params);
if (result.size() == 0) { // 記事が取得できなかった場合
throw new Exception("can't get RecentPosts");
}
Iterator i = result.iterator();
while (i.hasNext()) { // 記事の数だけループ
Hashtable hash = (Hashtable) i.next();
System.out.println((String) hash.get("title")); // タイトルを表示
}
}
}
// --- ここまで ---








