用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

RSS阅读器

2017-06-20 作者:赶蚊子举报

[java]代码库

package com.ruanko.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;

import com.ruanko.dao.impl.FileDaoImpl;
import com.ruanko.model.Channel;
import com.ruanko.model.News;
import com.runko.dao.NewsDao;

public class RSSService
{
	private ArrayList<Channel> channelList;
	private List<News> newsList;
	private NewsDao rssDao;
	
	public RSSService()
	{
		rssDao = new FileDaoImpl();
	}
	
	public List<Channel> getChannelList()
	{
		if(channelList == null)
		{
			channelList = new ArrayList<Channel>();
			
			//创建“腾讯新闻”频道
			Channel channel1 = new Channel();
			channel1.setName("新浪国际新闻");
			channel1.setFilePath("NewsFiles/sina.xml");
			channel1.setUrl("http://rss.sina.com.cn/news/world/focus15.xml");
			
			
			//创建“腾讯-国内新闻”频道
			Channel channel2 = new Channel();
			channel2.setName("腾讯国内新闻");
			channel2.setFilePath("NewsFiles/rss_newsgn.xml");
			channel2.setUrl("http://news.qq.com/newsgn/rss_newsgn.xml");
			
			//创建“新浪网-国内要闻”频道
			Channel channel3 = new Channel();
			channel3.setName("新浪体育新闻");
			channel3.setFilePath("NewsFiles/sports.xml");
			channel3.setUrl("http://rss.sina.com.cn/roll/sports/hot_roll.xml");
			
			//创建“新浪网-国际要闻”频道
			Channel channel4 = new Channel();
			channel4.setName("新浪社会新闻");
			channel4.setFilePath("NewsFiles/socials.xml");
			channel4.setUrl("http://rss.sina.com.cn/news/society/focus15.xml");
			
			channelList.add(channel1);
			channelList.add(channel2);
			channelList.add(channel3);
			channelList.add(channel4);
		}
		return channelList;
	}
	
	public List<News> getNewsList(String filePath)
	{
		Document doc = load(filePath);
		newsList = parse(doc);
		return newsList;
	}
	
	private Document load(String filePath)
	{
		Document doc = null;
		SAXBuilder sb = new SAXBuilder(false);
		
		File fXml = new File(filePath);
		if(fXml.exists() && fXml.isFile())
		{
			try
			{
				doc = sb.build(fXml);
			}catch (JDOMException e)
			{
				e.printStackTrace();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
		}
		return doc;
	}
	
	private News itemToNews(Element item)
	{
		News news = new News();
		
		//获得节点内容
		String title = item.getChildText("title").trim();
		String link = item.getChildText("link");
		String author = item.getChildText("author");
		String guid = item.getChildText("guid");
		String pubDate = item.getChildText("pubDate");
		String category = item.getChildText("category");
		String description = item.getChildText("description").trim();
		
		//设置节点内容
		news.setTitle(title);
		news.setLink(link);
		news.setAuthor(author);
		news.setGuid(guid);
		news.setPubDate(pubDate);
		news.setCategory(category);
		news.setDescription(description);
		
		return news;
	}
	
	private List<News> parse(Document doc)
	{
		List<News> newsList = new ArrayList<News>();
		News news = null;
		
		Element root = doc.getRootElement();
		
		//获得item标签
		Element eChannel = root.getChild("channel");
		List<Element> itemList = eChannel.getChildren("item");
		
		//生成news对象列表
		for(int i = 0; i < itemList.size(); i++)
		{
			Element item = itemList.get(i);
			news = itemToNews(item);
			newsList.add(news);
		}
		return newsList;
	}
	
	public String newsToString(News news)
	{
		String content  = "";
		content = "标题:"
				+ news.getTitle() + "\r\n"
				+ "链接:"
				+ news.getLink() + "\r\n"
				+ "作者:"
				+ news.getAuthor() + "\r\n"
				+ "发布时间:"
				+ news.getPubDate() + "\r\n"
				+ "-------------------------------------------------------------\n"
				+ news.getDescription() + "\r\n" + "\r\n" + "\r\n";
		return content;
	}
	
	public boolean save()
	{
		boolean flag = false;
		if(rssDao.save(newsList))
		{
			flag = true;
		}
		return flag;
	}
}


分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。