東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

网易博客导入blogspot之03API

2016年8月15日星期一



一个一个来
1,网易博客API
地址www.cnblogs.com/ybbqg/archive/2012/03/19/2405562.html
原文内容如下
  1. 为了备份博客内容,本人开始研究网易博客的API。有关这方面的资料很少,开始以为没有API,后来偶然之间发现 网易博客还是有API的。
  2.  
  3. 网易博客支持MetaWeblog API, 所谓网络服务AP俱为webservice也。
  4. 据研究,MetaWeblog API是xml-rpc风格的webservice.
  5. 网易博客api地址是os.blog.163.com/api/xmlrpc/metaweblog/
  6. MetaWeblog 有以下调用方法:
  7. 1>metaWeblog.newPost (blogid, username, password, struct, publish) 返回一个字符串,可能是Blog的ID。
  8. 2>metaWeblog.editPost (postid, username, password, struct, publish) 返回一个Boolean值,代表是否修改成功。
  9. 3>metaWeblog.getPost (postid, username, password) 返回一个Struct。
  10. 其中blogid、username、password分别代表Blog的id(注释:如果你有两个 Blog,blogid指定你需要编辑的blog)、用户名和密码。
  11.  
  12. 4>metaWeblog.newMediaObject (blogid, username, password, struct) 返回一个数组
  13. 其中blogid、username、password分别代表Blog的id(注释:如果你有两个 Blog,blogid指定你需要编辑的blog)、用户名和密码。struct必须包含name, type 和bits三个元素,当然也可以包含其他元素。
  14. name代表数据的名称,type是数据的MIME类型,譬如audio/mpeg 、image/jpeg和video/quicktime。bits是数据的base64编码形式的数据流。
  15. 如果调用失败,它显示错误信息。如果调用成功,返回值是一个Struct,里面至少包含一个Url元素,代表数据 的HTTP或者FTP Url。
  16.  
  17. 5>metaWeblog.getCategories(blogid, username, password) 返回一个struct。
  18. 返回值包含所有的Blog的类别,每一个列别包含description, htmlUrl and rssUrl。
  19. 6>metaWeblog.getRecentPosts(blogid, username, password, numberOfPosts) 返回一个结构(struct)的数组(array)。
  20. 每一个Struct包含getPost返回值一样的结构。
  21. numberOfPosts是返回的数量。
  22.  
  23. 先从getRecentPosts开始,blogid设为空,numberOfPosts设为10,调用-》没问 题,OK
  24. numberOfPosts设为50,调用-》没问题,OK
  25. numberOfPosts设为100,调用-》失败
  26. numberOfPosts设为51,调用-》失败
  27. 说明网易API最多返回50条博客记录,不地道。本人博客已经超过这个数,这可怎么办啊。
  28. 难道真要分析HTML,哦,这个工作量有点大

说网易用的是MetaWebblog。

这几个技术的对比:www.ibm.com/developerworks/cn/xml/x-metablog

试了半天,一直都是账号密码验证不过去。。。。
  1. Exception in thread "main" org.apache.xmlrpc.XmlRpcException: java.lang.RuntimeException: blog auth failed, check your username/password
  2.     at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:181)
  3.     at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:149)
  4.     at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:95)
  5.     at org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:39)
  6.     at org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
  7.     at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
  8.     at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
  9.     at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
  10.     at dc.test.xmlrpc.TestPost.main(TestPost.java:56)

