Android使用XML-RPC实现blog客户端
Android 使用 XML-RPC 实现 blog 客户端
#移动开发 #Android
1. 原理介绍
- XML-RPC 介绍
XML-RPC 的全称是 XML Remote Procedure Call,即 XML 远程方法调用。原理是 XML-RCP
工具把传入的参数组合成 XML, 然后用通过 http 协议发给服务器,服务器回复 XML 格式数据,再由工具解析给调用者。
- Meta Weblog API
一些 Blog 提供 Meta Weblog API,用以支持通过 XML-RPC 的方法在软件中编辑及浏览 Blog。常用的 API
如下: 发布新文章 (metaWeblog.newPost)、获取分类 (metaWeblog.getCategories) 和最新文章
(metaWeblog.getRecentPosts)、新建文章分类 (wp.newCategory)、上传图片音频或视频
(metaWeblog. newMediaObject) 等。
2. Android 的 XML-RPC 支持
Android 本身并不支持 XML-RPC 协议, 需要下载相关应的工具, 本例中使用的
XML-RPC
从以下地址下载,完整例程中包含此部分
[http://code.google.com/p/android-xmlrpc/downloads/list
](http://code.google.com/p/android-xmlrpc/downloads/list)
3. 例程
** package org.xmlrpc;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.conn.HttpHostConnectException;
import org.xmlrpc.android.XMLRPCClient;
import org.xmlrpc.android.XMLRPCException;
import org.xmlrpc.android.XMLRPCFault;
import org.xmlrpc.android.XMLRPCSerializable;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.Button;
import android.content.DialogInterface.OnCancelListener;
import android.view.View.OnClickListener;
import android.view.View;
public class TestBlog extends Activity {
private XMLRPCClient client;
private URI uri;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_blog);
Button btn = (Button) findViewById(R.id.send);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
post();
}
});
}
void post() {
String blogid = ((EditText)
findViewById(R.id.blogid_edit)).getText()
.toString(); // ** ** 博客 ** ** ID, ** ** 有的博客支持一个用户多个 **
** ID
String username = ((EditText) findViewById(R.id.username_edit))
.getText().toString(); // ** ** 用户名 ** **
String password = ((EditText) findViewById(R.id.password_edit))
.getText().toString(); // ** ** 密码 ** **
String title = ((EditText)
findViewById(R.id.title_edit)).getText()
.toString(); // ** ** 标题 ** **
String content = ((EditText)
findViewById(R.id.content_edit)).getText()
.toString(); // ** ** 正文 ** **
uri = URI.create("http://blog.csdn.net/" + blogid
+ "/services/metablogapi.aspx");
client = new XMLRPCClient(uri);
Map <String, Object> structx = new HashMap<String,
Object>();
structx.put("title", title);
structx.put("description", content);
Object[] params = new Object[] { blogid, username, password,
structx,
true };
try {
client.callEx("metaWeblog.newPost", params);
Toast.makeText(this, "OK", 10000).show();
} catch (XMLRPCException e) {
Toast.makeText(this, "ERROR" + e, 10000).show();
}
}
} **
4. 多媒体上传的介绍
上传多图片视频音频方法如下
** Map <String, Object> structx = new HashMap<String,
Object>();
structx.put("name", “xxx.jpg”); // ** ** 文件名 ** **
structx.put("type”, “image/jpeg”); // ** ** 格式 ** **
structx.put("bits", filebytes); // ** ** 文件内容 ** ,
** 需要 ** **
base64 ** ** 编码 ** , ** 可使用 ** ** android.util.Base64 ** ** 来编码 **
**
structx.put("overwrite", true); // ** ** 是否覆盖 ** **
Object[] params = new Object[] { blogid, username, password,
structx};
client.callEx("metaWeblog.newPost", params); **
通过此方式可以实现相片视频的即片即转功能
5. 参考:
wordpress 使用 Meta weblog 的接口如下
http://cn.wordpress.org/xmlrpc.php【PHP】XML-RPC で投稿! http://blog.studio23c.com/?p=108
完整例程下载
[http://download.csdn.net/source/2793892
](http://download.csdn.net/source/2793892)