エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

JavaのRSSライブラリ

きっかけ

デスクトップ用にRSSを作ってみたくなって調べた。
全然作り込めてないけど、まずは、ライブラリを使えることまで確認できたので、とりあえず、まとめる。

個人的には、QuiteRSSで十分な気がしているけど、何かが足りてない。
プルリク送れよって気もするが、なかなか踏み込めない現状がある。

使ったライブラリ

ROME

GitHub - rometools/rome: Java library for RSS and Atom feeds

実際に使う

ライブラリを追加

mavenで下記を追加すれば行けるはず。

<dependency>
    <groupId>com.rometools</groupId>
    <artifactId>rome</artifactId>
    <version>1.7.1</version>
</dependency>

もしかしたら、HTTP client追加しなければ行けないかもしれない。
自分は、SpringBootで試したが、描かなくても動いてたらか、大丈夫なんでしょう。

実装

とりあえず、こんな感じのクラスを作った。

public class RssUtil {

    public static SyndFeed getFeed(String url) throws IllegalArgumentException, MalformedURLException, FeedException, IOException {
        return new SyndFeedInput().build(new XmlReader(new URL(url)));

    }
}

URLから、Feedオブジェクト生成するだけのクラス。

結果

そんでもって、適当にサービスクラスを作って、呼び出してみる。

@RestController
public class HelloWorldController {
    @RequestMapping(name = "/")
    public String helloWorld() {
        try {
            SyndFeed feed = RssUtil.getFeed("https://stackoverflow.com/feeds/tag?tagnames=rome");
            feed.getEntries().stream().map(entry -> entry.getTitle()).forEach(System.out::println);
        } catch (IllegalArgumentException | FeedException | IOException e) {
            e.printStackTrace();
        }

        return "Hello world";
    }
}

すると、以下の結果が。。。。

2018-02-12 21:07:16.398  INFO 6812 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 11 ms
Java ROME RSS library and HTML code in RSS description field
Does RSS push or pull updates?
Need to extend ROME's default RSS feed schema/generator
Using Rome RSS in OSGI/ Adobe AEM
Converting SyndFeed to SyndEntry with Rome
Getting XML String value of SyndEntry with ROME
MalformedByteSequenceException parsing RSS feed with ROME
Parse custom rss tags using Rome API
How to read "gd:image" element from an Atom feed using ROME
Cannot get RSS feed content with Rome
ROME tools Android placement of rome.properties
How to limit number of downloaded (parsed) entries (items) in ROME Fetcher
SyndFeedInput.build() gives error "Configure build path"
Atom:link in RSS using Rome
We can't download the rss lib `Rome` for Java now?
creating Atom feeds with ROME and publishing them
Distinguish between HTML/XHTML and plain text in a RSS description-element
How do I create an Atom representation with Restlet?
writing multiple rssfeeds to single xmlfile
ROME custom user agent/reading Reddit RSS
RSS pubDate parsing with ROME
How to make rss feed into the java webapp on GAE?
Get image from RSS feed
Can not receive Data from RSS Feed in Java Spring
Valid RSS 2.0 Using Rome
How to write an RSS feed with Java?
Parsing a feed with rss version="2"
get image url of rss with rome library
How to use ROME in Intellij?
RSS Rome not working due to JDOM dependency

たしかに、それっぽい結果が返ってきている。

今後

今後は、機械学習できたらいいな~くらいの考えでいる。
アイディアはあるんだけど、やっぱり、実行するって難しい。

スラスラやれればいいのだけれど、手を動かしていると、分かってない箇所がハッキリ問題として目の前にあらわれるので、折れちゃうことが多いんだよね。。。

少しづつ進めるのが長生きするのかもしれない。

参考サイト

JavaでRSSをパースするためにRomeを使ってみた | Apitore blog

JavaFXでRSSを作成・読込・表示(ROMEライブラリ)|軽Lab

Spring Boot 入門 | ホームページ制作のサカエン(墨田区)

久々にSpring Boot使ったから、基本的なことを忘れてた。。。

簡易RSSリーダーを作ってみた 〜 Java編 〜 - Qiita