feedTitle = feed.getTitle().trim();
- LOG.info("addArticles " + cat.getName() + " " + feedTitle + " number of articles: " + feed.getEntries().size());
+ LOG.info("addArticles " + cat.getLabel() + " " + feedTitle + " number of articles: " + feed.getEntries().size());
for (SyndEntry entry: feed.getEntries()) {
String link = entry.getLink().trim();
}
}
- LOG.info("addArticles done " + cat.getName());
+ LOG.info("addArticles done " + cat.getLabel());
}
private void retrieveArticles(Category cat) throws IllegalArgumentException, MalformedURLException, FeedException, IOException {
addArticles(cat, getSyndFeed(f.getURL()));
} catch (Throwable e) {
LOG.log(Level.SEVERE,
- "retrieveArticles failure " + cat.getName() + " " + f.toString(),
+ "retrieveArticles failure " + cat.getLabel() + " " + f.toString(),
e);
}
else
@Override
public void run() {
- LOG.info("refresher "+ category.getName());
+ LOG.info("refresher "+ category.getLabel());
try {
retrieveArticles(category);
LOG.log(Level.SEVERE, "refresher failure", e);
}
- LOG.info("refresher "+ category.getName() + " done");
+ LOG.info("refresher "+ category.getLabel() + " done");
}
}
}
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.logging.Logger;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonObject;
+import javax.json.JsonValue;
import pnews.Category;
import pnews.Feed;
public class Config {
private Feed[] feeds;
private Category[] categories;
+ private static final Logger LOG = Logger.getLogger(Config.class.getName());
- public void loadConfig() {
+ private void loadCategories(JsonArray jcats) {
+ List<Category> cats;
+ JsonObject jcat;
+ String id, label, title, language;
+
+ cats = new ArrayList<>(jcats.size());
+
+ for (JsonValue v: jcats) {
+ jcat = (JsonObject)v;
+ id = jcat.getString("id");
+ label = jcat.getString("label");
+ title = jcat.getString("title");
+ language = jcat.getString("language");
+ cats.add(new Category(id, label, title, language));
+ }
+
+ categories = cats.toArray(new Category[0]);
+ }
+
+ private Category getCategory(String id) {
+ for (Category c: categories)
+ if (c.getId().equals(id))
+ return c;
+ return null;
+ }
+
+ public void loadConfig() throws UnsupportedEncodingException {
Reader r;
JsonObject jfeeds, jroot;
List<Feed> feedList;
- Map<String, Category> cats;
r = null;
try {
- r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"));
+ r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
+ "UTF-8");
jroot = Json.createReader(r).readObject();
} finally {
if (r != null)
try { r.close(); } catch (IOException e) { };
}
+
+ loadCategories(jroot.getJsonArray("categories"));
+
jfeeds = jroot.getJsonObject("feeds");
feedList = new ArrayList<Feed>(jfeeds.size());
- cats = new HashMap<>();
jfeeds.forEach((k, v)-> {
JsonObject jf;
jcategories = jf.getJsonArray("categories");
str = jcategories.getString(0);
- cat = cats.get(str);
- if (cat == null) {
- cat = new Category(str);
- cats.put(str, cat);
- }
+ cat = getCategory(str);
- feedList.add(new Feed(k, cat));
+ if (cat != null)
+ feedList.add(new Feed(k, cat));
+ else
+ LOG.severe("Missing category: " + str);
});
feeds = feedList.toArray(new Feed[0]);
- categories = cats.values().toArray(new Category[0]);
}
public Feed[] getFeeds() {
return categories[0];
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws UnsupportedEncodingException {
Config cfg;
Feed[] feeds;
Category[] cats;
{
+ "categories": [
+ {
+ "id": "actualite",
+ "label": "actualité",
+ "title": "Les actualités à la une",
+ "language": "fr"
+ }, {
+ "id": "sport",
+ "label": "sport",
+ "title": "Sport",
+ "language": "fr"
+ }, {
+ "id": "france",
+ "label": "France",
+ "title": "France",
+ "language": "fr"
+ }, {
+ "id": "europe",
+ "label": "Europe",
+ "title": "Europe",
+ "language": "fr"
+ }, {
+ "id": "monde",
+ "label": "Monde",
+ "title": "Monde",
+ "language": "fr"
+ }, {
+ "id": "essonne",
+ "label": "Essonne",
+ "title": "Essonne",
+ "language": "fr"
+ }, {
+ "id": "economie",
+ "label": "Economie",
+ "title": "Economie",
+ "language": "fr"
+ }, {
+ "id": "technologie",
+ "label": "Technologie",
+ "title": "Technologie",
+ "language": "fr"
+ }, {
+ "id": "people",
+ "label": "People",
+ "title": "People",
+ "language": "fr"
+ }
+
+ ],
"feeds": {
- "http://www.europe1.fr/var/export/rss/europe1/actus.xml": { "categories": ["ACTUALITE"] },
- "http://www.francetvinfo.fr/titres.rss": { "categories": ["ACTUALITE"] },
- "http://www.rfi.fr/general/rss": { "categories": ["ACTUALITE"] },
- "http://www.cnews.fr/rss/une": { "categories": ["ACTUALITE"] },
- "http://www.ladepeche.fr/rss/a-la-une.rss": { "categories": ["ACTUALITE"] },
- "https://www.franceinter.fr/rss/a-la-une.xml": { "categories": ["ACTUALITE"] },
- "https://www.francebleu.fr/rss/a-la-une.xml": { "categories": ["ACTUALITE"] },
- "http://www.bfmtv.com/rss/info/flux-rss/flux-toutes-les-actualites/": { "categories": ["ACTUALITE"] },
- "http://www.europe1.fr/var/export/rss/europe1/sport.xml": { "categories": ["SPORT"] },
- "http://www.sportune.fr/feed": { "categories": ["SPORT"] },
- "http://www.france24.com/fr/sports/rss": { "categories": ["SPORT"] },
- "http://www.france24.com/fr/france/rss": { "categories": ["FRANCE"] },
- "http://www.francetvinfo.fr/france.rss": { "categories": ["FRANCE"] },
- "http://www.rfi.fr/france/rss": { "categories": ["FRANCE"] },
- "http://www.france24.com/fr/europe/rss": { "categories": ["EUROPE"] },
- "http://www.europe1.fr/var/export/rss/europe1/international.xml": { "categories": ["MONDE"] },
- "http://www.france24.com/fr/actualites/rss": { "categories": ["MONDE"] },
- "http://www.france24.com/fr/economie/rss": { "categories": ["ECONOMIE"] },
- "http://www.europe1.fr/var/export/rss/europe1/economie.xml": { "categories": ["ECONOMIE"] },
- "http://www.rfi.fr/economie/rss": { "categories": ["ECONOMIE"] },
- "http://www.tourisme-essonne.com/rss/actus/": { "categories": ["ESSONNE"] },
- "http://www.ville-palaiseau.fr/rss/actualites.htm": { "categories": ["ESSONNE"] },
- "http://www.premiere.fr/rss/actu-live": { "categories": ["PEOPLE"] },
- "http://www.purepeople.com/rss/news_t0.xml": { "categories": ["PEOPLE"] },
- "http://www.generation-nt.com/export/rss.xml": { "categories": ["TECHNOLOGIE"] },
- "http://www.europe1.fr/var/export/rss/europe1/sciences.xml": { "categories": ["TECHNOLOGIE"] },
- "http://feeds.feedburner.com/lesnumeriques/news": { "categories": ["TECHNOLOGIE"] },
- "http://www.zdnet.fr/feeds/rss/actualites/": { "categories": ["TECHNOLOGIE"] },
- "http://www.frandroid.com/feed": { "categories": ["TECHNOLOGIE"] },
- "http://www.silicon.fr/feed": { "categories": ["TECHNOLOGIE"] },
- "http://www.fredzone.org/feed": { "categories": ["TECHNOLOGIE"] },
- "http://www.futura-sciences.com/rss/actualites.xml": { "categories": ["TECHNOLOGIE"] },
- "https://www-03.ibm.com/press/fr/fr/rssfeed.wss?keyword=null&maxFeed=&feedType=RSS&topic=all": { "categories": ["TECHNOLOGIE"] }
+ "http://www.europe1.fr/var/export/rss/europe1/actus.xml": { "categories": ["actualite"] },
+ "http://www.francetvinfo.fr/titres.rss": { "categories": ["actualite"] },
+ "http://www.rfi.fr/general/rss": { "categories": ["actualite"] },
+ "http://www.cnews.fr/rss/une": { "categories": ["actualite"] },
+ "http://www.ladepeche.fr/rss/a-la-une.rss": { "categories": ["actualite"] },
+ "https://www.franceinter.fr/rss/a-la-une.xml": { "categories": ["actualite"] },
+ "https://www.francebleu.fr/rss/a-la-une.xml": { "categories": ["actualite"] },
+ "http://www.bfmtv.com/rss/info/flux-rss/flux-toutes-les-actualites/": { "categories": ["actualite"] },
+ "http://www.europe1.fr/var/export/rss/europe1/sport.xml": { "categories": ["sport"] },
+ "http://www.sportune.fr/feed": { "categories": ["sport"] },
+ "http://www.france24.com/fr/sports/rss": { "categories": ["sport"] },
+ "http://www.france24.com/fr/france/rss": { "categories": ["france"] },
+ "http://www.francetvinfo.fr/france.rss": { "categories": ["france"] },
+ "http://www.rfi.fr/france/rss": { "categories": ["france"] },
+ "http://www.france24.com/fr/europe/rss": { "categories": ["europe"] },
+ "http://www.europe1.fr/var/export/rss/europe1/international.xml": { "categories": ["monde"] },
+ "http://www.france24.com/fr/actualites/rss": { "categories": ["monde"] },
+ "http://www.france24.com/fr/economie/rss": { "categories": ["economie"] },
+ "http://www.europe1.fr/var/export/rss/europe1/economie.xml": { "categories": ["economie"] },
+ "http://www.rfi.fr/economie/rss": { "categories": ["economie"] },
+ "http://www.tourisme-essonne.com/rss/actus/": { "categories": ["essonne"] },
+ "http://www.ville-palaiseau.fr/rss/actualites.htm": { "categories": ["essonne"] },
+ "http://www.premiere.fr/rss/actu-live": { "categories": ["people"] },
+ "http://www.purepeople.com/rss/news_t0.xml": { "categories": ["people"] },
+ "http://www.generation-nt.com/export/rss.xml": { "categories": ["technologie"] },
+ "http://www.europe1.fr/var/export/rss/europe1/sciences.xml": { "categories": ["technologie"] },
+ "http://feeds.feedburner.com/lesnumeriques/news": { "categories": ["technologie"] },
+ "http://www.zdnet.fr/feeds/rss/actualites/": { "categories": ["technologie"] },
+ "http://www.frandroid.com/feed": { "categories": ["technologie"] },
+ "http://www.silicon.fr/feed": { "categories": ["technologie"] },
+ "http://www.fredzone.org/feed": { "categories": ["technologie"] },
+ "http://www.futura-sciences.com/rss/actualites.xml": { "categories": ["technologie"] },
+ "https://www-03.ibm.com/press/fr/fr/rssfeed.wss?keyword=null&maxFeed=&feedType=RSS&topic=all": { "categories": ["technologie"] }
}
}