感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaでFC2に自動投稿する

スポンサーリンク

■ダウンロード
http://www.apache.org/dyn/closer.cgi/ws/xmlrpc/

※XML RPCのjarをダウンロードしたかったので、
ftp://ftp.riken.jp/net/apache/ws/xmlrpc/binaries/
から
apache-xmlrpc-3.1.3-bin.zipをdownloadした。

Eclipseのプロジェクトでダウンロードしたjarにパスを通す。
右クリック→プロパティ→ビルドパス→外部jarの追加
jarはlibの下にある。

で、この記事にあるような感じでコードを書くと・・・
http://hihoblog-make.seesaa.net/article/225474055.html

こんな感じで例外が発生する

Exception in thread "main" org.apache.xmlrpc.XmlRpcException: Failed to generate request: Unsupported Java type: com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable
	at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:168)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
	at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
	at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
	at blogpost.BlogPostTest.main(BlogPostTest.java:37)
Caused by: org.xml.sax.SAXException: Unsupported Java type: com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable
	at org.apache.xmlrpc.serializer.XmlRpcWriter.writeValue(XmlRpcWriter.java:173)
	at org.apache.xmlrpc.serializer.XmlRpcWriter.write(XmlRpcWriter.java:80)
	at org.apache.xmlrpc.client.XmlRpcStreamTransport$ReqWriterImpl.write(XmlRpcStreamTransport.java:70)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport$ByteArrayReqWriter.<init>(XmlRpcHttpTransport.java:45)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport.newReqWriter(XmlRpcHttpTransport.java:155)
	at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:150)
	... 7 more
Caused by:
org.xml.sax.SAXException: Unsupported Java type: com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable
	at org.apache.xmlrpc.serializer.XmlRpcWriter.writeValue(XmlRpcWriter.java:173)
	at org.apache.xmlrpc.serializer.XmlRpcWriter.write(XmlRpcWriter.java:80)
	at org.apache.xmlrpc.client.XmlRpcStreamTransport$ReqWriterImpl.write(XmlRpcStreamTransport.java:70)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport$ByteArrayReqWriter.<init>(XmlRpcHttpTransport.java:45)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport.newReqWriter(XmlRpcHttpTransport.java:155)
	at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:150)
	at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143)
	at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69)
	at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:137)
	at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:126)
	at blogpost.BlogPostTest.main(BlogPostTest.java:37)

なぜかというと、Webにあるサンプルとはjarのバージョンが違ってたみたい。
デバッグは後にして、とりあえず実行するために2.0のバージョンを取得
http://www.findjar.com/jar/xmlrpc/jars/xmlrpc-2.0.jar.html

こちらはメモ FC2以外でもXML-RPCを使って自動投稿できるっぽい。
http://ameblo.jp/af-tools/entry-11049151940.html

それでも苦戦したので、
今度はこのブログも参考に。
http://friegen.blog.fc2.com/blog-entry-12.html

すると今度はバージョン2.0はいらなくなった。

で、サンプルを参考に作ったら、
やっと投稿できた〜〜〜〜〜!!!!
Javaを使って、FC2に自動投稿

package blogpost;

import java.net.URL;
import java.util.Hashtable;

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class BlogPostTest {
	public static void main(String[] args) throws Exception{
		Post("http://blog.fc2.com/xmlrpc.php","TEST TITLE","TEST BODY","BlogId","MailAddress","PassWord");
		
	}
	public static boolean Post(String aServerURL,String aTitle,String aHtml,String ablogId,String aMailAddress,String aPassWord)
	{
	    boolean ret = false;
	    try
	     {

	         XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
	         config.setServerURL(new URL(aServerURL));

	         XmlRpcClient client = new XmlRpcClient();
	         client.setConfig(config);
	         Hashtable hash = new Hashtable();
	         hash.put("title", aTitle);// 記事のタイトル
	         hash.put("description", aHtml);// 本文
	         hash.put("mt_convert_breaks", true); // 本文中の改行をbrタグで反映
	         hash.put("mt_allow_comments", true); // コメントを受け付けるか
	         hash.put("mt_allow_pings", true); // トラックバックを受け付けるか
	         hash.put("mt_text_more", "続きを読むの部分です");

	         Object[] params = new Object[5];
	         params[0] = ablogId; // blogId
	         params[1] = aMailAddress;
	         params[2] = aPassWord;
	         params[3] = hash;
	         params[4] = true; // publish(trueで公開, falseで下書)
	         Object result = client.execute("metaWeblog.newPost", params);

	         System.out.println("main::Post 記事番号:" + result + "です。");
	         ret = true;
	     }
	     catch(Exception e)
	     {
	        System.out.println("main::Post 記事投稿で失敗");
	        System.out.println(e.getMessage());
	     }
	     return ret;
	}
}

次はxml-rpcとはなんぞや、という勉強と、記事の自動投稿の理解を深める。