利用rome写rss feed生成程序

| No Comments | No TrackBacks

前几天转一个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;
}
}

}

  可能会遇到一些编码问题,所以可能要用到转换函数,写了几个放在代码末尾

by hedong

No TrackBacks

TrackBack URL: http://www.wujianrong.com/mt-tb.cgi/1431

Leave a comment

About this Entry

This page contains a single entry by kevinwu published on November 29, 2006 12:01 PM.

Rome基本介绍 was the previous entry in this blog.

使用WebWork和Rome轻松暴露RSS is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.