view src/test/XMLRPCTest.java @ 143:1a0c60efc627

add XmlRpc
author e085711
date Sat, 03 Sep 2011 15:24:41 +0900
parents fc77596d3064
children
line wrap: on
line source

package test;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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

public class XMLRPCTest {
	protected static final String META_WEBLOG_NEW_POST = "metaWeblog.newPost";
	protected static final String META_WEBLOG_EDIT_POST = "metaWeblog.editPost";
	
	public String getBlogid(String username,String password, String url) throws Exception {

		XmlRpcClient client = createClient(url);

		List<Object> params = new ArrayList<Object>();
		params.add("77"); 
		params.add(username);
		params.add(password);

//		Object result = client.execute("blogger.getUsersBlogs", params);
		Object result = client.execute("metaWeblog.getPost", params);
		
		if (result instanceof Boolean) {
			throw new Exception("can't get UsersBlogs");
		}
		
//		Object obj = ((Object[])result)[0];
//		Map map = (HashMap) obj;		
//		String blogid = (String) map.get("blogid");
//		return blogid;

		Map map = (HashMap) result;
		String s = String.valueOf(map.get("description"));
		return s;
	}

	public int post(String title, String description, String blogId,
			String loginId, String pw, String url) throws IOException {
		int ret = -1;

		// 記事を作る
		// 必要に応じてカスタムフィールドやslugの引数も追加。
		Map<String, Object> contentParam = buildContent(title, description);
		// パラメータとして記事を渡す。
		List<Object> params = buildParam(blogId, loginId, pw, contentParam);

		// クライアント作る
		XmlRpcClient client = createClient(url);
		Object o = null;
		try {
			// 送信
			o = client.execute(META_WEBLOG_NEW_POST, params);
			ret = Integer.parseInt(o.toString());
		} catch (XmlRpcException e) {
			e.printStackTrace();
		}
		return ret; // 成功なら1
	}

	public String edit(String title, String description, String blogId,
			String loginId, String pw, String url) throws IOException {
		String result = "";

		Map<String, Object> contentParam = buildContent(title, description);
		List<Object> params = buildParam(blogId, loginId, pw, contentParam);

		XmlRpcClient client = createClient(url);
		Object o = null;
		try {
			o = client.execute(META_WEBLOG_EDIT_POST, params);
			result = o.toString();
		} catch (XmlRpcException e) {
			e.printStackTrace();
		}
		return result; // 成功ならtrue
	}

	
	/**
	 * XmlRpcClientをインスタンス化する
	 * 
	 * @param postUrl
	 * @return
	 * @throws MalformedURLException
	 */
	protected XmlRpcClient createClient(String postUrl)
			throws MalformedURLException {
		XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();

		config.setServerURL(new URL(postUrl.trim()));

		XmlRpcClient client = new XmlRpcClient();

		client.setConfig(config);

		return client;
	}

	/**
	 * コンテンツ用のパラメーターを組み立てる
	 * 
	 * @param wordsalad
	 * @return
	 */
	protected Map<String, Object> buildContent(String title, String description) {
		Map<String, Object> content = new HashMap<String, Object>();
		// XMLRPC用に改行コードを書き換える
		description = description.replaceAll("\n", "<br/>");

		content.put("title", title);

		String[] categories = new String[1];
		categories[0] = "XML-RPC";
		content.put("categories", categories);

		content.put("description", description);

		content.put("dateCreated", "");

		content.put("wp_slug", "");

		
		// カスタムフィールドの設定
		/*
		 * Map<String, Object>[] customFields = new Map[1];
		 * 
		 * Map<String, Object> jimusho = new HashMap<String, Object>();
		 * 
		 * jimusho.put("key", "company");
		 * 
		 * jimusho.put("value", "じむしょ");
		 * 
		 * customFields[0] = jimusho;
		 * 
		 * content.put("custom_fields", customFields);
		 */
		return content;
	}

	protected List<Object> buildParam(String blogId, String loginId, String pw,
			Map<String, Object> contentParam) {
		List<Object> params = new ArrayList<Object>();

		params.add(""); // appkey
		params.add(blogId);
		params.add(loginId);
		params.add(pw);
		params.add(contentParam);// content
		params.add("1");// publish

		return params;
	}

	public static void main(String[] args) throws Exception {
		String title = "xml-rpcを用いての投稿テスト @ newPost";
		String description = "metaWeblog.editPost<br>xml-rpc @ java";
		String blogId = "77";
		String loginId = "aotokage52";
		String pw = "jasonkidd";
		String url = "http://single.cr.ie.u-ryukyu.ac.jp/wordpress/xmlrpc.php";

		XMLRPCTest logic = new XMLRPCTest();

//		int res = logic.post(title, description, blogId, loginId, pw, url);
		String res = logic.edit(title, description, blogId, loginId, pw, url);
//		String result = logic.getBlogid(loginId, pw,url);
		System.out.println("result = "+ res);
		
	}
}