package org.primefaces.examples.service;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.primefaces.examples.domain.NewsEntry;
import org.primefaces.examples.domain.NewsGroup;
import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;
public class YAHOONewsService implements NewsService {
private static final Logger logger = Logger.getLogger(YAHOONewsService.class.getName());
private Map<String,String> feeds;
public YAHOONewsService() {
feeds = new HashMap<String, String>();
feeds.put("Top Stories", "http://rss.news.yahoo.com/rss/topstories");
feeds.put("World", "http://rss.news.yahoo.com/rss/world");
feeds.put("Technology", "http://rss.news.yahoo.com/rss/tech");
feeds.put("Sports", "http://rss.news.yahoo.com/rss/sports");
feeds.put("Entertainment", "http://rss.news.yahoo.com/rss/entertainment");
feeds.put("Business", "http://rss.news.yahoo.com/rss/business");
feeds.put("Politics", "http://rss.news.yahoo.com/rss/politics");
}
public List<NewsGroup> fetchNews() {
List<NewsGroup> news = new ArrayList<NewsGroup>();
try {
for(String key : feeds.keySet()) {
URL feedSource = new URL(feeds.get(key));
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedSource));
List<NewsEntry> entries = new ArrayList<NewsEntry>();
int i = 0;
for(Object f : feed.getEntries()) {
SyndEntry entry = (SyndEntry) f;
String title = entry.getTitle();
title = title.length() <= 25 ? title : title.substring(0, 25);
entries.add(new NewsEntry(i, title + "...", entry.getDescription().getValue()));
i++;
}
news.add(new NewsGroup(key, entries));
}
} catch(Exception exception) {
logger.log(Level.SEVERE, "Error in retrieving news from YAHOO: {0}", exception.getMessage());
}
return news;
}
}