OpenSourceRSS實(shí)現(xiàn)類(lèi)庫(kù).doc_第1頁(yè)
OpenSourceRSS實(shí)現(xiàn)類(lèi)庫(kù).doc_第2頁(yè)
OpenSourceRSS實(shí)現(xiàn)類(lèi)庫(kù).doc_第3頁(yè)
OpenSourceRSS實(shí)現(xiàn)類(lèi)庫(kù).doc_第4頁(yè)
OpenSourceRSS實(shí)現(xiàn)類(lèi)庫(kù).doc_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Java開(kāi)源RSS組件包(Java Open Source RSS Lib Packages)* RSSLibJRSSLibJ是一個(gè)專(zhuān)門(mén)讀取和生成RSS的小巧實(shí)用的Java庫(kù),大小僅25k。* RSSLib4JRSSLib4J 是一套用于從RSS Feed解析和檢索信息的Java API。它支持RSS version0.9x ,1.0和2.0規(guī)范,Doublin內(nèi)核和Syndication名字空間。* BlogBridgeBlogBridge是一個(gè)RSS閱讀器/合成器,專(zhuān)為閱讀和處理大量RSS feed的人而提供。這些典型的有Weblogs, 但也有其它類(lèi)型的RSS feed。* FlockFlock是一種RSS/RDF用Java編寫(xiě)的信息集成器。它是一種server-side應(yīng)用程序,帶有一個(gè)瀏覽器。* RSSOwlRSSOwl 是一個(gè)完全用 Java 的SWT快速圖形庫(kù)開(kāi)發(fā)的 RSS / RDF / Atom 新聞閱讀器。按類(lèi)別讀取新聞,分類(lèi)存儲(chǔ)收藏信息,導(dǎo)出為 PDF / RTF / HTML / OPML,從 OPML格式導(dǎo)入,支持全文本搜索,使用Internet瀏覽器。* InformaInforma提供一個(gè)基于Java的RSS類(lèi)庫(kù).它支持導(dǎo)出,導(dǎo)入,存儲(chǔ),搜索等。* JenaJena 是一個(gè)由HP實(shí)驗(yàn)室開(kāi)發(fā)的表示和處理半結(jié)構(gòu)化數(shù)據(jù)(主要是基于RDF的管理、查詢(xún)等)的Java開(kāi)源項(xiàng)目。目前是Jena2版本,Jena1做到了支持 RDF的數(shù)據(jù)表達(dá)、解析、查詢(xún)(采用RDQL)和簡(jiǎn)單的推理,Jena2的目標(biāo)在支持本體(包括DAML、RDFS和OWL的應(yīng)用程序接口A(yíng)PI)。* RSS ReaderRSS Reader提供了一個(gè)Java API和一個(gè)圖形客戶(hù)端來(lái)分析與顯示RSS格式的內(nèi)容。* SchemaSchema是一個(gè)利用RDF與RDF Schema進(jìn)行存儲(chǔ),查詢(xún),討論(reasoning )的Java開(kāi)源框架.Sesame既可以當(dāng)作RDF與 RDF Schema的數(shù)據(jù)庫(kù)或當(dāng)作一個(gè)Java 庫(kù)用來(lái)為應(yīng)用程序提供RDF的功能.* RSS NotifierRSS Notifier是一個(gè)RSS Feed閱讀器,它設(shè)計(jì)成一個(gè)Window托盤(pán)程序隨Windows的啟動(dòng)一起加載.它用基于使用RSS文件的新聞?dòng)嗛喎绞絹?lái)閱讀即時(shí)新聞.* Sesameinferencing是一個(gè)用于存儲(chǔ),查詢(xún),解析RDF的Java框架.它可被配置作為一個(gè)web服務(wù)器或當(dāng)一個(gè)Java包來(lái)使用.它的特點(diǎn)包括3種查詢(xún)語(yǔ)言(SeRQL, RQL, RDQL),支持內(nèi)存(RAM),磁盤(pán)(disk),與RDBMS存儲(chǔ).* FaceRSSFaceRSS是一個(gè)簡(jiǎn)單的JSF組件,它可以從指定的RSS url讀取新聞并展示出來(lái)。 FaceRSS基于rsslib4j這個(gè)開(kāi)源包進(jìn)行構(gòu)建所以它支持RSS 0.9x,1.0,和2.0。* ROMEROME是一組Atom/RSS工具類(lèi)它使得用Java來(lái)操作大部份syndication格式變得更加容易:# RSS 0.90# RSS 0.91 Netscape# RSS 0.91 Userland# RSS 0.92# RSS 0.93# RSS 0.94# RSS 1.0# RSS 2.0# Atom 0.3# Atom 1.0ROME不僅包括各種syndication feeds的解析器與生成器,而且還包括能夠把一種格式轉(zhuǎn)換成另外一種格式的轉(zhuǎn)換器。* HORRORssHORRORss是一個(gè)簡(jiǎn)單的RSS(RSS0.9x,RSS.0,RSS2.0)解析包。它支持Atom feeds,但并沒(méi)有完全符合Atom規(guī)范。只能支持一些基本的feed元素:title,link,author,和description。上面我們看到了一份 RSS Lib 列表,Java 的類(lèi)庫(kù)就是豐富,而且都是開(kāi)源的。這么多讓我眼花繚亂,用哪個(gè)呢?再轉(zhuǎn)貼一份評(píng)測(cè)吧,這篇評(píng)測(cè)來(lái)自:/blog/index.php/20050915/21.html我的目標(biāo)是做一個(gè)簡(jiǎn)單的portlet,每次讀取新浪的RSS站點(diǎn)顯示最新的新聞條目?;艘粋€(gè)下午,去sourceforge和google 上搜索 opensource 的 java rss lib,還真有不少(順便提一下,sourceforget的搜索真的很爛)。簡(jiǎn)單過(guò)濾以后,覺(jué)得以下三個(gè)類(lèi)庫(kù)比較有搞頭。Rome 、rssutils和rsslib4j。具體的評(píng)測(cè)如下:一. RomeRome 是 上的一個(gè)開(kāi)源項(xiàng)目,現(xiàn)在的版本是0.5。為什么叫Rome呢,按它的介紹上的說(shuō)法,有個(gè)“條條大路通羅馬”的意思,有些RSS的意味。Rome可能是 sun 公司從自己某個(gè)子項(xiàng)目中抽離出來(lái)的,package和類(lèi)的命名就象j2sdk一樣感覺(jué)規(guī)范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS類(lèi)似的一種內(nèi)容聚合的方式)。Rome 本身是提供API和功能實(shí)現(xiàn),其下獨(dú)立出一個(gè) rome-fetcher 項(xiàng)目,專(zhuān)門(mén)用來(lái)讀取RSS內(nèi)容。正和我意啊。參照 fetcher 上的范例,解析 RSS 相當(dāng)簡(jiǎn)單,代碼片斷如下: 代碼 1 FeedFetcher fetcher = new HttpURLFeedFetcher(); 2 SyndFeed feed = fetcher.retrieveFeed(feedUrl); 3 System.out.println(feedUrl + ” has a title: ” + new String(feed.getTitle().getBytes(”iso8859-1), “utf-8) + ” and contains “ + feed.getEntries().size() + ” entries.”); 4 for (Iterator iter = feed.getEntries().iterator(); iter.hasNext(); ) 5 SyndEntry entry = (SyndEntry) iter.next(); 6 System.out.println(” + entry.getTitle() + “” + entry.getPublishedDate() + “”); 7 為什么用 new String(feed.getTitle().getBytes(”iso8859-1), “utf-8) 進(jìn)行轉(zhuǎn)碼,是因?yàn)镽ome來(lái)解析 新浪新聞 RSS的時(shí)候試圖從 URLConnection 的 header 中得到編碼信息,否則總是用 iso8859-1。而新浪的RSS response header 中不包含編碼信息,所以要做一番轉(zhuǎn)碼。另外還有就是 entry.getPubDate() 也將返回null,因?yàn)镽ome 用多種pattern 去試圖解析時(shí)間信息,新浪的時(shí)間格式還是符合RFC822的,但是Rome 使用SimpleDateFormat 來(lái)解析時(shí)間,它忘記了一點(diǎn),就是 SimpleDateFormat的解析是關(guān)聯(lián)于 Locale 的,所以由于我本地locale是China,SimpleDateFormat的parse方法解析不出英文的時(shí)間字符。以上代碼前加 Locale.setDefault(Locale.Englisth) 可以搞定,但總覺(jué)得不爽。如果也不想轉(zhuǎn)碼的話(huà),Rome 還提供了一個(gè) XmlReader 的類(lèi),通過(guò)分析 header 和 xml 內(nèi)容推斷 encoding,修改 HttpURLFeedFetcher 的源碼 : 代碼 8 / 改變 InputStreamReader , 換用 XmlReader 9 /InputStreamReader reader = new InputStreamReader(is, ResponseHandler.getCharacterEncoding(connection); 10 XmlReader reader = new XmlReader(connection); 11 SyndFeedInput input = new SyndFeedInput(); 12 SyndFeed feed = input.build(reader); 那么中文不用轉(zhuǎn)碼也能正確顯示了,不過(guò)修改源碼后我再解析 百度新聞 RSS 的時(shí)候,底層的JDOM卻會(huì)抱錯(cuò)說(shuō)xml 格式不正確。也許Rome的開(kāi)發(fā)者也遇到過(guò)這樣的問(wèn)題,所以才沒(méi)有使用 XmlReader。二. rssutils它是一個(gè)工具包,sun 的 develope站點(diǎn)上有文章 RSS Utilities: A Tutorial 專(zhuān)門(mén)介紹用taglib 顯示RSS內(nèi)容,附帶的可以下載這個(gè)工具包,但我從網(wǎng)上搜索不到它的出處,自然也無(wú)法看到它的源碼。但從反編譯的代碼來(lái)看,也是sun公司內(nèi)部高手所做,設(shè)計(jì)精巧,代碼簡(jiǎn)練。實(shí)現(xiàn)一個(gè)handler,用sax的方式解析xml內(nèi)容,handler內(nèi)部用反射和javabean的機(jī)制構(gòu)造RSS元素對(duì)象并賦值。代碼片斷如下: 代碼 13 RssParser parser = new RssParserImpl(); 14 Rss rss = parser.parse(new URL(url); 15 System.out.println(rss.getChannel().getTitle(); 16 for (Iterator iter = rss.getChannel().getItems().iterator(); iter.hasNext();) 17 Item item = (Item)iter.next(); 18 System.out.println(” + item.getTitle() + ” ” + item.getPubDate(); 19 如上所示,代碼也是相當(dāng)簡(jiǎn)單,沒(méi)有轉(zhuǎn)碼的需求,時(shí)間也正確顯示(因?yàn)楦緵](méi)做分析,當(dāng)字符串直接返回)。但是該工具包并非真正對(duì)外公布,代碼中有些不嚴(yán)謹(jǐn)?shù)牡胤?,如System.out的輸出,很不爽。而且如果 RSS 的 xml內(nèi)容如果缺少部分不常用元素,它也會(huì)printStackTrace一大串,服了它了。另外還有一個(gè)大問(wèn)題,就是當(dāng)我用它解析 百度新聞的時(shí)候,直接就報(bào)錯(cuò):org.xml.sax.SAXParseException: 字符轉(zhuǎn)換錯(cuò)誤:“Unconvertible UTF-8 character beginning with 0xb0”。網(wǎng)上查了查,可能是 java 修改過(guò)的 UTF-8 和標(biāo)準(zhǔn) UTF-8 些微不兼容導(dǎo)致。詳情參看 Java 平臺(tái)中的增補(bǔ)字符 一文。三. rsslib4jrsslib4j 是 sourceforget 上的項(xiàng)目,主頁(yè)是 /projects/rsslib4j,現(xiàn)在最新的版本是0.2,才0.2,可是開(kāi)發(fā)狀態(tài)卻已經(jīng)是穩(wěn)定產(chǎn)品化了。同樣支持所有RSS版本。rsslib4j 解析 RSS 的方式和 rssutils 一樣,我看了看源碼,設(shè)計(jì)比較簡(jiǎn)單,代碼可讀性一般,大量使用if。代碼片斷如下: 代碼 20 RSSHandler hand = new RSSHandler(); 21 RSSParser.parseXmlFile(new URL(url), hand, false); 22 RSSChannel ch = hand.getRSSChannel(); 23 System.out.println(ch.toString(); 24 LinkedList lst = hand.getRSSChannel().getItems(); 25 for (int i = 0; i RSSItem itm = (RSSItem) lst.get(i); 26 System.out.println(itm.toString(); 27 看起來(lái)也是相當(dāng)清晰易懂,執(zhí)行結(jié)果也和rssutils一樣,不過(guò)用它來(lái)解析 百度新聞 卻不會(huì)出現(xiàn) rssutils 的utf-8編碼錯(cuò)誤,真是奇怪,兩者都是調(diào)JAXP的 SAXParser 。不過(guò)它的代碼也有bug,不能解析出 channel 的一些信息,查看源碼,有點(diǎn)簡(jiǎn)單邏輯錯(cuò)誤,修正后解決。想寫(xiě)封email給項(xiàng)目開(kāi)發(fā)者可惜英文不行,通過(guò)cvs去commit一下也嫌麻煩,作罷??偨Y(jié)Rome:優(yōu) - 1)可擴(kuò)展性好,有前途。2)功能強(qiáng)大,除了用來(lái)解析RSS,還可以聚合和構(gòu)造RSS。劣 - 1)兼容性待加強(qiáng),2)綁定jdom。為什么不喜歡 jdom呢,因?yàn)樗黙pi 老變,還很絕,搞得不兼容。rssutils:優(yōu) - 1)代碼設(shè)計(jì)精妙,值得學(xué)習(xí)。2)附帶 taglib 實(shí)現(xiàn),直接可在 jsp 中應(yīng)用。劣 - 1)沒(méi)有源碼。 2)兼容性有待加強(qiáng)。 3)功能較弱,只能用來(lái)解析RSS,沒(méi)有聚合和構(gòu)造RSS功能。rsslib4j:優(yōu) - 1)簡(jiǎn)單有效,體積小。2)兼容性不錯(cuò)。劣 - 1)有小bug。2)功能較弱,只能用來(lái)解析RSS,沒(méi)有聚合和構(gòu)造RSS功能。編輯選擇: rsslib4j我只用來(lái)讀讀新浪新聞,rsslib4j 夠用就好,不過(guò)要自己修改和編譯源碼。另外我還找到了一個(gè)ThinFeeder: ThinFeeder is an open source software that aims to provide a cross-platform, powerful and tiny RSS / Atom (currently RSS 0.9x, RSS 1.0 / RDF, RSS 2.0 and Atom 0.3) aggregator f

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論