import pnews.Article;
import pnews.Category;
+import pnews.Feed;
public class ArticleProvider {
- public final static ArticleProvider singleton = new ArticleProvider();
private static final Logger LOG = Logger.getLogger(ArticleProvider.class.getName());
private final Map<Category, List<Article>> articlesByCategory = new HashMap<>();
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);
+ private final Config config;
- private ArticleProvider() {
- for (Category cat:Category.values())
+ public ArticleProvider(Config config) {
+ this.config = config;
+ for (Category cat: config.getCategories())
scheduler.scheduleAtFixedRate(new Refresher(cat), 2, 600, TimeUnit.SECONDS);
}
return new SyndFeedInput().build(r);
}
- private static Map<Category, String[]> getFeeds() {
- Map<Category, String[]> result;
-
- result = new HashMap<>();
-
- result.put(Category.TOP,
- new String[] {
- "http://www.francetvinfo.fr/titres.rss",
- "http://www.rfi.fr/general/rss",
- "http://www.cnews.fr/rss/une",
- "http://www.ladepeche.fr/rss/a-la-une.rss",
- "https://www.franceinter.fr/rss/a-la-une.xml",
- "https://www.francebleu.fr/rss/a-la-une.xml",
- "http://www.bfmtv.com/rss/info/flux-rss/flux-toutes-les-actualites/"
- });
-
- result.put(Category.SPORT,
- new String[] { "http://www.france24.com/fr/sports/rss" });
-
- result.put(Category.FRANCE,
- new String[] { "http://www.france24.com/fr/france/rss",
- "http://www.rfi.fr/france/rss"});
-
- result.put(Category.EUROPE,
- new String[] { "http://www.france24.com/fr/europe/rss" });
-
- result.put(Category.MONDE,
- new String[] { "http://www.france24.com/fr/actualites/rss" });
-
-
- result.put(Category.ECO,
- new String[] { "http://www.france24.com/fr/economie/rss",
- "http://www.rfi.fr/economie/rss" });
-
- result.put(Category.ESSONNE,
- new String[] { "http://www.tourisme-essonne.com/rss/actus/",
- "http://www.ville-palaiseau.fr/rss/actualites.htm" });
-
- result.put(Category.PEOPLE,
- new String[] { "http://www.premiere.fr/rss/actu-live",
- "http://www.purepeople.com/rss/news_t0.xml"
- });
-
- result.put(Category.TECHNOLOGIE,
- new String[] { "http://feeds.feedburner.com/lesnumeriques/news",
- "http://www.zdnet.fr/feeds/rss/actualites/",
- "https://www-03.ibm.com/press/fr/fr/rssfeed.wss?keyword=null&maxFeed=&feedType=RSS&topic=all"});
-
- return result;
- }
-
private List<Article> getArticlesForUpdate(Category cat) {
List<Article> result;
feedTitle = feed.getTitle().trim();
- LOG.info("addArticles " + cat.getId() + " " + feedTitle + " number of articles: " + feed.getEntries().size());
+ LOG.info("addArticles " + cat.getName() + " " + feedTitle + " number of articles: " + feed.getEntries().size());
for (SyndEntry entry: feed.getEntries()) {
String link = entry.getLink().trim();
}
}
- LOG.info("addArticles done " + cat.getId());
+ LOG.info("addArticles done " + cat.getName());
}
private void retrieveArticles(Category cat) throws IllegalArgumentException, MalformedURLException, FeedException, IOException {
- String[] feeds;
+ List<Feed> feeds;
- feeds = getFeeds().get(cat);
+ feeds = config.getFeedsByCategory().get(cat);
if (feeds != null)
- for (String str: feeds)
+ for (Feed f: feeds)
try {
- addArticles(cat, getSyndFeed(str));
+ addArticles(cat, getSyndFeed(f.getURL()));
} catch (Throwable e) {
LOG.log(Level.SEVERE,
- "retrieveArticles failure " + cat.getId() + " " + str,
+ "retrieveArticles failure " + cat.getName() + " " + f.toString(),
e);
}
else
@Override
public void run() {
- LOG.info("refresher "+ category.getId());
+ LOG.info("refresher "+ category.getName());
try {
retrieveArticles(category);
LOG.log(Level.SEVERE, "refresher failure", e);
}
- LOG.info("refresher "+ category.getId() + " done");
+ LOG.info("refresher "+ category.getName() + " done");
}
}
}