`

博客导入及新闻订阅java实现(解析rss)

 
阅读更多

为了实现把自己的其他网站的博客,或新闻导入到现在的站点中来,rss订阅主要解析xml,很简单,但往往用户并不知道自己博客rss地址,所以要根据博客地址抓取网页并解析出rss地址,然后在解析xml并将内容导入进自己的站点,在此不贴图了,直接发代码:
package com.jyeba.core.rss;

import java.util.ArrayList;
import java.util.List;

public class RssBean {

/**
* 频道标题
*/
private String title;
/**
* 频道连接
*/

private String link;
/**
* 频道描述
*/

private String description;
private String date;

private List<RssBean> items = new ArrayList<RssBean>();

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getDescription() {
return description;
}

public void setDescription(String description) {
this.description = description;
}

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public List<RssBean> getItems() {
return items;
}

public void setItems(List<RssBean> items) {
this.items = items;
}

public void setLink(String link) {
this.link = link;
}

public String getLink() {
return link;
}

}



package com.jyeba.core.rss;


/**
 * rss处理类
 * 
 * @author hanfei
 * 
 */
public class Rss {
public static String RSS_DOM_ROOT_TITLE = "//channel/title";

public static String RSS_DOM_ROOT_LINK = "//channel/link";

public static String RSS_DOM_ROOT_DESCRIPTION = "//channel/description";

public static String RSS_DOM_CHILRDEN_ROOT = "//channel/item";

public static String RSS_DOM_CHILRDEN_ROOT_TITLE = "title";

public static String RSS_DOM_CHILRDEN_ROOT_LINK = "link";

public static String RSS_DOM_CHILRDEN_ROOT_PUBDATE = "pubDate";

public static String RSS_DOM_CHILRDEN_ROOT_DESCRIPTION = "description";

public static String DATABASES_PATH = "#rss_databases.mdb";
private Document document;

public Document parse(URL url) throws DocumentException {
SAXReader reader = new SAXReader();
document = reader.read(url);
return document;
}

public void parseUrl(URL url) throws DocumentException {
SAXReader reader = new SAXReader();

document = reader.read(url);
System.out.print("文档全文"
+ document.getDocument().getRootElement().getName());
// return document;
}

public List getXmlInfo(String path, URL url) {
List info = new ArrayList();
try {
Document document = parse(url);
info = document.selectNodes(path);
} catch (DocumentException e) {
e.printStackTrace();
}
return info;
}

public List getXmlInfo(String path) throws DocumentException {
List info = new ArrayList();
// Document document = parse(url);
info = document.selectNodes(path);
return info;
}

public Element getFirstNodeTitle(String path, URL url) {
List list = getXmlInfo(path, url);
Element element = (Element) list.get(0);
return element;
}

public Element getFirstNodeTitle(String path) throws DocumentException {
List list = getXmlInfo(path);
Element element = (Element) list.get(0);
return element;
}

/**
* 通过rss地址获取rss内容
* 
* @param uri
* @return
*/
public RssBean getRssBean(String uri) {

RssBean rss = new RssBean();

// Test xu = new Test();
URL url;
try {
url = new URL(uri);

parseUrl(url);

List listRoot = getXmlInfo("//channel");
for (Iterator iter = listRoot.iterator(); iter.hasNext();) {
Element element = (Element) iter.next();

Node title = element.selectSingleNode(RSS_DOM_ROOT_TITLE);
Node link = element.selectSingleNode(RSS_DOM_ROOT_LINK);
Node description = element
.selectSingleNode(RSS_DOM_ROOT_DESCRIPTION);
System.out.println(description.getText()
+ description.getText());
rss.setTitle(title.getText());
rss.setDescription(description.getText());
rss.setLink(link.getText());

}
System.out.println("----------------------");
/**
* 获取内容项
*/
List list = getXmlInfo(RSS_DOM_CHILRDEN_ROOT);
for (Iterator iter = list.iterator(); iter.hasNext();) {
Element element = (Element) iter.next();
Node title = element
.selectSingleNode(RSS_DOM_CHILRDEN_ROOT_TITLE);
Node link = element
.selectSingleNode(RSS_DOM_CHILRDEN_ROOT_LINK);
Node time = element
.selectSingleNode(RSS_DOM_CHILRDEN_ROOT_PUBDATE);

Node description = element
.selectSingleNode(RSS_DOM_CHILRDEN_ROOT_DESCRIPTION);
/*
* System.out.println("标题: " + title.getText());
* System.out.println("时间: " + time.getText());
* System.out.println("地址: " + link.getText());
* System.out.println("描述  : " + description.getText());
* System.out
* .println("======================================================"
* );
*/
RssBean rs = new RssBean();
rs.setTitle(title.getText());
rs.setDate(time.getText());
rs.setDescription(description.getText());
rs.setLink(link.getText());
rss.getItems().add(rs);

}
return rss;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public RssBean getRSSrsult(String url) throws IOException {

// String url = "http://sun-store.blogbus.com/";
RssUtil r = new RssUtil();
// Test t = new Test();
RssBean rs;

/**
* 判断是否为html,如果是html并查找出rss地址
*/
String result = r.isHtmlOrXml(url);

if ("xml".equals(result)) {

rs = getRssBean(url);
System.out.print(rs.getTitle());

} else if ("eorr".equals(result)) {
rs = null;
System.out.print("不支持rss");
} else {
rs = getRssBean(result);
System.out.print(rs.getTitle());

}
return rs;
}

public static void main(String args[]) throws IOException {

String url = "http://blog.sina.com.cn/s/articlelist_1914306010_1_1.html";
Rss t = new Rss();
RssBean rs;
rs = t.getRSSrsult(url);
System.out.println(rs.getTitle());

}

public void setDocument(Document document) {
this.document = document;
}

public Document getDocument() {
return document;
}
}

package com.jyeba.core.rss;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class RssUtil {
private Document doc;

public String isHtmlOrXml(String url) throws IOException {
doc = Jsoup.connect(url)

.data("query", "Java")

.userAgent("Mozilla")

.cookie("auth", "token")

.timeout(6000)

.get();
// System.out.print(doc.html());
Elements head = doc.select("rss");
if (head.size() < 1) {

Elements rssEl = doc.select("link[type=application/rss+xml]");
if (rssEl.size() < 1) {
System.out.println("该地址不支持rss");
return "eorr";

} else {
System.out.println("this a html   RSS地址:"
+ rssEl.get(0).attr("href"));
return rssEl.get(0).attr("href");
// 如果有多个rss地址 进行遍历
// for(Element e:rssEl){
// System.out.println(e.attr("title")+"----------"+e.attr("href"));
//
// }
}

} else {

return "xml";
}

// return null;
}

public static void main(String[] args) {
RssUtil r = new RssUtil();
try {
r.isHtmlOrXml("http://hi.baidu.com/ybhanxiao/home");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
 

0
0
分享到:
评论

相关推荐

    java使用Rome解析Rss的实例

    在IT行业中,RSS(Really Simple Syndication)是一种广泛用于发布新闻、博客和其他在线内容的格式。它允许用户订阅网站更新,而无需直接访问网站。Java作为一款强大的编程语言,提供了许多库来处理RSS数据,其中之...

    RSS从入门到精通(Java语言初级版)-WORD、实例代码、jar包

    - 解析RSS feed:学会使用Java解析RSS XML,提取所需信息。 - 集成RSS到应用:知道如何在Web应用或其他Java项目中添加RSS阅读和展示功能。 - 使用开源库:理解如何导入和使用rssutils.jar库,以及其提供的API。 - ...

    移动RSS阅读器利用saxparser解析xml

    移动RSS阅读器是一种应用程序,它允许用户订阅并阅读XML格式的RSS(Really Simple Syndication)源,这是一种数据交换格式,广泛应用于博客、文章、新闻、音乐和视频网站,以提供实时更新的内容。RSS通过XML规范将...

    基于Rome做的Rss读和写

    【描述】中的“rss读写功能”指的是开发应用程序时实现的两个关键操作:解析RSS源(读取)和创建或更新RSS源(写入)。这个项目可能提供了一个简单的解决方案,让用户能够方便地处理RSS数据,而无需深入了解RSS的...

    rss阅读器阅读博客文章

    解析RSS feed是RSS阅读器的核心部分,可以使用开源库如FeedParser或创建自定义解析器来实现。 在Android应用中,用户界面设计至关重要。我们可以使用RecyclerView来展示订阅的博客列表,每个条目显示标题、发布日期...

    RSS聚合类库:INFORMA

    RSS是一种XML(eXtensible Markup Language)格式,用于发布和订阅新闻、博客、播客或其他类型的内容。RSS文件通常被称为feed或频道,包含一系列条目,每个条目代表一个单独的新闻文章或内容更新。RSS的优势在于它...

    基于Android平台的RSS阅读器开发与设计实用文档doc.doc

    3. 用户订阅RSS源后,使用Pull解析库解析XML数据,获取新闻标题、链接等信息。 4. 将解析后的数据存储到SQLite数据库,用于离线阅读和快速加载。 5. 实现刷新和加载更多功能,用户可以手动刷新查看新内容,也可以...

    RSS阅读器的webservice服务端

    在Android客户端应用中,RSS阅读器通过调用这样的服务端来获取RSS源中的新闻、博客更新或其他订阅内容。Web服务端通常是基于HTTP协议的,允许不同平台的应用进行数据交互。 【描述解读】 描述提到的是一个针对...

    python基于fetchrss.com的RSS爬虫,可实现深度爬取文章摘要.zip

    RSS是一种XML格式,用于发布新闻、博客和其他定期更新内容的网站。每个RSS源包含一系列条目,每条目通常包括标题、链接、发布日期以及文章摘要。通过订阅RSS源,用户可以在不访问网站的情况下获取新内容的摘要。 ...

    infosearch:在这个项目中,我将使用elasticsearch解析RSS新闻

    在本项目"infosearch"中,开发者旨在利用Elasticsearch这一强大的搜索引擎来处理和解析RSS新闻数据。Elasticsearch是一个基于Lucene的分布式、RESTful风格的搜索和数据分析引擎,能够提供实时、可扩展的数据存储、...

    RSS阅读器-安卓小案例.rar

    RSS是一种用于发布新闻、博客和其他在线内容的标准化格式,允许用户订阅并聚合来自多个来源的信息。这个压缩包包含了实现这样一个阅读器应用的所有源代码和资源文件。 【描述分析】 描述提到“太多无法一一验证是否...

    Java:项目开源源码

    8. **Blog**:这是一个开源的Web博客系统,具有多种特性,如评论、HTML编辑、TrackBack、RSS订阅、XML-RPC接口等,是学习Weblogging功能实现的好例子。 9. **Roller Weblogger**:Roller是一个精心设计的Weblogging...

    jdom+rome JAR包

    在IT行业中,RSS(Really Simple Syndication)是一种广泛使用的数据格式,它允许用户订阅和获取网站更新,如新闻、博客文章或播客等。而"jdom+rome JAR包"是两个Java库,用于帮助开发者更方便地处理XML文档,并...

    rsslibj-1_0RC2.jar EXML.jar

    RSS是一种用于发布和订阅新闻、博客文章、播客等内容的格式,而XML则是一种通用的数据交换格式,广泛应用于网络数据传输和文件存储。 首先,我们来看RSSLibJ-1_0RC2.jar。这是一个专门处理RSS feeds的Java库,由...

    rome-1.0RC1.zip

    "ROME"在本上下文中是一个专门用于处理RSS(Really Simple Syndication)内容的工具,RSS是一种网络内容发布和聚合的标准格式,常用于新闻、博客和其他定期更新内容的订阅。 描述中提到的"是一个网页的提取器,可以...

    jpodfeed:来自本地文件的播客 RSS 提要生成器 (Java)

    【jpodfeed:本地文件播客RSS提要生成器 (Java)】 jpodfeed是一款基于Java的开源工具,专门设计用于从本地文件生成播客(Podcast)的RSS提要。RSS(Really Simple Syndication)是一种标准,允许内容发布者以结构化...

    FeedMonster:FeedMonster。 一个基于PHP的RSS + HTTP聚集器

    1. **源代码**:包括PHP文件,这些文件实现了RSS聚合器的功能,处理HTTP请求、解析RSS源、存储和展示内容。 2. **数据库结构**:可能包含SQL文件,用于创建和初始化数据库表,存储RSS源信息和用户数据。 3. **配置...

    内容ws

    RSS是一种XML格式,用于共享网站内容,如新闻、博客文章等,而iCal则是用于交换日历数据的标准格式。通过集成这两个提要,项目旨在方便用户获取和管理从CMS服务中获取的信息。 【知识点详解】 1. RSS提要:RSS是一...

    rsspect:从 code.google.comprsspect 自动导出

    RSS是一种XML格式,用于发布新闻、博客和其他在线内容的摘要,使用户可以订阅并获取更新。它允许内容创作者提供一种标准化的方式,让读者通过RSS阅读器或聚合器获取内容,无需直接访问网站。 2. **RSSpect的核心...

    inetvod-contmgr:iNetVOD内容管理器

    RSS是一种结构化的XML格式,用于发布和订阅信息,如新闻、博客文章或视频内容。iNetVOD内容管理器可能包含解析和处理RSS feed的功能,以便将内容导入到数据库中,或者根据用户需求动态生成feed。内容可能包括元数据...

Global site tag (gtag.js) - Google Analytics