From 4de6eb9b972d582a23e55b0c73187a1a8242edb5 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Tue, 10 Oct 2017 14:58:32 +0200 Subject: [PATCH] updated --- .gitignore | 3 + pom.xml | 5 ++ src/main/java/pnews/Article.java | 17 ++++++ src/main/java/pnews/Category.java | 19 +++++++ src/main/java/pnews/HTML.java | 55 +++++++++++++----- src/main/java/pnews/Main.java | 116 ++++++++++++++++++++++++++------------ style.css | 48 ++++++++++++++++ 7 files changed, 213 insertions(+), 50 deletions(-) create mode 100644 .gitignore create mode 100644 src/main/java/pnews/Article.java create mode 100644 src/main/java/pnews/Category.java create mode 100644 style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2061c9e --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target +.classpath +.project diff --git a/pom.xml b/pom.xml index ad4f27a..5631d03 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,11 @@ rome 1.8.0 + + org.jsoup + jsoup + 1.10.3 + diff --git a/src/main/java/pnews/Article.java b/src/main/java/pnews/Article.java new file mode 100644 index 0000000..6bfe61b --- /dev/null +++ b/src/main/java/pnews/Article.java @@ -0,0 +1,17 @@ +package pnews; + +public class Article { + public final String title; + public final String description; + public final String thumbnail; + public final String link; + public final Category category; + + public Article(String link, Category category, String title, String description, String thumbnail) { + this.link = link; + this.title = title; + this.description = description; + this.thumbnail = thumbnail; + this.category = category; + } +} diff --git a/src/main/java/pnews/Category.java b/src/main/java/pnews/Category.java new file mode 100644 index 0000000..d1b41de --- /dev/null +++ b/src/main/java/pnews/Category.java @@ -0,0 +1,19 @@ +package pnews; + +public enum Category { + TOP("top"), + FRANCE("france"), + SPORT("sport"), + EUROPE("europe"), + ECO("eco"); + + private final String id; + + private Category(String id) { + this.id = id; + } + + public String getId() { + return id; + } +} diff --git a/src/main/java/pnews/HTML.java b/src/main/java/pnews/HTML.java index b761b88..b919cf1 100644 --- a/src/main/java/pnews/HTML.java +++ b/src/main/java/pnews/HTML.java @@ -2,9 +2,6 @@ package pnews; import java.util.List; -import com.rometools.rome.feed.synd.SyndEntry; -import com.rometools.rome.feed.synd.SyndFeed; - public class HTML { private static void appendA(StringBuffer buf, String child, String href) { buf.append("\n"); + + buf.append("

"); + buf.append(entry.description); + buf.append("

"); + + buf.append("\n"); - appendDiv(buf, entry.getPublishedDate().toString()); - appendDiv(buf, entry.getDescription().getValue()); } - public static void append(StringBuffer buf, SyndFeed feed) { - for (SyndEntry e: feed.getEntries()) { - append(buf, e); + private static void appendMenu(StringBuffer buf) { + buf.append("\n"); } - public static String toHTML(List feeds) { + public static String toHTML(List
articles) { StringBuffer buf; buf = new StringBuffer(); buf.append("\n"); - buf.append("\n"); + buf.append("\n"); buf.append("\n"); buf.append("\n"); + buf.append("\n"); + buf.append("PNews\n"); buf.append("\n"); buf.append("\n"); - for (SyndFeed e: feeds) + appendMenu(buf); + + for (Article e: articles) append(buf, e); buf.append("\n"); diff --git a/src/main/java/pnews/Main.java b/src/main/java/pnews/Main.java index fce2fd1..35962bc 100644 --- a/src/main/java/pnews/Main.java +++ b/src/main/java/pnews/Main.java @@ -3,57 +3,103 @@ package pnews; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.ArrayList; import java.util.List; -import com.rometools.rome.feed.synd.SyndCategory; +import com.rometools.rome.feed.synd.SyndEnclosure; +import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.io.FeedException; import com.rometools.rome.io.SyndFeedInput; import com.rometools.rome.io.XmlReader; +import org.jsoup.*; public class Main { - private static void println(SyndFeed feed) { - System.out.println(feed.getTitle()); - for (SyndCategory cat: feed.getCategories()) { - System.out.println(cat.getName()); - } - System.out.println(feed.getFeedType()); + + private static void addArticles(Category cat, SyndFeed feed, List
articles) { + String thumbnail; + String desc; + + for (SyndEntry entry: feed.getEntries()) { + thumbnail = null; + for (SyndEnclosure e: entry.getEnclosures()) { + if (e.getType().startsWith("image/")) + thumbnail = e.getUrl(); + break; + } + + + + desc = Jsoup.parse(entry.getDescription().getValue()).text(); + + articles.add(new Article(entry.getLink(), + cat, + entry.getTitle(), + desc, + thumbnail)); + } } - public static void main(String[] args) throws IllegalArgumentException, FeedException, IOException { - URL url; - String html; - List feeds; - SyndFeed feed; - String[] urls = new String[] { - "http://www.france24.com/fr/france/rss", - "https://www.lesechos.fr/rss/rss_une_titres.xml" - }; - + private static SyndFeed getSyndFeed(String u) throws IllegalArgumentException, FeedException, MalformedURLException, IOException { + try (XmlReader reader = new XmlReader(new URL(u))) { + return new SyndFeedInput().build(reader); + } + } + + private static List
getArticles(Category cat) throws IllegalArgumentException, MalformedURLException, FeedException, IOException { + List
articles; + + articles = new ArrayList<>(); + + switch (cat) { + case TOP: + addArticles(cat, getSyndFeed("http://www.france24.com/fr/actualites/rss"), articles); + addArticles(cat, getSyndFeed("http://www.bfmtv.com/rss/info/flux-rss/flux-toutes-les-actualites/"), articles); + break; + case SPORT: + addArticles(cat, getSyndFeed("http://www.france24.com/fr/sports/rss"), articles); + break; + case FRANCE: + addArticles(cat, getSyndFeed("http://www.france24.com/fr/france/rss"), articles); + break; + case EUROPE: + addArticles(cat, getSyndFeed("http://www.france24.com/fr/europe/rss"), articles); + break; + case ECO: + addArticles(cat, getSyndFeed("http://www.france24.com/fr/economie/rss"), articles); + break; + default: + throw new IllegalArgumentException(); + } + + return articles; + } + + private static void writeHTMLFile(Category cat) throws IllegalArgumentException, MalformedURLException, FeedException, IOException { + List
articles; + String html; + File f; + + articles = getArticles(cat); + + html = HTML.toHTML(articles); + + f = new File(cat.getId() + ".html"); + + try (BufferedWriter writer = Files.newBufferedWriter(f.toPath(), StandardCharsets.UTF_8)) { + writer.write(html); + } + } + + public static void main(String[] args) throws IllegalArgumentException, FeedException, IOException { System.out.println("pnews"); - feeds = new ArrayList<>(urls.length); - for (String u: urls) { - url = new URL(u); - - try (XmlReader reader = new XmlReader(url)) { - feed = new SyndFeedInput().build(reader); - println(feed); - feeds.add(feed); - }; - } - - - html = HTML.toHTML(feeds); - - try (BufferedWriter writer = Files.newBufferedWriter(new File("pnews.html").toPath(), StandardCharsets.UTF_8)) { - writer.write(html); - } - + for (Category cat: Category.values()) + writeHTMLFile(cat); System.out.println("done"); } diff --git a/style.css b/style.css new file mode 100644 index 0000000..4005623 --- /dev/null +++ b/style.css @@ -0,0 +1,48 @@ +a { + text-decoration: none; + color: black; +} + +body { + margin: 0 0 0 0; + padding: 1em 1em 1em 1em; + background-color: #eee; +} + +section { + margin: 1em 1em 1em 1em; + padding: 0 0 0 0; +} + +img { + margin: 1em 1em 1em 1em; + padding: 0 0 0 0; + height: 8em; +} + +p { + margin: 1em 1em 1em 1em; + padding: 0 0 0 0; +} + +.left { + float: left; +} + +h2 { + clear: left; + margin: 0 0 0 0; + padding: 0 0 0 0; +} + +nav ul { + list-style-type: none; + padding: 0 0 0 0; +} + +nav ul li { + display: inline; + margin: 0em 1em 0 0; + padding: 0 0 0 0; + text-transform: uppercase; +} -- 2.7.4