Ajax Webアプリケーション奮闘記 〜関西温泉マップ〜

Ajax Webアプリケーション作成にあたり、技術的メモや奮闘内容、未解決問題等を掲載していきます。 もちろん、関西温泉マップはβ版なので無料でご利用いただけます。


私おすすめのレンタルサーバー | ここが便利!レノボWeb広告限定ストア

FC2ブログへXML-RPCにようる投稿件数MAX10件に変更

JavaアプリケーションによるXML-RPCを使ったブログ投稿のテストをやっていたら、
エラーが発生。
org.apache.xmlrpc.XmlRpcException: Error:Up to 10 entry a day.


この原因をネットでサーチしてみると下記の記事を発見!

ブログ管理者用お知らせ XMLRPCでの投稿許容件数変更のお知らせ

スパム対策で、1日の投稿件数を10件に制限しているようです。
日付変わったらまた試してみよ。

[2008/03/13追記]
これって、日付が変われば良いってもんじゃなくて、24時間経過しなきゃいけないみたい。
だから、実質毎日10件投稿できるわけではないみたい。

JavaアプリケーションでXML-RPCよりFC2ブログ情報を取得してみる

サイトにアクセスしないであるブログの情報を取得したいなら、RSSからリーダーに読み込ませて取得したりさまざまなやり方があると思いますが、今回は、XML-RPCを使ってJavaアプリケーションから取得してみたいと思います。

まぁ、XML-RPCを使う目的は、後々Javaアプリケーションからブログ記事が投稿してみたいからです。

まず環境を整えます。
【環境】
・Windows XP SP 2
・Eclipse SDKバージョン: 3.2.0
・JRE:1.6.0_03
・外部JAR:xmlrpc-2.0.jar

上記外部JARは以下より取得しました。
ws-xmlrpc - Apache XML-RPC

どれをダウンロードすればよいか分かり辛かったので、分かりやすい2.0をダウンロードしました。(現状最新は3.1)

環境が整ったら、以下のソースを記載します。
※Javaプログラミングはあまり経験が無いので、コードの解説はあまりできませんし、動作確認のみしているので、参考程度にご利用ください。
[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 final static int GET_ENTRYCNT_MAX = 10; // 記事取得件数

private static String getBlogid(XmlRpcClient client, String username, String password)
throws Exception {
Vector params = new Vector();
params.add("appkey"); // appkey は何でもよいらしい
params.add(username);
params.add(password);

// ブログリストを取得
Object result = client.execute("metaWeblog.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 void TestGetRecentPosts(String url, String username, String password) throws Exception {

XmlRpc.setDefaultInputEncoding("UTF-8");
XmlRpcClient client = new XmlRpcClient(url);

// blogid を取得する。
String blogid = getBlogid(client, username, password);

Vector params = new Vector();
params.add(blogid);
params.add(username);
params.add(password);
params.add(new Integer(GET_ENTRYCNT_MAX));

// 記事を取得する。
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")); // タイトルを表示
}
}
}


XML-RPCへのAPIは下記を参考ください。
Movable Type 3.3 マニュアル - XML-RPC API

上記クラスの呼び出しサンプルは以下のようになります。

[MainTest.java]
public static void main(String[] args) throws Exception {

String EndUrl = "http://blog.fc2.com/xmlrpc.php";

XmlRpcTest xrpct = new XmlRpcTest();
xrpct.TestGetRecentPosts(EndUrl, (ユーザID), (パスワード));
}


変数EndUrlに設定しているURLはFC2のXML-RPC用URLです。一律このURLに対してのアクセスで各ブログへのアクセスが可能です。ユーザIDはログインユーザIDです。FC2の場合メールアドレスになると思います。パスワードはログイン時のパスワードを設定します。

上記を実行すると、最近投稿した記事10件のタイトルを表示します。

[実行結果]

AptanaでPrototypeを使ってみる
Aptanaの導入と日本語化
Tomcatが起動しない!?
Ajaxポータルを使ってみる - NetVibes -
開発現場で役立つデザインの鉄則
CVSからJ-Spiderのプロジェクトをチェックアウトしてみる
Webロボットの研究再開。その前に・・
Google Mapsに「地形」レイヤー
Ajax向けライブラリを探すときのサイト
世界的な鳥取県民!!



ちなみに、上記ソースはMovable Typeでも実行可能です。その場合、ブログサービスのURLはmt.cgiと同じ階層にあるxml-rpc.cgiに対して設定すれば良いです。たとえば下記みたいに。
例)
http://(それぞれのURL)/mt/xml-rpc.cgi

(注意)
Movable Typeの場合、パスワードはログインパスワードではなく、Webサービスのパスワード(APIパスワード)になります。
Movable Type 3.3 マニュアル - プロフィールの編集
Movable Type4の場合はシステムで作成したユーザのプロフィール編集画面で設定可能です。他のユーザにはWebサービスパスワードは表示されないみたいです。

【参考サイト】
XML-RPC 使ってみた - pie001's room
MovableType で使える XML-RPC API
Movable Type 3.3 マニュアル - XML-RPC API

XML-RPCより投稿テストVOL1

Javaアプリケーションより投稿のテスト

FC2ブログでgoogle-code-prettifyを使ってJavaコードをハイライトしてみました。

昨日より、テンプレートを変更しておりますが、
理由はソースコードを大きく表示させたいためです。

それに伴い、ソースコードをエディタのようにハイライト表示をさせるため、google-code-prettifyを導入してみました。導入にあたり、JSファイルやCSSファイルをアップロードできる事実を知りFC2ブログにびっくり!
以下に導入手順を記載します。

下記サイトより、prettify_31_Aug_2007.zipをダウンロード。
google-code-prettify - Google Code

解凍すると下記2ファイルが展開されるので、FC2ブログの「ファイルアップロード」からいずれもアップロードを行います。このアップローダには、絶対画像のみという制限がついていると思ってましたが、JSファイルやCSSのみならずMP3ファイル、xmlファイル等もアップロードできるみたいですね。
・prettify.css
・prettify.js

で、アップロードが完了するとテンプレートを修正します。
まずは、アップロードした上記2ファイルを読み込ませる為、以下のHTMLタグを追加します。
<script src="(アップロード場所)/prettify.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="(アップロード場所)/prettify.css" />


※上記「アップロード場所」は、ファイルをアップロードしたページで「記事を書く」ボタンを押下すると表示されます。

次に下記関数をページ読み込み時にロードできるように追加します。
<body onLoad="prettyPrint();">

あとは、記事を追加するときに、下記タグでソースコードを囲めば・・・
<pre class="prettyprint">〜</pre>

ご覧の通りになります。
import java.io.*;
class test1{
public static void main(String args[]){
System.out.println("Hello World!");
}
}



今まで、livedoor、ameba、jugemといろいろブログサービスを利用してみましたが、こんなにカスタマイズ性に優れているFC2は最強だと思いました。

無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て