本程序可以完成的工作:转移csdn上面的文章(限于文本内容)到wordpress;不能完成的工作:1、不支持在wordpress上创建分类,所以需要提前在wordpress上手工创建分类(保持与csdn一致);2、不能以很好的格式转移文章,转移之后文章格式需要调整。

 

程序由采集、解析、发帖三部分构成。采集负责将指定url的内容下载下来,解析负责从网页内容中解析出正文链接、标题、发布时间、分类信息,发帖部分负责将解析出来的数据通过rpc发送给wordpress,生成博文。

 

本程序用到的jar包及其版本如下:

-rw-r--r-- 1 mingyuan mingyuan  46725 2011-09-03 23:05 commons-codec-1.3.jar
-rw-r--r-- 1 mingyuan mingyuan 279781 2011-09-03 23:05 commons-httpclient-3.0.1.jar
-rwxrwxrwx 1 mingyuan mingyuan  52915 2010-05-03 03:39 commons-logging-1.1.jar
-rw-r--r-- 1 mingyuan mingyuan 281579 2011-09-04 01:40 jsoup-1.6.1.jar
-rwxrwxrwx 1 mingyuan mingyuan  34407 2010-05-03 03:39 ws-commons-util-1.0.2.jar
-rwxrwxrwx 1 mingyuan mingyuan  58573 2010-05-03 03:39 xmlrpc-client-3.1.3.jar
-rwxrwxrwx 1 mingyuan mingyuan 109131 2010-05-03 03:39 xmlrpc-common-3.1.3.jar
-rwxrwxrwx 1 mingyuan mingyuan  81555 2010-05-03 03:39 xmlrpc-server-3.1.3.jar

 

代码很简单,就不解释了,大伙看看即可明白。程序的入口函数是Mover.main

 

下面先给出主要的类Mover.java

  1. package cn.mingyuan.csdn2wordpress;
  2.  
  3. import java.io.IOException;
  4. import java.net.MalformedURLException;
  5. import java.net.URL;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import java.util.HashMap;
  10. import java.util.LinkedList;
  11. import java.util.List;
  12. import java.util.Map;
  13. import java.util.concurrent.TimeUnit;
  14.  
  15. import org.apache.xmlrpc.XmlRpcException;
  16. import org.apache.xmlrpc.client.XmlRpcClient;
  17. import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
  18. import org.jsoup.Jsoup;
  19. import org.jsoup.nodes.Document;
  20. import org.jsoup.nodes.Element;
  21. import org.jsoup.select.Elements;
  22.  
  23. /**
  24.  * 采集、解析、转移
  25.  * 
  26.  * @author mingyuan
  27.  * 
  28.  */
  29. public class Mover {
  30.     private int totalPages;
  31.     private XmlRpcClientConfigImpl config;
  32.     private XmlRpcClient client;
  33.     private String baseUrl;
  34.     private Object userName;
  35.     private Object password;
  36.     private String csdnUserName;
  37.  
  38.     public Mover(int totalPages, String blogRpcUrl, String csdnUrl, String csdnUserName, String userName,
  39.             String password) {
  40.         this.totalPages = totalPages;
  41.         this.baseUrl = csdnUrl;
  42.         this.csdnUserName = csdnUserName;
  43.         this.userName = userName;
  44.         this.password = password;
  45.         config = new XmlRpcClientConfigImpl();
  46.         try {
  47.             config.setServerURL(new URL(blogRpcUrl));
  48.         } catch (MalformedURLException e) {
  49.             System.out.println(“请检查url”);
  50.         }
  51.         client = new XmlRpcClient();
  52.         client.setConfig(config);
  53.     }
  54.  
  55.     private List<String> getlinks() {
  56.         List<String> list = new LinkedList<String>();
  57.         for (int i = 1; i <= totalPages; i++) {
  58.             System.out.println(“processing page ” + i);
  59.             Downloader downloader = new Downloader();
  60.             String content = downloader.download(baseUrl + “/” + csdnUserName + “/article/list/” + i);
  61.             if (content == null)
  62.                 continue;
  63.             Document doc = Jsoup.parse(content);
  64.             Elements first = doc.select(“.link_title”);
  65.             for (int j = 0; j < first.size(); j++) {
  66.                 Element first2 = first.get(j).select(“a”).first();
  67.                 String link = baseUrl + first2.attr(“href”);
  68.                 list.add(link);
  69.                 System.out.println(“get link\t” + link);
  70.             }
  71.             System.out.println(“page ” + i + “ extractor done,sleep 2s”);
  72.             try {
  73.                 TimeUnit.SECONDS.sleep(1);
  74.             } catch (InterruptedException e) {
  75.                 e.printStackTrace();
  76.             }
  77.         }
  78.         return list;
  79.     }
  80.  
  81.     public List<CSDNPost> getPosts() {
  82.         List<String> links = getlinks();
  83.         List<CSDNPost> posts = new LinkedList<CSDNPost>();
  84.         for (String link : links) {
  85.             CSDNPost post = getPost(link);
  86.             if (post != null) {
  87.                 posts.add(post);
  88.             }
  89.         }
  90.         return posts;
  91.     }
  92.  
  93.     private CSDNPost getPost(String url) {
  94.         System.out.println(“url\t” + url);
  95.         Downloader downloader = new Downloader();
  96.         String html = downloader.download(url);
  97.         if (html ==