(search) Turn relative feed URLs absolute when dealing with RSS/Atom item URLs

This commit is contained in:
Viktor Lofgren 2025-01-06 16:56:24 +01:00
parent 6a6318d04c
commit b5469bd8a1
2 changed files with 25 additions and 4 deletions

View File

@ -85,8 +85,16 @@ public class SearchFrontPageService {
title = "[Missing Title]"; title = "[Missing Title]";
} }
String url = item.getUrl();
if (url.startsWith("/")) { // relative URL
url = "https://" + feed.getDomain() + url;
} else if (!url.contains(":")) { // no schema, assume relative URL
url = "https://" + feed.getDomain() + "/" + url;
}
itemsAll.add( itemsAll.add(
new NewsItem(title, item.getUrl(), feed.getDomain(), item.getDescription(), item.getDate()) new NewsItem(title, url, feed.getDomain(), item.getDescription(), item.getDate())
); );
} }
} }

View File

@ -381,11 +381,23 @@ public class SearchSiteInfoService {
public record FeedItem(String title, String date, String description, String url) { public record FeedItem(String title, String date, String description, String url) {
public FeedItem(RpcFeedItem rpcFeedItem) { public FeedItem(String domain, RpcFeedItem rpcFeedItem) {
this(rpcFeedItem.getTitle(), this(rpcFeedItem.getTitle(),
rpcFeedItem.getDate(), rpcFeedItem.getDate(),
rpcFeedItem.getDescription(), rpcFeedItem.getDescription(),
rpcFeedItem.getUrl()); absoluteFeedUrl(domain, rpcFeedItem.getUrl())
);
}
private static String absoluteFeedUrl(String domain, String url) {
if (url.startsWith("/")) { // relative URL
url = "https://" + domain + url;
} else if (!url.contains(":")) { // no schema, assume relative URL
url = "https://" + domain + "/" + url;
}
return url;
} }
public String pubDay() { // Extract the date from an ISO style date string public String pubDay() { // Extract the date from an ISO style date string
@ -412,8 +424,9 @@ public class SearchSiteInfoService {
this(rpcFeedItems.getDomain(), this(rpcFeedItems.getDomain(),
rpcFeedItems.getFeedUrl(), rpcFeedItems.getFeedUrl(),
rpcFeedItems.getUpdated(), rpcFeedItems.getUpdated(),
rpcFeedItems.getItemsList().stream().map(FeedItem::new).toList()); rpcFeedItems.getItemsList().stream().map(item -> new FeedItem(rpcFeedItems.getDomain(), item)).toList());
} }
} }
public record ReportDomain( public record ReportDomain(