java rss源_利用Java得到RSS源的内容

利用Java得到RSS源的内容

IRSSParser.java

public interface IRSSParser {

RSSChannel parseRSS() throws RSSException;

}

RSSChannel.java   (对应标签)

public class RSSChannel implements Serializable {

private Map kv;

private List items;

public RSSChannel() {

kv = new HashMap();

items = new ArrayList();

}

public List getItems() {

return items;

}

public void addItems(RSSItem item) {

items.add(item);

}

public void set(String key, String value) {

kv.put(key, value);

}

public String get(String key) {

return kv.get(key);

}

public String toString() {

StringBuilder sb = new StringBuilder();

sb.append("[/n");

Set keySet = kv.keySet();

Iterator keyIter = keySet.iterator();

while(keyIter.hasNext()) {

String key = keyIter.next();

String value = kv.get(key);

sb.append(key + "=" + value + "/n");

}

for (int i = 0; i < items.size(); i++) {

RSSItem item = items.get(i);

sb.append(item.toString() + "/n");

}

sb.append("]/n");

return sb.toString();

}

}

RSSItem.java  (对应标签)

public class RSSItem implements Serializable {

private Map kv;

public RSSItem() {

kv = new HashMap();

}

public void set(String key, String value) {

kv.put(key, value);

}

public String get(String key) {

return kv.get(key);

}

public String toString() {

StringBuilder sb = new StringBuilder();

sb.append("[/n");

Set keySet = kv.keySet();

Iterator keyIter = keySet.iterator();

while(keyIter.hasNext()) {

String key = keyIter.next();

String value = kv.get(key);

sb.append(key + "=" + value + "/n");

}

sb.append("]");

return sb.toString();

}

}

RSSException.java

public class RSSException extends Exception {

public RSSException() {

super();

}

public RSSException(Throwable t) {

super(t);

}

public RSSException(String error) {

super(error);

}

public RSSException(String error, Throwable t) {

super(error, t);

}

}

DefaultRSSParser.java

public class DefaultRSSParser implements IRSSParser {

private static final Log logger = LogFactory.getLog(DefaultRSSParser.class);

private String url;

private WebClient browser = new WebClient();

public DefaultRSSParser(String url) {

this.url = url;

}

private Document createDOMDocument() throws RSSException {

try {

WebResponse rssResp = browser.doGet(url);

String encoding = rssResp.getEncoding();

String rssContent = rssResp.getBodyAsString();

DocumentBuilderFactory docBuilderFac = DocumentBuilderFactory

.newInstance();

DocumentBuilder docBuilder = docBuilderFac.newDocumentBuilder();

InputSource is = new InputSource(new ByteArrayInputStream(

rssContent.getBytes(encoding)));

Document doc = docBuilder.parse(is);

return doc;

} catch (Exception e) {

logger.error("CreateDOMDocument Error", e);

throw new RSSException("CreateDOMDocument Error", e);

}

}

private RSSChannel parseForChannel(Document doc) {

RSSChannel rssChannel = new RSSChannel();

NodeList channelNodeList = doc.getElementsByTagName("channel");

Node channel = channelNodeList.item(0);

NodeList childsOfChannel = channel.getChildNodes();

for (int i = 0; i < childsOfChannel.getLength(); i++) {

Node childOfChannel = childsOfChannel.item(i);

if (childOfChannel.getNodeType() != Node.TEXT_NODE) {

String nodeName = childOfChannel.getNodeName();

if (!nodeName.equals("item")) {

String name = childOfChannel.getNodeName();

String value = childOfChannel.getTextContent();

rssChannel.set(name, value);

}

}

}

return rssChannel;

}

private List parseForItem(Document doc) {

List rssItems = new ArrayList();

NodeList itemNodeList = doc.getElementsByTagName("item");

for (int i = 0; i < itemNodeList.getLength(); i++) {

RSSItem rssItem = new RSSItem();

Node item = itemNodeList.item(i);

NodeList childsOfItem = item.getChildNodes();

for (int j = 0; j < childsOfItem.getLength(); j++) {

Node node = childsOfItem.item(j);

if (node.getNodeType() != Node.TEXT_NODE) {

String name = node.getNodeName();

String value = node.getTextContent();

rssItem.set(name, value);

}

}

rssItems.add(rssItem);

}

return rssItems;

}

public RSSChannel parseRSS() throws RSSException {

Document doc = createDOMDocument();

RSSChannel channel = parseForChannel(doc);

List items = parseForItem(doc);

for (int i = 0; i < items.size(); i++) {

channel.addItems(items.get(i));

}

return channel;

}

}

RSSTest.java

public class RSSTest {

public static void main(String[] args) {

try {

//String url = "http://blog.sina.com.cn/rss/daodaodog.xml";

String url = "http://rss.sina.com.cn/tech/rollnews.xml";

IRSSParser parser = new DefaultRSSParser(url);

RSSChannel channel = parser.parseRSS();

System.out.println(channel.toString());

} catch (RSSException e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值