1. 原理介绍
1) XML-RPC介绍
XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。原理是XML-RCP工具把传入的参数组合成XML,然后用通过http协议发给服务器,服务器回复XML格式数据,再由工具解析给调用者。
2) 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从以下地址下载,完整例程中包含此部分https://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("https://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. 参考:
1) wordpress使用Meta weblog的接口如下https://cn.wordpress.org/xmlrpc.php
2) 【PHP】XML-RPCで投稿!https://blog.studio23c.com/?p=108