X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=war%2Fsrc%2Fmain%2Fjava%2Fpnews%2Fservlet%2FArticleProvider.java;h=aae0c871901b1cd1b5431cb094a1688aba30657c;hb=644dd89a5323cb98095c0bd2c209b29679e0033b;hp=11689e5d14605d403beda883afa16e3c469d3e4e;hpb=782edbcad560e9aba5a0ae0c731bfd76491618c8;p=pnews.git diff --git a/war/src/main/java/pnews/servlet/ArticleProvider.java b/war/src/main/java/pnews/servlet/ArticleProvider.java index 11689e5..aae0c87 100644 --- a/war/src/main/java/pnews/servlet/ArticleProvider.java +++ b/war/src/main/java/pnews/servlet/ArticleProvider.java @@ -18,7 +18,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.jsoup.Jsoup; -import org.xml.sax.InputSource; import com.rometools.rome.feed.synd.SyndEnclosure; import com.rometools.rome.feed.synd.SyndEntry; @@ -38,14 +37,17 @@ public class ArticleProvider { private ArticleProvider() { for (Category cat:Category.values()) - scheduler.scheduleAtFixedRate(new Refresher(cat), 2, 120, TimeUnit.SECONDS); + scheduler.scheduleAtFixedRate(new Refresher(cat), 2, 600, TimeUnit.SECONDS); } private static SyndFeed getSyndFeed(String u) throws IllegalArgumentException, FeedException, MalformedURLException, IOException { - InputStream is = new URL(u).openConnection().getInputStream(); - InputSource source = new InputSource(is); - - return new SyndFeedInput().build(source); + InputStream is; + XmlReader r; + + r = new XmlReader(new URL(u)); + XmlReader.setDefaultEncoding("UTF-8"); + + return new SyndFeedInput().build(r); } @@ -57,10 +59,11 @@ public class ArticleProvider { result.put(Category.TOP, new String[] { "http://www.francetvinfo.fr/titres.rss", - "http://www.france24.com/fr/actualites/rss", - //"https://www.franceinter.fr/rss/a-la-une.xml", "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/" }); @@ -73,6 +76,10 @@ public class ArticleProvider { 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", @@ -97,12 +104,19 @@ public class ArticleProvider { private void addArticles(Category cat, SyndFeed feed) { String thumbnail; - String desc, link, title; + String desc, link, title, feedTitle, feedImage; Date date; List
articles; boolean exist; - LOG.info("addArticles" + cat.getId()); + feedTitle = feed.getTitle().trim(); + + if (feed.getImage() != null) + feedImage = feed.getImage().getUrl(); + else + feedImage = null; + + LOG.info("addArticles " + cat.getId() + " " + feedTitle + " number of articles: " + feed.getEntries().size()); for (SyndEntry entry: feed.getEntries()) { thumbnail = null; @@ -111,21 +125,29 @@ public class ArticleProvider { thumbnail = e.getUrl(); break; } - + if (thumbnail == null) + thumbnail = feedImage; + + title = entry.getTitle().trim(); + if (entry.getDescription() != null) { desc = Jsoup.parse(entry.getDescription().getValue()).text(); } else { desc = null; - LOG.severe("No description for " + feed.getTitle() + " - " + entry.getTitle()); + LOG.severe("No description for " + feedTitle + " - " + title); } date = entry.getPublishedDate(); if (date == null) date = entry.getUpdatedDate(); + if (date == null) { + LOG.severe("The article " + feedTitle + " - " + title + " does not have a date"); + continue; + } synchronized(articlesByCategory) { link = entry.getLink().trim(); - title = entry.getTitle().trim(); + articles = articlesByCategory.get(cat); exist = false; if (articles == null) { @@ -134,13 +156,13 @@ public class ArticleProvider { } else { for (Article a: articles) if (a.link.equals(link)) { - LOG.info(link + " already present"); + LOG.fine("addArticles " + link + " is already present"); exist = true; } } if (!exist) { - LOG.info("add " + cat.getId() + " " + feed.getTitle() + " " + title); + LOG.fine("add " + cat.getId() + " " + feedTitle + " " + title); articles.add(new Article(link, cat, title, desc, thumbnail, date, feed.getTitle())); @@ -152,9 +174,13 @@ public class ArticleProvider { } }); + } else { + LOG.finest("addArticles already exist: " + title); } } - } + } + + LOG.info("addArticles done " + cat.getId()); } private void retrieveArticles(Category cat) throws IllegalArgumentException, MalformedURLException, FeedException, IOException { @@ -166,8 +192,10 @@ public class ArticleProvider { for (String str: feeds) try { addArticles(cat, getSyndFeed(str)); - } catch (IOException e) { - LOG.log(Level.SEVERE, "retrieveArticles failure " + cat.getId(), e); + } catch (Throwable e) { + LOG.log(Level.SEVERE, + "retrieveArticles failure " + cat.getId() + " " + str, + e); } else LOG.severe("No feed for category " + cat); @@ -203,6 +231,7 @@ public class ArticleProvider { articles.subList(0, 100)); } + LOG.info("refresher " + category.getId() + " number of articles: " + articles.size()); } } catch (IllegalArgumentException | FeedException | IOException e) { LOG.log(Level.SEVERE, "refresher failure", e);