[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [metrics-web/release] Imports UpdateNews.java
commit 664195d24da6408707aecda856fb7f6f9ff3c494
Author: Iain R. Learmonth <irl@xxxxxxxx>
Date: Tue Mar 20 14:11:49 2018 +0000
Imports UpdateNews.java
This commit imports UpdateNews.java verbatim, as attached to #23854 by
Karsten.
https://trac.torproject.org/projects/tor/attachment/ticket/23854/UpdateNews.java
---
.../org/torproject/metrics/web/UpdateNews.java | 131 +++++++++++++++++++++
1 file changed, 131 insertions(+)
diff --git a/src/main/java/org/torproject/metrics/web/UpdateNews.java b/src/main/java/org/torproject/metrics/web/UpdateNews.java
new file mode 100644
index 0000000..527988f
--- /dev/null
+++ b/src/main/java/org/torproject/metrics/web/UpdateNews.java
@@ -0,0 +1,131 @@
+package org.torproject.metrics.web;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+
+import java.io.BufferedReader;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UpdateNews {
+ private static class News {
+ String start;
+ String end;
+ Boolean ongoing;
+ List<String> places;
+ List<String> protocols;
+ String description;
+ List<String> links;
+ Boolean unknown;
+ }
+
+ /** Update news. */
+ public static void main(String[] args) throws Exception {
+ URL textFile = new URL(
+ "https://trac.torproject.org/projects/tor/wiki/doc/"
+ + "MetricsTimeline?format=txt");
+ Gson gson = new GsonBuilder().disableHtmlEscaping().create();
+ List<News> news = new ArrayList<>();
+ try (BufferedReader br = new BufferedReader(new InputStreamReader(
+ textFile.openStream()))) {
+ String line;
+ Boolean unknown = null;
+ while ((line = br.readLine()) != null) {
+ if (line.startsWith("== Unknown")) {
+ unknown = true;
+ continue;
+ }
+ if (!line.startsWith("||") || line.startsWith("||=start")) {
+ continue;
+ }
+ line = line.trim()
+ .replaceAll("Ã?", "×")
+ .replaceAll("§", "§")
+ .replaceAll("â??", "–")
+ .replaceAll("â??", "“")
+ .replaceAll("â??", "”");
+ String[] parts = line.split("\\|\\|");
+ News entry = new News();
+ entry.start = parts[1].replaceAll("~", "").trim();
+ if (entry.start.contains(" ")) {
+ entry.start = entry.start.substring(0, entry.start.indexOf(" "));
+ } else if (entry.start.isEmpty()) {
+ entry.start = null;
+ }
+ entry.end = parts[2].replaceAll("~", "").trim();
+ if ("ongoing".equalsIgnoreCase(entry.end)) {
+ entry.end = null;
+ entry.ongoing = true;
+ } else if (entry.end.contains(" ")) {
+ entry.end = entry.end.substring(0, entry.end.indexOf(" "));
+ } else if (entry.end.isEmpty()) {
+ entry.end = null;
+ }
+ for (String place : parts[3].trim().split(" +")) {
+ if (!place.isEmpty()) {
+ if (null == entry.places) {
+ entry.places = new ArrayList<>();
+ }
+ entry.places.add(place);
+ }
+ }
+ for (String protocol : parts[4].trim().split(" +")) {
+ if (!protocol.isEmpty()) {
+ if (null == entry.protocols) {
+ entry.protocols = new ArrayList<>();
+ }
+ entry.protocols.add(protocol);
+ }
+ }
+ String desc = parts[5].trim();
+ while (desc.contains("[")) {
+ int open = desc.indexOf("[");
+ int space = desc.indexOf(" ", open);
+ int close = desc.indexOf("]", open);
+ if (open < 0 || space < 0 || close < 0) {
+ System.err.println("Cannot convert link.");
+ System.exit(1);
+ }
+ desc = desc.substring(0, open) + "<a href=\""
+ + desc.substring(open + 1, space) + "\">"
+ + desc.substring(space + 1, close) + "</a>"
+ + desc.substring(close + 1);
+ }
+ while (desc.contains("`")) {
+ int open = desc.indexOf("`");
+ int close = desc.indexOf("`", open + 1);
+ if (open < 0 || close < 0) {
+ System.err.println("Cannot convert code fragment.");
+ System.exit(1);
+ }
+ desc = desc.substring(0, open) + "<code>"
+ + desc.substring(open + 1, close) + "</code>"
+ + desc.substring(close + 1);
+ }
+ entry.description = desc;
+ if (parts.length >= 7) {
+ for (String link : parts[6].split("[\\[\\]]")) {
+ link = link.trim();
+ if (link.isEmpty()) {
+ continue;
+ }
+ if (null == entry.links) {
+ entry.links = new ArrayList<>();
+ }
+ entry.links.add("<a href=\"" + link.substring(0, link.indexOf(" "))
+ + "\">" + link.substring(link.indexOf(" ") + 1) + "</a>");
+ }
+ }
+ entry.unknown = unknown;
+ news.add(entry);
+ }
+ }
+ try (FileWriter fw = new FileWriter(
+ "src/main/resources/web/json/news-raw.json")) {
+ fw.write(gson.toJson(news));
+ }
+ }
+}
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits