rssjava
① 怎麼用java做個RSS閱讀器 求代碼
解析XML 希望對你有幫助
public class ParseXML {
//下載一個XML
public void downloadXMLFile(String url,String dir) throws IOException{
//下載的文件夾創建
File ff = new File(dir);
if(!ff.exists()){
ff.mkdir();
}
//爬取指定url下的內容
URL u = new URL(url);
URLConnection uc = u.openConnection();
InputStream is = uc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//d:xml
FileWriter fw = new FileWriter(dir+File.separator+getFileNameByURL(url));
BufferedWriter bw = new BufferedWriter(fw);
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
}
bw.close();
br.close();
is.close();
fw.close();
}
//解析xml
public List<News> parseXML(File file) throws DocumentException{
//創建解析器
SAXReader sr = new SAXReader();
//要解析的文件
Document doc = sr.read(file);
//獲得跟節點
Element e = doc.getRootElement();
System.out.println(e.getName());
List<News> list = new ArrayList<News>();
//從跟節點下查找某節點
List<Element> listTitle = e.selectNodes(Common.title);
List<Element> listLink = e.selectNodes(Common.link);
List<Element> listDesc = e.selectNodes(Common.desc);
List<Element> listPub = e.selectNodes(Common.pubDate);
for(int i=0;i<listTitle.size();i++){
News news = new News();
news.setNTITLE(listTitle.get(i).getText());
news.setNLINK(listLink.get(i).getText());
news.setNDESC(listDesc.get(i).getText());
news.setNPUBDATE(listPub.get(i).getText());
System.out.println(listTitle.get(i).getText());
System.out.println(listLink.get(i).getText());
list.add(news);
}
return list;
}
//獲取文件名
public String getFileNameByURL(String url){
String[] names = url.split("/");
return names[names.length-1];
}
public static void main(String[] args){
ParseXML px = new ParseXML();
try {
px.downloadXMLFile("http://news.163.com/special/00011K6L/rss_newstop.xml", "f://xml");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File f = new File("f://xml//rss_newstop.xml");//XML
try {
List<News> list = px.parseXML(f);
NewsServiceImple nsi = new NewsServiceImple();
nsi.insertNews(list, f.getName());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
② java代碼怎麼實現qq郵箱訂閱開放平台的rss示例 求完整代碼
下載rss的xml文件, 解析成bean 顯示
③ RSS是什麽
RSS(Really Simple Syndication)是一種描述和同步網站內容的格式,是目前使用最廣泛的XML應用。
RSS是一種起源於網景的推技術,將訂戶訂閱的內容傳送給他們的通訊協同格式(Protocol)。RSS可以是以下三個解釋的其中一個:
Really Simple Syndication
RDF (Resource Description Framework) Site Summary
Rich Site Summary
但其實這三個解釋都是指同一種Syndication的技術。 RSS目前廣泛用於網上新聞頻道,blog和wiki,主要的版本有0.91, 1.0, 2.0。
更多有關RSS
今天肯定有人還記得IE 4剛剛推出來的時候有一個有趣的功能,那就是新聞頻道。這個新聞頻道的功能與Netscape推出的新聞頻道是很相似的(當時Netscape還是市場上領先的瀏覽器)。為此Netscape 定義了一套描述新聞頻道的語言,這就是RSS,只不過Netscape自當時起每況愈下,所以最終也沒有發布一個正式的RSS規范(只發布了一個0.9版本)。而微軟也在當時推出了支持自己IE的CDF(Channel Definition Format)數據規格,與RSS非常接近。微軟試圖用新聞頻道的功能把「推」(Push)技術變成一個應用主流,並與Netscape抗衡。不過出乎預測的是,「推」技術自始至終沒有找到合適的商業模型,而且伴隨著其他各類網路特性的出現,也日益無法顯現自身的優勢。新聞頻道在瀏覽器中的地位最終日暮西山,最後也在IE的後續版本中消失了。
新聞頻道的確進入了低谷,但是RSS並沒有被業界人士所拋棄。過去兩年,Blog從一個專業群體開始,逐步成為了網路上最熱門的新話題。而RSS成為了描述Blog主題和更新信息的最基本方法。於是RSS這項技術被著名Blogger/Geek戴夫·溫那(Dave Winner)的公司UserLand所接手,繼續開發新的版本,以適應新的網路應用需要。新的網路應用就是Blog,因為戴夫·溫那的努力,RSS升級到了0.91版,然後達到了0.92版,隨後在各種Blog工具中得到了應用,並被眾多的專業新聞站點所支持。在廣泛的應用過程中,眾多的專業人士認識到需要組織起來,把RSS發展成為一個通用的規范,並進一步標准化。一個聯合小組根據W3C新一代的語義網技術RDF對RSS進行了重新定義,發布了RSS 1.0,並把RSS定義為「RDF Site Summary」。這項工作並沒有與戴夫·溫那進行有效的溝通,而戴夫則堅持在自己設想的方向上進一步開發RSS的後續版本,也並不承認RSS 1.0的有效性。RSS由此開始分化形成了RSS 0.9x/2.0和RSS 1.0兩個陣營,也由此引起了在專業人群中的廣泛爭論。
因為有著爭論的存在,所以一直到今天,RSS 1.0還沒有成為標准化組織的真正標准。而戴夫·溫那卻在2002年9月獨自把RSS升級到了2.0版本,其中的定義完全是全新的模式,並沒有任何RSS 1.0的影子。這引發了網路上進一步爭議,究竟讓一個越來越普及的數據格式成為一個開放的標准,還是被一家公司所定義和控制,成為了爭議的焦點。戴夫·溫那並沒有為自己辯解,他的觀點是RSS還需要進一步發展,需要專業人士更明確的定義,不過恐怕這種輕描淡寫不能消除人們對RSS「被一家商業公司獨占」的擔心。
前面的鋪墊對用戶來說也許沒有什麼太大的意義,可能更多人關心如何在自己的Blog增加RSS輸出,這樣可以讓很多新聞聚合工具(例如CNBlog剛剛推薦的NewzCrawler)很容易找到你並自動獲得你在Blog中的更新內容。
它有什麼用處:讓別人容易的發現你已經更新了你的站點,讓人們很容易的追蹤他們閱讀的所有weblogs。
不久,一家專門從事Blog軟體開發的公司UserLand接手了RSS 0.91版本,並把它作為其Blog軟體的基礎功能之一繼續開發,逐步推出了0.92、0.93和0.94版本。隨著Blog的流行,RSS作為一種基本的功能也被越來越多的網站和Blog軟體支持。
在UserLand公司接手並不斷開發RSS的同時,很多的專業人士認識到需要通過一個第三方、非商業的組織,把RSS發展成為一個通用的規范,並進一步標准化。於是2001年一個聯合小組在0.90版本RSS的開發原則下,以W3C新一代的語義網技術RDF(Resource Description Framework)為基礎,對RSS進行了重新定義,發布RSS1.0,並將RSS定義為「RDF Site Summary」。但是這項工作沒有與UserLand公司進行有效的溝通,UserLand公司也不承認RSS 1.0的有效性,並堅持按照自己的設想進一步開發出RSS的後續版本,到2002年9月發布了最新版本RSS 2.0,UserLand公司將RSS定義為「Really Simple Syndication」。
目前RSS已經分化為RSS 0.9x/2.0和RSS 1.0兩個陣營,由於分歧的存在和RSS 0.9x/2.0的廣泛應用現狀,RSS 1.0還沒有成為標准化組織的真正標准。
RSS可以干什麼
1.訂閱BLOG(你可以訂閱你工作中所需的技術文章;也可以訂閱與你有共同愛好的作者的Blog,總之,你對什麼感興趣你就可以訂什麼)
2.訂閱新聞(無論是奇聞怪事、明星消息、體壇風雲,只要你想知道的,都可以訂閱)
你再也不用一個網站一個網站,一個網頁一個網頁去逛了。只要這將你需要的內容訂閱在一個RSS閱讀器中,這些內容就會自動出現你的閱讀器里,你也不必為了一個急切想知道的消息而不斷的刷新網頁,因為一旦有了更新,RSS閱讀器就會自己通知你!
RSS閱讀器
目前,RSS閱讀器基本可以分為兩類。
第一類大多數閱讀器是運行在計算機桌面上的應用程序,通過所訂閱網站的新聞供應,可自動、定時地更新新聞標題。在該類閱讀器中,有Awasu、FeedDemon和RSSReader這三款流行的閱讀器,都提供免費試用版和付費高級版。國內最近也推出了幾款RSS閱讀器:周博通,看天下,博閱。另外,開源社區也推出了很多優秀的閱讀器,RSSOWl(完全java開發,點擊下載)它不僅是完全支持中文界面,而且還是完全的免費軟體!(後面我們就將以開源軟體周博通和rssowl為例,為大家介紹怎樣來使用RSS閱讀器-周伯通,怎樣使用RSS閱讀器-rssowl))
第二類新聞閱讀器通常是內嵌於已在計算機中運行的應用程序中。例如,NewsGator內嵌在微軟的Outlook中,所訂閱的新聞標題位於Outlook的收件箱文件夾中。另外,Pluck內嵌在Internet Explorer瀏覽器中!
RSS的聯合(Syndication)和聚合(Aggregation)
發布一個RSS文件(RSS Feed)後,這個RSS Feed中包含的信息就能直接被其他站點調用,而且由於這些數據都是標準的XML格式,所以也能在其他的終端和服務中使用,如PDA、手機、郵件列表等。而且一個網站聯盟(比如專門討論旅遊的網站系列)也能通過互相調用彼此的RSS Feed,自動的顯示網站聯盟中其他站點上的最新信息,這就叫著RSS的聯合。這種聯合就導致一個站點的內容更新越及時、RSS Feed被調用的越多,該站點的知名度就會越高,從而形成一種良性循環。
而所謂RSS聚合,就是通過軟體工具的方法從網路上搜集各種RSS Feed並在一個界面中提供給讀者進行閱讀。這些軟體可以是在線的WEB工具,如http://www.xianguo.com,http://my.netscape.com,http://my.userland.com, http://www.xmltree.com,http://www.moreover.com,http://www.oreillynet.com/meerkat, http://www.bbreader.com 等,當然,可以使用我們以上提到的客戶端工具。
④ 如何用Java實現一個基於Web的RSS生成器
RSS 是一個XML的格式 。。。。。。。。按其標准,使用很多方法可以生成,,,,最簡單使用String 就可以 。。。。。。。。。。
⑤ java解析rss如何過濾非法字元
過濾非法字元:
/**
* 替換xml特殊字元,
* 過濾非法字元 HJX
* @param s
* @return
*/
public static String format(String s){
String reg = "[//x00-//x08//x0b-//x0c//x0e-//x1f]";//過濾掉非法字元
if ( s == null )
return "";
else{
s=s.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll("/"",""").replaceAll(reg,"");;
return s;
}
}
⑥ 如何使用java代碼獲取RSS中信息
以下內容來自互聯網,版權歸原作者,僅供參考:
以下是一個RSS文件的標准結構:
<rss version="2.0">
<channel>
<title>...</title>
<link>...</link>
<description>...</description>
<right>...</right>
<generator>...</generator>
<lastBuildDate>...</lastBuildDate>
<image>...</image>
<item>...</item>
<item>...</item>
...
<item>...</item>
<item>...</item>
</channel>
</rss>
其中rss元素是其根元素,它吧所有的內含信息包含在一個頻道<channel>中,頻道有許多meta信息,就是出現 在<item>前面的所有子元素。而rss中的所有摘要,都以<item>元素的形式出現,一個<channel> 可以有多個<item>。每個<item>同樣有元信息,最重要的是描述<description>和鏈 接<link>。
現在有很多工具可以生成RSS,事實上,因為本質上RSS是一個XML文件,所以你完全可以以手工編寫XML 文件的形式編寫RSS,但是還是推薦用工具來簡化操作和減少錯誤,我最喜歡用的工具是:http://www.onlinedown.net/soft /73066.htm
其實,不僅僅RSS閱讀器可以獲取RSS信息,我們用java API也是可以的。比較有名的是sourceforge的rsslib4j 包,我們這里就展示這個包的用法:
這個包可以到http://sourceforge.net/projects/rsslib4j/ 去下,對應的javadoc地址是http://rsslib4j.sourceforge.net/javadoc/
實驗部分:
我們演示2個例子,一個是讀取本地rss文件的信息,一個是讀取網路上某rss文件的信息:
首先我們開發了一個工具類,這個類的工具方法可以分離出相關信息並且轉為字元串形式:
package com.charles.learnrss;
import java.util.List;
import org.gnu.stealthp.rsslib.RSSChannel;
import org.gnu.stealthp.rsslib.RSSHandler;
import org.gnu.stealthp.rsslib.RSSImage;
import org.gnu.stealthp.rsslib.RSSItem;
/*
* This file is confidential by Charles.Wang
* Copyright belongs to Charles.wang
* You can make contact with Charles.Wang ([email protected])
*/
public class RSSInfoRetriever {
public static String getRSSInfo(RSSHandler handler){
StringBuffer rssInfo = new StringBuffer();
//取得rss提要的頻道信息(Channel)
RSSChannel channel = handler.getRSSChannel();
//Part1: 分離出rss頻道的元信息
//(1)頻道的標題
String titleInfo = channel.getTitle();
//(2)頻道的鏈接信息
String linkInfo = channel.getLink();
//(3)頻道的描述信息
String descriptionInfo = channel.getDescription();
//(4)頻道使用的語言
String languageInfo = channel.getLanguage();
//(5)頻道版權信息
String rightInfo = channel.getCopyright();
//(6)頻道的generator的信息
String generatorInfo = channel.getGenerator();
//(7)頻道的image信息
RSSImage channelImage = channel.getRSSImage();
String channelImageUrl = channelImage.getUrl();
rssInfo.append("頻道標題: "+titleInfo+"n");
rssInfo.append("頻道相關Link信息: "+linkInfo+"n");
rssInfo.append("頻道描述信息: "+descriptionInfo+"n");
rssInfo.append("頻道使用的語言: "+languageInfo+"n");
rssInfo.append("頻道版權信息: "+rightInfo+"n");
rssInfo.append("頻道產生器信息: "+generatorInfo+"n");
rssInfo.append("頻道圖片URL: "+channelImageUrl+"n");
//Part2: 分離出rss頻道的所有摘要(feed),這里用item表示
List channelItems = channel.getItems();
int itemSize= channelItems.size();
if(itemSize >=1){
rssInfo.append("n");
rssInfo.append("一共有 "+itemSize+"個摘要在這個頻道中");
rssInfo.append("n");
for (int i=0;i<itemSize;i++){
int itemNo = i+1;
RSSItem item = (RSSItem)channelItems.get(i);
rssInfo.append("n");
rssInfo.append("摘要"+itemNo+":");
//(1)摘要的作者
String itemAuthor = item.getAuthor();
//(2)摘要的標題
String itemTitle = item.getTitle();
//(3)摘要的描述
String itemDescription = item.getDescription();
//(4)摘要的鏈接
String itemLink = item.getLink();
//(5)摘要的發布日期
String itemPubDate = item.getPubDate();
rssInfo.append("作者: "+itemAuthor+"n");
rssInfo.append("標題: "+itemTitle+"n");
rssInfo.append("描述: "+itemDescription+"n");
rssInfo.append("鏈接: "+itemLink+"n");
rssInfo.append("發布日期: "+itemPubDate+"n");
rssInfo.append("n");
}
}
return rssInfo.toString();
}
}
然後我們寫了一個驅動類,這個驅動類封裝了個實驗:
package com.charles.demo;
import java.net.URL;
import org.gnu.stealthp.rsslib.RSSChannel;
import org.gnu.stealthp.rsslib.RSSException;
import org.gnu.stealthp.rsslib.RSSHandler;
import org.gnu.stealthp.rsslib.RSSParser;
import com.charles.learnrss.RSSInfoRetriever;
/**
*
* Description:
*
* @author charles.wang
* @created May 10, 2012 9:07:13 AM
*
*/
public class RSSInfoRetrieverDemo {
// 這里定義一個本地的rss摘要,(對應我的博客空間)
public static final String localRSS = "charles.rss";
//這里定義一個遠程的rss摘要的地址(對應人民網)
public static final String remoteRSS="http://www.people.com.cn/rss/politics.xml";
public static void main(String[] args) throws Exception {
// DEMO 1: 讓RSSParser去解析本地某個rss文件
// 取得本地的rss
RSSHandler localRSSHandler = new RSSHandler();
RSSParser.parseXmlFile(localRSS, localRSSHandler, false);
// 取得rss元素的信息並且列印在控制台上
String localRSSInfo=RSSInfoRetriever.getRSSInfo(localRSSHandler);
System.out.println("*************Charles博客的 rss信息如下****************");
System.out.println(localRSSInfo);
System.out.println("****************************************************");
// DEMO 2: 讓RSSParser去解析遠程rss的url
// 取得遠程的rss
RSSHandler remoteRSSHandler = new RSSHandler();
RSSParser.parseXmlFile(new URL(remoteRSS), remoteRSSHandler, false);
// 取得rss元素的信息並且列印在控制台上
String remoteRSSInfo=RSSInfoRetriever.getRSSInfo(remoteRSSHandler);
System.out.println("****************人民網的 rss信息如下******************");
System.out.println(remoteRSSInfo);
System.out.println("****************************************************");
}
}
實驗:讀取本地的rss文件(charles.rss)
這個文件部分內容為:
雙擊代碼全選
<rss version="2.0">
<channel>
<title>
<![CDATA[ 平行線的凝聚-51CTO技術博客 ]]>
</title>
<link>
<![CDATA[ http://supercharles888.blog.51cto.com ]]>
</link>
<description>
<![CDATA[ Latest 20 blogs of charles_wang8888 ]]>
</description>
<right>
<![CDATA[ Copyright(C) 51CTO技術博客-領先的IT技術博客 ]]>
</right>
<generator>
<![CDATA[ 51CTO BLOG by 51CTO Studio ]]>
</generator>
<lastBuildDate>Thu, 01 Jan 1970 00:00:00 GMT</lastBuildDate>
<image>
<url>
<![CDATA[ http://img1.51cto.com/image/skin/1/rss.gif ]]>
</url>
<title>
<![CDATA[ 51CTO BLOG ]]>
</title>
<link>
<![CDATA[ http://blog.51cto.com ]]>
</link>
<description>
<![CDATA[ 51CTO技術博客-領先的IT技術博客 ]]>
</description>
</image>
<item>
<title>
<![CDATA[ 跨域訪問的解決方案(非HTML5的方法1:JSONP) ]]>
</title>
<description>
<![CDATA[
跨域訪問一直是困擾很多開發者的問題之一。因為涉及到安全性問題,所以跨域訪問默認是不可以進行的,否則假設今天我寫了一段js去更改google的圖標,明天他寫了一段代碼去吧google首頁的文字全部變成梵文,那還得..【<a href="http://supercharles888.blog.51cto.com/609344/856886" target="_blank">繼續閱讀全文</a>】
]]>
</description>
<link>
<![CDATA[
http://supercharles888.blog.51cto.com/609344/856886
]]>
</link>
<author>
<![CDATA[ charles_wang8888 ]]>
</author>
<category>
<![CDATA[ Web開發 ]]>
</category>
<pubDate>Tue, 08 May 2012 04:02:42 GMT</pubDate>
</item>
...
</channel>
</rss>
⑦ 請問在java做的門戶網站里怎麼使用RSS
。。。。分太少了~~~
⑧ java如何產生自己網站的rss
jdom 或者 dom4j