本文目錄一覽:
- 1、如何用Java實現一個基於Web的RSS生成器
- 2、如何使用java代碼獲取RSS中信息
- 3、Rss訂閱 JAVA問題
- 4、在閱讀RSS使用java的問題問題,怎麼解決
- 5、要用javaee實現rss的訂閱,大家推薦點書籍或是資料
如何用Java實現一個基於Web的RSS生成器
RSS 是一個XML的格式 。。。。。。。。按其標準,使用很多方法可以生成,,,,最簡單使用String 就可以 。。。。。。。。。。
如何使用java代碼獲取RSS中信息
以下內容來自互聯網,版權歸原作者,僅供參考:
以下是一個RSS文件的標準結構:
rss version=”2.0″
channel
title…/title
link…/link
description…/description
copyright…/copyright
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,但是還是推薦用工具來簡化操作和減少錯誤,我最喜歡用的工具是: /73066.htm
其實,不僅僅RSS閱讀器可以獲取RSS信息,我們用java API也是可以的。比較有名的是sourceforge的rsslib4j 包,我們這裡就展示這個包的用法:
這個包可以到 去下,對應的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 (charles_wang888@126.com)
*/
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 copyrightInfo = 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(“頻道版權信息: “+copyrightInfo+”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;iitemSize;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=””;
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[ ]]
/link
description
![CDATA[ Latest 20 blogs of charles_wang8888 ]]
/description
copyright
![CDATA[ Copyright(C) 51CTO技術博客-領先的IT技術博客 ]]
/copyright
generator
![CDATA[ 51CTO BLOG by 51CTO Studio ]]
/generator
lastBuildDateThu, 01 Jan 1970 00:00:00 GMT/lastBuildDate
image
url
![CDATA[ ]]
/url
title
![CDATA[ 51CTO BLOG ]]
/title
link
![CDATA[ ]]
/link
description
![CDATA[ 51CTO技術博客-領先的IT技術博客 ]]
/description
/image
item
title
![CDATA[ 跨域訪問的解決方案(非HTML5的方法1:JSONP) ]]
/title
description
![CDATA[
跨域訪問一直是困擾很多開發者的問題之一。因為涉及到安全性問題,所以跨域訪問默認是不可以進行的,否則假設今天我寫了一段js去更改google的圖標,明天他寫了一段代碼去吧google首頁的文字全部變成梵文,那還得..【a href=”” target=”_blank”繼續閱讀全文/a】
]]
/description
link
![CDATA[
]]
/link
author
![CDATA[ charles_wang8888 ]]
/author
category
![CDATA[ Web開發 ]]
/category
pubDateTue, 08 May 2012 04:02:42 GMT/pubDate
/item
…
/channel
/rss
Rss訂閱 JAVA問題
你的機器上沒有安裝java環境JDK,或者是安裝了JDK沒有進行環境變數配置。
Java環境變數:
CLASSPATH .;%java_home%\lib
Path %java_home%\bin;
JAVA_HOME C:\Program Files\Java\jdk1.5.0_05
你可以參考這個鏈接進行配置
在閱讀RSS使用java的問題問題,怎麼解決
可能是XML的編碼原因,百度的關鍵詞訂閱是GB2312 而分類訂閱是UTF-8。
XmlReader reader = new XmlReader(url);
System.out.println(“Rss源的編碼格式為:” + reader.getEncoding());
後來想了想可能頁面信息是UTF-8
轉變思路
先下載頁面,把RSS獲取下來,再去解析,就OK了.
要用javaee實現rss的訂閱,大家推薦點書籍或是資料
工具不重要,人才最重要
rss訂閱只要生成對應格式的xml就可以了
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/152669.html