利用rome寫rss feed生成程序
前幾天轉一個
rome的介紹過來,現在拿它寫個rss feed生成程序。rome的安裝包中,有三個例程,分別是解析已有的rss feed,轉換rss feed的格式以及內容聚合方面的,這個程序可以做補充。
程序思路:在更新不很頻繁的發布網站上,可以生成一個通過http可訪問的靜態rss feed文件。為了便于調用,做成一個bean,接一個帶有絕對路徑的文件名作參數。
mport java.io.IOException;
import java.net.UnknownHostException;
import java.net.URL;
import java.util.List;
import java.util.Date;
import java.util.ArrayList;
import java.io.BufferedWriter;
import java.io.Writer;
import java.io.FileWriter;
import com.sun.syndication.feed.synd.SyndFeedI;
import com.sun.syndication.feed.synd.SyndContentI;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndContent;
import com.sun.syndication.io.SyndFeedOutput;
import com.sun.syndication.io.SyndFeedInput;
public class RssCreator
{
public RssCreator()
throws TRIPException, UnknownHostException, IOException
{
}
public boolean genRss(String filename)
{
try
{
。。。connect to database and locat the latest 15 records....
String outputType = "rss_1.0";
String outputFile = filename;
Writer outWriter = null;
try{
outWriter=new BufferedWriter(new FileWriter(outputFile));
}catch (Exception e){
//deal exception
}
SyndFeedI feed = new SyndFeed();
feed.setFeedType(outputType);
feed.setTitle(converttoISO(" 你的站點的名稱 "));
feed.setDescription(converttoISO("描述一下站點吧。"));
feed.setAuthor("author name");
feed.setLink("http://www.yoursite.com");
List entries = new ArrayList();
feed.setEntries(entries);
for (int i=0;i<15;i++) {
SyndEntry entry = new SyndEntry();
record = search.record(hits-i);
tfield=record.field("AUTHORS");
sfld = chkValue(tfield.getValue());
entry.setAuthor( sfld );
tfield=record.field("SUBCLASS");
sfld = chkValue(tfield.getValue());
List cats=new ArrayList();
SyndCategory cat=new SyndCategory();
cat.setName(sfld);
cats.add(cat);
entry.setCategories(cats);
//entry.setContents("什么內容呢?");
tfield=record.field("ABS");
sfld = chkValue(tfield.getValue());
SyndContentI desc=new SyndContent();
desc.setValue(sfld);
entry.setDescription(desc);
tfield=record.field("URL");
sfld = chkValue(tfield.getValue());
entry.setLink(sfld);
tfield=record.field("TITLE");
sfld = chkValue(tfield.getValue());
entry.setTitle(sfld) ;
//long ldate=(long)1079511514653;
tfield=record.field("ID");//我數據庫中,ID用的是系統時鐘
sfld = chkValue(tfield.getValue());
Date pdate=null;
pdate=new Date(new Long(sfld).longValue());
entry.setPublishedDate(pdate);
entries.add(entry);
}
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed,outWriter);
outWriter.close();
...close database....
return true;
}
catch(Exception exception)
{
close database
close file
return false
}
return true;
}
private String chkValue(String s){
if (s==null) return "";
return s;
}
public static String converttoGB(String s)
{
try
{
byte abyte0[] = s.getBytes("ISO-8859-1");
return new String(abyte0, "gb2312");
}
catch(Exception exception)
{
return s;
}
}
public static String converttoISO(String s)
{
try
{
byte abyte0[] = s.getBytes("gb2312");
return new String(abyte0, "ISO-8859-1");
}
catch(Exception exception)
{
return s;
}
}
}
可能會遇到一些編碼問題,所以可能要用到轉換函數,寫了幾個放在代碼末尾
posted on 2007-01-14 02:33
OMG 閱讀(597)
評論(1) 編輯 收藏 所屬分類:
Ajax/RSS/Tag