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")); // タイトルを表示 } } } // --- ここまで ---