不知道blogId这个是几,半天找不到哪个是
上面说的是这个接口只能返回50条记录,我测试的RSS只能返回40条。。。。
  1. /** 
  2.  * Filename:    TestPost.java 
  3.  * Description:  
  4.  * Copyright:   Copyright (c)2016 
  5.  * Company:     SENRSL 
  6.  * @author:     senRsl senRsl@163.com 
  7.  * @version:    1.0 
  8.  * Create at:   2016年8月12日 下午4:03:47 
  9.  * 
  10.  * Modification History: 
  11.  * Date             Author      Version     Description 
  12.  * ------------------------------------------------------------------ 
  13.  * 2016年8月12日   senRsl      1.0            1.0 Version 
  14.  */
  15. package dc.test.xmlrpc;
  16. import java.net.URL;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. import org.apache.xmlrpc.client.XmlRpcClient;
  20. import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
  21. /**
  22.  *
  23.  *
  24.  * @ClassName: TestPost
  25.  * @author senrsl
  26.  *
  27.  * @Package: dc.test.xmlrpc
  28.  * @CreateTime: 2016年8月12日 下午4:03:47
  29.  */
  30. public class TestPost {
  31.      public static void main(String[] args) throws Exception {
  32.         // Set up XML-RPC connection to server
  33.                 XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
  34. //                config.setServerURL(new URL("http://wordpress-host/wordpress/xmlrpc.php"));
  35.                 config.setServerURL(new URL("http://os.blog.163.com/api/xmlrpc/metaweblog/"));
  36.                 XmlRpcClient client = new XmlRpcClient();
  37.                 client.setConfig(config);
  38.         // Set up parameters required by newPost method
  39.                 Map<String, String> post = new HashMap<String, String>();
  40.                 post.put("title", "Hello, Blog,post with xml rpc!");
  41.                 post.put("link", "http://cool.china.blog.163.com/");
  42.                 post.put("description", "This is the content of a trivial post.");
  43. //                Object[] params = new Object[]{"1", "admin", "password", post, Boolean.TRUE};
  44.                 Object[] params = new Object[]{"111", "账号", "密码", post, Boolean.TRUE};
  45.         // Call newPost
  46.                 String result = (String) client.execute("metaWeblog.newPost", params);
  47. //                String result = (String) client.execute("metaWeblog.getRecentPosts", params);
  48.                 System.out.println(" Created with blogid " + result);
  49.             }
  50.    
  51.    
  52. //    private static byte[] readFromFile(String src) throws Exception {
  53. //        byte data[];
  54. //        File file = new File(src);
  55. //        InputStream in = new FileInputStream(src);
  56. //        data = new byte[(int)file.length()];
  57. //        in.read(data);
  58. //        in.close();
  59. //        return data;
  60. //    }
  61. //
  62. //    public static void main(String[] args) throws Exception {
  63. //
  64. //        String filename = "/home/senrsl/share/temp/111.xml";
  65. //        String title = "Sample Post From a File";
  66. //
  67. //// Parse and apply command-line args
  68. ////        if (args.length > 1) {
  69. ////            filename = args[0];
  70. ////            title = args[1];
  71. ////        } else if (args.length == 1) {
  72. ////            filename = args[0];
  73. //            title = "Posted From File: " + filename;
  74. ////        } else {
  75. ////            System.out.println("Usage: DemoPostFile filename [title] ");
  76. ////            return;
  77. ////        }
  78. //
  79. //// Set up XML-RPC connection to server
  80. //        XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
  81. //        config.setServerURL(new URL("http://os.blog.163.com/api/xmlrpc/metaweblog/"));
  82. //        XmlRpcClient client = new XmlRpcClient();
  83. //        client.setConfig(config);
  84. //
  85. //// Read post from file and set up parameters required
  86. //// by newPost method
  87. //        String bits = new String(readFromFile(filename));
  88. //        System.out.println(bits);
  89. //        Map<String, String> post = new HashMap<String, String>();
  90. //        post.put("title", title);
  91. //        post.put("description", bits);
  92. //        Object[] params = new Object[]{"1", "账号", "密码 ", post, true};
  93. //
  94. //// Call newPost
  95. //        String result = (String) client.execute("metaWeblog.newPost", params);
  96. //        System.out.println(" Created with blogid " + result);
  97. //    }
  98.    
  99.    
  100.    
  101. }
这样的话,只能抓网页或者用RSS订阅了

抓网页就麻烦了。。。。
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
评论好像是要单独去加,因为我加评论结果它抛了个地址给我
  1. Response
  2.  
  3. 200
  4.  
  5. - Show headers -
  6.  
  7. {
  8.  "published": "2006-08-11T01:04:00-07:00",
  9.  "updated": "2016-08-12T04:10:18-07:00",
  10.  "etag": "\"GtyIIQmNmmUjEA0nwhSqMElCJ1g/dGltZXN0YW1wOiAxNDcxMDAwMjE4OTE4Cm9mZnNldDogLTI1MjAwMDAwCg\"",
  11.  "title": "标题-来自于google dev 在线测试02",
  12.  "content": "这是内容",
  13.  "replies": {
  14.   "totalItems": "0",
  15.   "selfLink": "https://www.googleapis.com/blogger/v3/blogs/171507978679241883/posts/3355310783326125923/comments"
  16.  },
  17.  "labels": [
  18.   "标签2",
  19.   "标签一"
  20.  ],
  21.  "location": {
  22.   "name": "应该是北非",
  23.   "lat": 11,
  24.   "lng": 22,
  25.   "span": "这是什么"
  26.  },
  27.  "readerComments": "ALLOW"
  28. }
  29.  
点开是添加评论的地址呢。
额,地址是展示的地址

真是强大呢
2016年08月12日19:16:29


折腾半天,还是用android打底吧。
2016年08月15日18:23:48


--
senRsl
2016年08月12日14:59:37

没有评论 :

发表评论