一个一个来
1,网易博客API
地址www.cnblogs.com/ybbqg/archive/2012/03/19/2405562.html
原文内容如下
- 为了备份博客内容,本人开始研究网易博客的API。有关这方面的资料很少,开始以为没有API,后来偶然之间发现 网易博客还是有API的。
- 网易博客支持MetaWeblog API, 所谓网络服务AP俱为webservice也。
- 据研究,MetaWeblog API是xml-rpc风格的webservice.
- 网易博客api地址是os.blog.163.com/api/xmlrpc/metaweblog/
- MetaWeblog 有以下调用方法:
- 1>metaWeblog.newPost (blogid, username, password, struct, publish) 返回一个字符串,可能是Blog的ID。
- 2>metaWeblog.editPost (postid, username, password, struct, publish) 返回一个Boolean值,代表是否修改成功。
- 3>metaWeblog.getPost (postid, username, password) 返回一个Struct。
- 其中blogid、username、password分别代表Blog的id(注释:如果你有两个 Blog,blogid指定你需要编辑的blog)、用户名和密码。
- 4>metaWeblog.newMediaObject (blogid, username, password, struct) 返回一个数组
- 其中blogid、username、password分别代表Blog的id(注释:如果你有两个 Blog,blogid指定你需要编辑的blog)、用户名和密码。struct必须包含name, type 和bits三个元素,当然也可以包含其他元素。
- name代表数据的名称,type是数据的MIME类型,譬如audio/mpeg 、image/jpeg和video/quicktime。bits是数据的base64编码形式的数据流。
- 如果调用失败,它显示错误信息。如果调用成功,返回值是一个Struct,里面至少包含一个Url元素,代表数据 的HTTP或者FTP Url。
- 5>metaWeblog.getCategories(blogid, username, password) 返回一个struct。
- 返回值包含所有的Blog的类别,每一个列别包含description, htmlUrl and rssUrl。
- 6>metaWeblog.getRecentPosts(blogid, username, password, numberOfPosts) 返回一个结构(struct)的数组(array)。
- 每一个Struct包含getPost返回值一样的结构。
- numberOfPosts是返回的数量。
- 先从getRecentPosts开始,blogid设为空,numberOfPosts设为10,调用-》没问 题,OK
- numberOfPosts设为50,调用-》没问题,OK
- numberOfPosts设为100,调用-》失败
- numberOfPosts设为51,调用-》失败
- 说明网易API最多返回50条博客记录,不地道。本人博客已经超过这个数,这可怎么办啊。
- 难道真要分析HTML,哦,这个工作量有点大
说网易用的是MetaWebblog。
这几个技术的对比:www.ibm.com/developerworks/cn/xml/x-metablog
试了半天,一直都是账号密码验证不过去。。。。
- Exception in thread "main" org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: blog auth failed, check your username/password
- at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:181)
- at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:149)
- at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:95)
- at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
- at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
- at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
- at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
- at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
- at dc.test.xmlrpc.TestPost.main(TestPost.java:56)
不知道blogId这个是几,半天找不到哪个是
上面说的是这个接口只能返回50条记录,我测试的RSS只能返回40条。。。。
这样的话,只能抓网页或者用RSS订阅了
- /**
- * Filename: TestPost.java
- * Description:
- * Copyright: Copyright (c)2016
- * Company: SENRSL
- * @author: senRsl senRsl@163.com
- * @version: 1.0
- * Create at: 2016年8月12日 下午4:03:47
- *
- * Modification History:
- * Date Author Version Description
- * ------------------------------------------------------------------
- * 2016年8月12日 senRsl 1.0 1.0 Version
- */
- package dc.test.xmlrpc;
- import java.net.URL;
- import java.util.HashMap;
- import java.util.Map;
- import org.apache.xmlrpc.client.XmlRpcClient;
- import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
- /**
- *
- *
- * @ClassName: TestPost
- * @author senrsl
- *
- * @Package: dc.test.xmlrpc
- * @CreateTime: 2016年8月12日 下午4:03:47
- */
- public class TestPost {
- public static void main(String[] args) throws Exception {
- // Set up XML-RPC connection to server
- XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- // config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
- config.setServerURL(new URL("http://os.blog.163.com/api/xmlrpc/metaweblog/"));
- XmlRpcClient client = new XmlRpcClient();
- client.setConfig(config);
- // Set up parameters required by newPost method
- Map<String, String> post = new HashMap<String, String>();
- post.put("title", "Hello, Blog,post with xml rpc!");
- post.put("link", "http://cool.china.blog.163.com/");
- post.put("description", "This is the content of a trivial post.");
- // Object[] params = new Object[]{"1", "admin", "password", post, Boolean.TRUE};
- Object[] params = new Object[]{"111", "账号", "密码", post, Boolean.TRUE};
- // Call newPost
- String result = (String) client.execute("metaWeblog.newPost", params);
- // String result = (String) client.execute("metaWeblog.getRecentPosts", params);
- System.out.println(" Created with blogid " + result);
- }
- // private static byte[] readFromFile(String src) throws Exception {
- // byte data[];
- // File file = new File(src);
- // InputStream in = new FileInputStream(src);
- // data = new byte[(int)file.length()];
- // in.read(data);
- // in.close();
- // return data;
- // }
- //
- // public static void main(String[] args) throws Exception {
- //
- // String filename = "/home/senrsl/share/temp/111.xml";
- // String title = "Sample Post From a File";
- //
- //// Parse and apply command-line args
- //// if (args.length > 1) {
- //// filename = args[0];
- //// title = args[1];
- //// } else if (args.length == 1) {
- //// filename = args[0];
- // title = "Posted From File: " + filename;
- //// } else {
- //// System.out.println("Usage: DemoPostFile filename [title] ");
- //// return;
- //// }
- //
- //// Set up XML-RPC connection to server
- // XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
- // config.setServerURL(new URL("http://os.blog.163.com/api/xmlrpc/metaweblog/"));
- // XmlRpcClient client = new XmlRpcClient();
- // client.setConfig(config);
- //
- //// Read post from file and set up parameters required
- //// by newPost method
- // String bits = new String(readFromFile(filename));
- // System.out.println(bits);
- // Map<String, String> post = new HashMap<String, String>();
- // post.put("title", title);
- // post.put("description", bits);
- // Object[] params = new Object[]{"1", "账号", "密码 ", post, true};
- //
- //// Call newPost
- // String result = (String) client.execute("metaWeblog.newPost", params);
- // System.out.println(" Created with blogid " + result);
- // }
- }
抓网页就麻烦了。。。。
RSS订阅看看支持评论不
验证了下,用网易自己的阅读器订阅RSS也是40条。。。。
尝试其他通道,如liveWriter
反编译apk
。。。。反编译了apk,发现里面就内置了一个网页。。。。。。
折腾了半天,发现路线不对
应该先研究blogspot api,post的时候是否支持自定义时间。
如果支持的话,就不需要做转xml跟导xml功能了。
如果不支持的话,blogspot的api也是要做的。。。。
跳3
2,新浪微博API
地址open.weibo.com/wiki/微博API
这个前几年做各种微博大集合的时候做过,还好
3,Blogspot API
地址developers.google.com/blogger/docs/3.0/reference/
如果这个支持post文章时间的话,那就不用生成xml往里导了,直接挨个post就满足要求了。。。。
折腾了半天原来api的下面就有测试工具,太方便了。。。。
太赞了
后面还有使用sdk的代码示例。。。。
看起来是可以支持自定义时间
地址developers.google.com/resources/api-libraries/documentation /blogger/v3/java/latest/
在API里POST类中有
看起来都有
发布时间,更新时间,位置,标签,回复。
有这些就够了。。。。
这还是封装好的sdk,看来都不用自己封了
试了一下,果然可以
时间要用这种格式:2006-08-11T01:04:00.002-07:00
评论好像是要单独去加,因为我加评论结果它抛了个地址给我
点开是添加评论的地址呢。
- Response
- 200
- - Show headers -
- {
- "published": "2006-08-11T01:04:00-07:00",
- "updated": "2016-08-12T04:10:18-07:00",
- "etag": "\"GtyIIQmNmmUjEA0nwhSqMElCJ1g/dGltZXN0YW1wOiAxNDcxMDAwMjE4OTE4Cm9mZnNldDogLTI1MjAwMDAwCg\"",
- "title": "标题-来自于google dev 在线测试02",
- "content": "这是内容",
- "replies": {
- "totalItems": "0",
- "selfLink": "https://www.googleapis.com/blogger/v3/blogs/171507978679241883/posts/3355310783326125923/comments"
- },
- "labels": [
- "标签2",
- "标签一"
- ],
- "location": {
- "name": "应该是北非",
- "lat": 11,
- "lng": 22,
- "span": "这是什么"
- },
- "readerComments": "ALLOW"
- }
额,地址是展示的地址
真是强大呢
2016年08月12日19:16:29
折腾半天,还是用android打底吧。
2016年08月15日18:23:48
--
senRsl
2016年08月12日14:59:37
2016年08月12日14:59:37
没有评论 :
发表评论