mirror of
https://github.com/MarginaliaSearch/MarginaliaSearch.git
synced 2025-02-23 21:18:58 +00:00
(search-service) RSS feed for the news feed
This commit is contained in:
parent
b83bb5a48a
commit
93f49f1fb3
@ -58,6 +58,7 @@ public class SearchService extends Service {
|
|||||||
Spark.get("/public/search", searchQueryService::pathSearch);
|
Spark.get("/public/search", searchQueryService::pathSearch);
|
||||||
Spark.get("/public/site-search/:site/*", this::siteSearchRedir);
|
Spark.get("/public/site-search/:site/*", this::siteSearchRedir);
|
||||||
Spark.get("/public/", frontPageService::render);
|
Spark.get("/public/", frontPageService::render);
|
||||||
|
Spark.get("/public/news.xml", frontPageService::renderNewsFeed);
|
||||||
Spark.get("/public/:resource", this::serveStatic);
|
Spark.get("/public/:resource", this::serveStatic);
|
||||||
|
|
||||||
Spark.post("/public/site/suggest/", addToCrawlQueueService::suggestCrawling);
|
Spark.post("/public/site/suggest/", addToCrawlQueueService::suggestCrawling);
|
||||||
|
@ -14,6 +14,9 @@ import spark.Response;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -72,6 +75,43 @@ public class SearchFrontPageService {
|
|||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object renderNewsFeed(Request request, Response response) {
|
||||||
|
List<NewsItem> newsItems = getNewsItems();
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
|
sb.append("""
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0">
|
||||||
|
<channel>
|
||||||
|
<title>Marginalia Search News and Mentions</title>
|
||||||
|
<link>https://search.marginalia.nu/</link>
|
||||||
|
<description>News and Mentions of Marginalia Search</description>
|
||||||
|
<language>en-us</language>
|
||||||
|
<ttl>60</ttl>
|
||||||
|
""");
|
||||||
|
|
||||||
|
sb.append("<lastBuildDate>").append(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)).append("</lastBuildDate>\n");
|
||||||
|
sb.append("<pubDate>").append(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)).append("</pubDate>\n");
|
||||||
|
sb.append("<ttl>60</ttl>\n");
|
||||||
|
for (var item : newsItems) {
|
||||||
|
sb.append("<item>\n");
|
||||||
|
sb.append("<title>").append(item.title()).append("</title>\n");
|
||||||
|
sb.append("<link>").append(item.url()).append("</link>\n");
|
||||||
|
if (item.source != null) {
|
||||||
|
sb.append("<author>").append(item.source()).append("</author>\n");
|
||||||
|
}
|
||||||
|
sb.append("<pubDate>").append(item.date().atStartOfDay().atZone(ZoneId.systemDefault()).format(DateTimeFormatter.RFC_1123_DATE_TIME)).append("</pubDate>\n");
|
||||||
|
sb.append("</item>\n");
|
||||||
|
}
|
||||||
|
sb.append("</channel>\n");
|
||||||
|
sb.append("</rss>\n");
|
||||||
|
|
||||||
|
response.type("application/rss+xml");
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private record IndexModel(List<NewsItem> news, int searchPerMinute) { }
|
private record IndexModel(List<NewsItem> news, int searchPerMinute) { }
|
||||||
private record NewsItem(String title, String url, String source, LocalDate date) {}
|
private record NewsItem(String title, String url, String source, LocalDate date) {}
|
||||||
}
|
}
|
||||||
|
@ -10,5 +10,8 @@
|
|||||||
{{/each}}
|
{{/each}}
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="utils">
|
||||||
|
<a href="/news.xml">📡 RSS Feed</a>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
{{/if}}
|
{{/if}}
|
Loading…
Reference in New Issue
Block a user