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.    AndroidXML-RPC支持
Android
本身并不支持XML-RPC协议, 需要下载相关应的工具, 本例中使用的XML-RPC从以下地址下载,完整例程中包含此部分
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.    参考:

1)        wordpress使用Meta weblog的接口如下
http://cn.wordpress.org/xmlrpc.php

2)        PHPXML-RPCで投稿!
http://blog.studio23c.com/?p=108

3)        完整例程下载
http://download.csdn.net/source/2793892

posted on 2010-10-29 16:52  xieyan0811  阅读(23)  评论(0编辑  收藏  举报