yuzurss

Feed aggregator microservice based on Spring
git clone https://git.neuralcrash.com/yuzurss.git
Log | Files | Refs | README | LICENSE

commit 0a56ee2a4c2fb534e071addbee2f6352359642f6
parent 3038a39fd348cbc2485b33ebe61632fb5b4df48e
Author: Kebigon <git@kebigon.xyz>
Date:   Sat, 25 Apr 2020 10:01:42 +0900

Use feed information when entry's author is not available
Diffstat:
Msrc/main/java/xyz/kebigon/yuzurss/FeedController.java | 5++++-
Msrc/main/java/xyz/kebigon/yuzurss/json/Item.java | 9++++++++-
Msrc/test/java/xyz/kebigon/yuzurss/json/ItemTests.java | 32+++++++++++++++++---------------
3 files changed, 29 insertions(+), 17 deletions(-)

diff --git a/src/main/java/xyz/kebigon/yuzurss/FeedController.java b/src/main/java/xyz/kebigon/yuzurss/FeedController.java @@ -12,6 +12,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; +import com.rometools.rome.feed.synd.SyndFeed; + import xyz.kebigon.yuzurss.json.Feed; import xyz.kebigon.yuzurss.json.Item; @@ -55,6 +57,7 @@ public class FeedController private Stream<Item> getItems(String url) { - return client.getFeed(url).getEntries().stream().map(entry -> new Item(entry)); + final SyndFeed feed = client.getFeed(url); + return feed.getEntries().stream().map(entry -> new Item(entry, feed)); } } diff --git a/src/main/java/xyz/kebigon/yuzurss/json/Item.java b/src/main/java/xyz/kebigon/yuzurss/json/Item.java @@ -8,6 +8,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; import com.rometools.rome.feed.synd.SyndEntry; +import com.rometools.rome.feed.synd.SyndFeed; import lombok.Data; @@ -31,7 +32,7 @@ public class Item implements Comparable<Item> private Date datePublished; private Author author; - public Item(SyndEntry entry) + public Item(SyndEntry entry, SyndFeed feed) { this.id = entry.getUri(); this.url = entry.getLink(); @@ -41,12 +42,18 @@ public class Item implements Comparable<Item> contentHtml = entry.getContents().get(0).getValue(); if (entry.getDescription() != null) summary = sanitize(entry.getDescription().getValue()); + if (entry.getPublishedDate() != null) this.datePublished = entry.getPublishedDate(); else if (entry.getUpdatedDate() != null) this.datePublished = entry.getUpdatedDate(); + if (!entry.getAuthor().isEmpty()) this.author = new Author(entry.getAuthor()); + else if (feed.getAuthor() != null) + this.author = new Author(feed.getAuthor()); + else if (feed.getTitle() != null) + this.author = new Author(feed.getTitle()); if (contentHtml == null && summary != null) contentHtml = summary; diff --git a/src/test/java/xyz/kebigon/yuzurss/json/ItemTests.java b/src/test/java/xyz/kebigon/yuzurss/json/ItemTests.java @@ -30,7 +30,7 @@ public class ItemTests final Author author = new Author("{\"twitter\"=>\"getbootstrap\"}"); - final Item item0 = new Item(feed.getEntries().get(0)); + final Item item0 = new Item(feed.getEntries().get(0), feed); assertEquals("https://blog.getbootstrap.com/2019/12/14/bootstrap-icons-alpha2", item0.getId()); assertEquals("https://blog.getbootstrap.com/2019/12/14/bootstrap-icons-alpha2/", item0.getUrl()); assertEquals("Bootstrap Icons Alpha 2", item0.getTitle()); @@ -43,7 +43,7 @@ public class ItemTests assertEquals("2019-12-14T00:00:00.000Z", dateFormat.format(item0.getDatePublished())); assertEquals(author, item0.getAuthor()); - final Item item1 = new Item(feed.getEntries().get(1)); + final Item item1 = new Item(feed.getEntries().get(1), feed); assertEquals("https://blog.getbootstrap.com/2019/11/28/bootstrap-4-4-1", item1.getId()); assertEquals("https://blog.getbootstrap.com/2019/11/28/bootstrap-4-4-1/", item1.getUrl()); assertEquals("Bootstrap 4.4.1", item1.getTitle()); @@ -54,7 +54,7 @@ public class ItemTests assertEquals("2019-11-28T00:00:00.000Z", dateFormat.format(item1.getDatePublished())); assertEquals(author, item1.getAuthor()); - final Item item2 = new Item(feed.getEntries().get(2)); + final Item item2 = new Item(feed.getEntries().get(2), feed); assertEquals("https://blog.getbootstrap.com/2019/11/26/bootstrap-4-4-0", item2.getId()); assertEquals("https://blog.getbootstrap.com/2019/11/26/bootstrap-4-4-0/", item2.getUrl()); assertEquals("Bootstrap 4.4.0", item2.getTitle()); @@ -76,7 +76,7 @@ public class ItemTests final Author author = new Author("alexbakker"); - final Item item0 = new Item(feed.getEntries().get(0)); + final Item item0 = new Item(feed.getEntries().get(0), feed); assertEquals("tag:github.com,2008:Repository/65757761/v1.1.4", item0.getId()); assertEquals("https://github.com/beemdevelopment/Aegis/releases/tag/v1.1.4", item0.getUrl()); assertEquals("v1.1.4", item0.getTitle()); @@ -87,7 +87,7 @@ public class ItemTests assertEquals("2020-01-23T09:47:25.000Z", dateFormat.format(item0.getDatePublished())); assertEquals(author, item0.getAuthor()); - final Item item1 = new Item(feed.getEntries().get(1)); + final Item item1 = new Item(feed.getEntries().get(1), feed); assertEquals("tag:github.com,2008:Repository/65757761/v1.1.3", item1.getId()); assertEquals("https://github.com/beemdevelopment/Aegis/releases/tag/v1.1.3", item1.getUrl()); assertEquals("v1.1.3", item1.getTitle()); @@ -98,7 +98,7 @@ public class ItemTests assertEquals("2020-01-20T20:42:14.000Z", dateFormat.format(item1.getDatePublished())); assertEquals(author, item1.getAuthor()); - final Item item2 = new Item(feed.getEntries().get(2)); + final Item item2 = new Item(feed.getEntries().get(2), feed); assertEquals("tag:github.com,2008:Repository/65757761/v1.1.2", item2.getId()); assertEquals("https://github.com/beemdevelopment/Aegis/releases/tag/v1.1.2", item2.getUrl()); assertEquals("v1.1.2", item2.getTitle()); @@ -116,32 +116,34 @@ public class ItemTests final SyndFeedInput input = new SyndFeedInput(); final SyndFeed feed = input.build(new XmlReader(getClass().getResource("/suumo.xml"))); - final Item item0 = new Item(feed.getEntries().get(0)); + final Author author = new Author("SUUMO(スーモ)"); + + final Item item0 = new Item(feed.getEntries().get(0), feed); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93385930&ta=12&sc=12234", item0.getId()); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93385930&ta=12&sc=12234", item0.getUrl()); assertEquals("物件名:自然の中に佇む、南房総の家", item0.getTitle()); assertEquals("千葉県南房総市山田990万円JR内房線岩井623m&sup2;(登記)60.45m&sup2;(登記)1LDK1998年10月", item0.getContentHtml()); assertEquals("千葉県南房総市山田990万円JR内房線岩井623m&sup2;(登記)60.45m&sup2;(登記)1LDK1998年10月", item0.getSummary()); assertEquals(null, item0.getDatePublished()); - assertEquals(null, item0.getAuthor()); + assertEquals(author, item0.getAuthor()); - final Item item1 = new Item(feed.getEntries().get(1)); + final Item item1 = new Item(feed.getEntries().get(1), feed); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93373816&ta=11&sc=11242", item1.getId()); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93373816&ta=11&sc=11242", item1.getUrl()); assertEquals("物件名:大字高萩(武蔵高萩駅) 1180万円", item1.getTitle()); assertEquals("埼玉県日高市大字高萩1180万円JR川越線武蔵高萩徒歩9分110.18m&sup2;(登記)87.58m&sup2;(登記)4LDK1980年2月", item1.getContentHtml()); assertEquals("埼玉県日高市大字高萩1180万円JR川越線武蔵高萩徒歩9分110.18m&sup2;(登記)87.58m&sup2;(登記)4LDK1980年2月", item1.getSummary()); assertEquals(null, item1.getDatePublished()); - assertEquals(null, item1.getAuthor()); + assertEquals(author, item1.getAuthor()); - final Item item2 = new Item(feed.getEntries().get(2)); + final Item item2 = new Item(feed.getEntries().get(2), feed); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93403901&ta=10&sc=10201", item2.getId()); assertEquals("https://suumo.jp/jj/bukken/shosai/JJ010FJ100/?ar=030&bs=021&nc=93403901&ta=10&sc=10201", item2.getUrl()); assertEquals("物件名:前橋市上細井町 中古戸建", item2.getTitle()); assertEquals("群馬県前橋市上細井町1750万円上毛電鉄三俣徒歩38分202.5m&sup2;110.13m&sup2;4LDK2010年9月", item2.getContentHtml()); assertEquals("群馬県前橋市上細井町1750万円上毛電鉄三俣徒歩38分202.5m&sup2;110.13m&sup2;4LDK2010年9月", item2.getSummary()); assertEquals(null, item2.getDatePublished()); - assertEquals(null, item2.getAuthor()); + assertEquals(author, item2.getAuthor()); } @Test @@ -152,7 +154,7 @@ public class ItemTests final Author author = new Author("e-penser"); - final Item item0 = new Item(feed.getEntries().get(0)); + final Item item0 = new Item(feed.getEntries().get(0), feed); assertEquals("yt:video:hJe5MDMWOaU", item0.getId()); assertEquals("https://www.youtube.com/watch?v=hJe5MDMWOaU", item0.getUrl()); assertEquals("Les trous noirs (1/2) - 48 - e-penser", item0.getTitle()); @@ -161,7 +163,7 @@ public class ItemTests assertEquals("2020-01-23T08:09:43.000Z", dateFormat.format(item0.getDatePublished())); assertEquals(author, item0.getAuthor()); - final Item item1 = new Item(feed.getEntries().get(1)); + final Item item1 = new Item(feed.getEntries().get(1), feed); assertEquals("yt:video:Sk7Ia2Lsuak", item1.getId()); assertEquals("https://www.youtube.com/watch?v=Sk7Ia2Lsuak", item1.getUrl()); assertEquals("La migraine est une horreur - 47 - e-penser", item1.getTitle()); @@ -170,7 +172,7 @@ public class ItemTests assertEquals("2020-01-09T15:51:58.000Z", dateFormat.format(item1.getDatePublished())); assertEquals(author, item1.getAuthor()); - final Item item2 = new Item(feed.getEntries().get(2)); + final Item item2 = new Item(feed.getEntries().get(2), feed); assertEquals("yt:video:1Bn50keR6UY", item2.getId()); assertEquals("https://www.youtube.com/watch?v=1Bn50keR6UY", item2.getUrl()); assertEquals("Le mathématicien nul de l'Indiana - Flash 09 - e-penser", item2.getTitle());