利用Java得到RSS源的内容

IRSSParser.java

[c-sharp] view plaincopy
  1. public interface IRSSParser {
  2. RSSChannel parseRSS() throws RSSException;
  3. }

RSSChannel.java   (对应<channel>标签)

[java] view plaincopy
  1. public class RSSChannel implements Serializable {
  2. private Map<String, String> kv;
  3. private List<RSSItem> items;
  4. public RSSChannel() {
  5. kv = new HashMap<String, String>();
  6. items = new ArrayList<RSSItem>();
  7. }
  8. public List<RSSItem> getItems() {
  9. return items;
  10. }
  11. public void addItems(RSSItem item) {
  12. items.add(item);
  13. }
  14. public void set(String key, String value) {
  15. kv.put(key, value);
  16. }
  17. public String get(String key) {
  18. return kv.get(key);
  19. }
  20. public String toString() {
  21. StringBuilder sb = new StringBuilder();
  22. sb.append("[/n");
  23. Set<String> keySet = kv.keySet();
  24. Iterator<String> keyIter = keySet.iterator();
  25. while(keyIter.hasNext()) {
  26. String key = keyIter.next();
  27. String value = kv.get(key);
  28. sb.append(key + "=" + value + "/n");
  29. }
  30. for (int i = 0; i < items.size(); i++) {
  31. RSSItem item = items.get(i);
  32. sb.append(item.toString() + "/n");
  33. }
  34. sb.append("]/n");
  35. return sb.toString();
  36. }
  37. }

RSSItem.java  (对应<item>标签)

[java] view plaincopy
  1. public class RSSItem implements Serializable {
  2. private Map<String, String> kv;
  3. public RSSItem() {
  4. kv = new HashMap<String, String>();
  5. }
  6. public void set(String key, String value) {
  7. kv.put(key, value);
  8. }
  9. public String get(String key) {
  10. return kv.get(key);
  11. }
  12. public String toString() {
  13. StringBuilder sb = new StringBuilder();
  14. sb.append("[/n");
  15. Set<String> keySet = kv.keySet();
  16. Iterator<String> keyIter = keySet.iterator();
  17. while(keyIter.hasNext()) {
  18. String key = keyIter.next();
  19. String value = kv.get(key);
  20. sb.append(key + "=" + value + "/n");
  21. }
  22. sb.append("]");
  23. return sb.toString();
  24. }
  25. }

RSSException.java

[java] view plaincopy
  1. public class RSSException extends Exception {
  2. public RSSException() {
  3. super();
  4. }
  5. public RSSException(Throwable t) {
  6. super(t);
  7. }
  8. public RSSException(String error) {
  9. super(error);
  10. }
  11. public RSSException(String error, Throwable t) {
  12. super(error, t);
  13. }
  14. }

DefaultRSSParser.java

[java] view plaincopy
  1. public class DefaultRSSParser implements IRSSParser {
  2. private static final Log logger = LogFactory.getLog(DefaultRSSParser.class);
  3. private String url;
  4. private WebClient browser = new WebClient();
  5. public DefaultRSSParser(String url) {
  6. this.url = url;
  7. }
  8. private Document createDOMDocument() throws RSSException {
  9. try {
  10. WebResponse rssResp = browser.doGet(url);
  11. String encoding = rssResp.getEncoding();
  12. String rssContent = rssResp.getBodyAsString();
  13. DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory
  14. .newInstance();
  15. DocumentBuilder docBuilder = docBuilderFac.newDocumentBuilder();
  16. InputSource is = new InputSource(new ByteArrayInputStream(
  17. rssContent.getBytes(encoding)));
  18. Document doc = docBuilder.parse(is);
  19. return doc;
  20. } catch (Exception e) {
  21. logger.error("CreateDOMDocument Error", e);
  22. throw new RSSException("CreateDOMDocument Error", e);
  23. }
  24. }
  25. private RSSChannel parseForChannel(Document doc) {
  26. RSSChannel rssChannel = new RSSChannel();
  27. NodeList channelNodeList = doc.getElementsByTagName("channel");
  28. Node channel = channelNodeList.item(0);
  29. NodeList childsOfChannel = channel.getChildNodes();
  30. for (int i = 0; i < childsOfChannel.getLength(); i++) {
  31. Node childOfChannel = childsOfChannel.item(i);
  32. if (childOfChannel.getNodeType() != Node.TEXT_NODE) {
  33. String nodeName = childOfChannel.getNodeName();
  34. if (!nodeName.equals("item")) {
  35. String name = childOfChannel.getNodeName();
  36. String value = childOfChannel.getTextContent();
  37. rssChannel.set(name, value);
  38. }
  39. }
  40. }
  41. return rssChannel;
  42. }
  43. private List<RSSItem> parseForItem(Document doc) {
  44. List<RSSItem> rssItems = new ArrayList<RSSItem>();
  45. NodeList itemNodeList = doc.getElementsByTagName("item");
  46. for (int i = 0; i < itemNodeList.getLength(); i++) {
  47. RSSItem rssItem = new RSSItem();
  48. Node item = itemNodeList.item(i);
  49. NodeList childsOfItem = item.getChildNodes();
  50. for (int j = 0; j < childsOfItem.getLength(); j++) {
  51. Node node = childsOfItem.item(j);
  52. if (node.getNodeType() != Node.TEXT_NODE) {
  53. String name = node.getNodeName();
  54. String value = node.getTextContent();
  55. rssItem.set(name, value);
  56. }
  57. }
  58. rssItems.add(rssItem);
  59. }
  60. return rssItems;
  61. }
  62. public RSSChannel parseRSS() throws RSSException {
  63. Document doc = createDOMDocument();
  64. RSSChannel channel = parseForChannel(doc);
  65. List<RSSItem> items = parseForItem(doc);
  66. for (int i = 0; i < items.size(); i++) {
  67. channel.addItems(items.get(i));
  68. }
  69. return channel;
  70. }
  71. }

RSSTest.java

[java] view plaincopy
  1. public class RSSTest {
  2. public static void main(String[] args) {
  3. try {
  4. //String url = "http://blog.sina.com.cn/rss/daodaodog.xml";
  5. String url = "http://rss.sina.com.cn/tech/rollnews.xml";
  6. IRSSParser parser = new DefaultRSSParser(url);
  7. RSSChannel channel = parser.parseRSS();
  8. System.out.println(channel.toString());
  9. } catch (RSSException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. }

利用Java得到RSS源的内容相关推荐

  1. [ Coding七十二绝技 ] 如何利用Java异常快速分析源码

    [ Coding七十二绝技 ] 如何利用Java异常快速分析源码 参考文章: (1)[ Coding七十二绝技 ] 如何利用Java异常快速分析源码 (2)https://www.cnblogs.co ...

  2. JAVA抽象类空指针异常_[ Coding七十二绝技 ] 如何利用Java异常快速分析源码

    前言 异常一个神奇的东西,让广大程序员对它人又爱又恨. 爱它,通过它能快速定位错误,经过层层磨难能学到很多逼坑大法. 恨他,快下班的时刻,周末的早晨,它踏着七彩云毫无征兆的来了. 今天,要聊的是它的一 ...

  3. 利用Java通过阿里云对图片进行内容审核

    怎样用阿里云对图片进行内容审核 背景 随着互联网的发展,每个人都在网络上留下了自己的痕迹,在享受网络带来的便利的同时,去维护干净的网络环境也至关重要:目前在网络上会流动数亿的图片,显然使用纯手工去辨别 ...

  4. java 8 Stream流大全,讲解java 8 stream源码内容

    写这篇文章,主要是记录java8 stream流的用法,博主也是查阅了一些资料,结合源码总结出stream流的主要用法,篇幅比较长,需要耐心看. 目录 filter过滤 map获取属性并return值 ...

  5. excel教程的rss源_在Excel工作表上显示RSS源

    excel教程的rss源 As you've heard, Google Reader will be disappearing in a few months <sigh>, and w ...

  6. 简谈RSS——巧用Feed43制作自定义RSS源

    01 前言 RSS是什么,此处就不再赘述.简单说,是一种"主动"获取信息(比如新闻时事)的方式,还可以用于定时监控指定网站的信息更新(比如有段时间曾用来监控某政府采购网站的采购信息 ...

  7. Lerx开源网站内容管理系统(CMS) v6.5 以Java+MySQL进行开发的内容管理系统源码

    介绍 Lerx 开源网站内容管理系统(CMS)是一个以Java+MySQL进行开发的内容管理系统源码. Lerx 开源网站内容管理系统(CMS)特点: 1.跨平台设计,能无差别运行于Windows.L ...

  8. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  9. mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

最新文章

  1. ASP.NET Core 使用UrlFirewall对请求进行过滤
  2. 用C语言程序实现黎曼和求定积分
  3. ActionScript 3.0
  4. adb命令重置_android – 擦除数据/通过ADB恢复出厂设置
  5. Eclipse用法和技巧十二:快速复制一行
  6. Matlab图形修饰之裁剪处理
  7. thymeleaf完善前端界面 | 从0开始构建SpringCloud微服务(4)
  8. 一篇不错的v4l2 (实用)
  9. SQL往表里添加字段
  10. cf 467 B. Sleepy Game
  11. 经验分享:半小时建立自己的在线管理系统!
  12. 智能窗帘控制(光、红外、时间)
  13. 用户画像标签数据存储之Hive存储
  14. vue2.0移动端 使用vue-pdf插件实现PDF文件流在线预览
  15. Android常见设计模式——观察者模式 (Observer Pattern)
  16. VBS脚本病毒总结与分析
  17. 还有什么苦,是这届年轻人在理财中吃过的?
  18. 学习英语的历史性转折
  19. ei eo eq什么意思_CMMI之功能点估算法:EI、EQ和EO
  20. Linux时间同步:chrony

热门文章

  1. Mac下使用rz和sz命令
  2. ios越狱工具linux版下载,适配iOS11~13.5及全系设备:最新越狱工具发布下载、附教程...
  3. 高端台式计算机配置清单,电脑主机什么配置好,台式电脑最强组装配置清单推荐...
  4. 网站服务器升级中...,网球训练:网球的多球训练
  5. 无麸质麦芽提取物行业调研报告 - 市场现状分析与发展前景预测
  6. 让一句话生成一张二维码图片
  7. uLua,一个Unity+Lua热更新解决方案!
  8. java jsse ssl 调试_使用Java安全Socket扩展包(JSSE)实现SSL
  9. Word文档中文翻译成英文的方法
  10. 越来越火的Serverless(无服务器计算),到底是个啥?