RSSを取得し加工・出力を行うアプリケーション

2019年7月19日 (金) 10:41時点におけるIppei Suzuki (トーク | 投稿記録)による版 (Ippei Suzuki がページ「RSS関連アプリケーション」を「RSSを取得し加工・出力を行うアプリケーション」に移動しました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

RSSフィードを取得して様々な形に加工して出力するアプリケーション。

ニュース一覧的にリスト表示したり、スライドショー的に表示したり、サムネイル一覧的に表示したり。


具体的に欲しい機能

  • はてなブックマークのRSSフィードを取得して一覧表示する
  • FlickrまたはTumblrのRSSフィードを取得してスライドショー表示する
  • TumblrのRSSフィードを取得してサムネイル一覧として表示する
  • 1日1ニコのRSSフィードを取得して表示する


個人的に需要があるこれらを実現する機能を実装した上で、それを一般化出来るといいかなと。


基本設計

  • LaravelでRSSフィードを取得してJSONで出力(API)
  • Vue.jsでJSONを読み込んで任意の形で出力


実現のために追加で必要な機能

Flickrは既に写真を追加出来なくなっているので、スライドショーの対象から外す。代わりにTumblrを利用することになるのだけど、スライドショーにせよサムネイル一覧にせよ、画像を特定出来る方が良い。media要素(RSS2.0では <enclosure> というらしい)に入っていれば最高なんだけど、普通に配信されているTumblrのRSSフィードには含まれていない。ので、Laravelで加工する際に補うか、RSSフィードを読み込む代わりにTumblr APIで情報を取得してJSONを組み立てる必要がある。


どちらにしてもRSSフィードを読み込む機能は作るわけだから、


  1. Tumblr APIで情報を取得してmedia要素込みのRSSフィードを出力する
  2. RSSフィードを読み込んでJSONに変換して返す
  3. JSONを読み込んで出力する


という順番になる。つまりRSSフィードを作る機能、かつて「DIY RSS」と呼んでいた機能が必要になる。マジか。まあTumblr API関連はあとでumblsにもコピーして使うので、実装しておいて損は無いが。 → と思ったけど、これならもう最初からumblsの実装をしてしまった方が良くない?


まとめ

  • はてなブックマークのRSSフィードを取得して一覧表示する
  • FlickrまたはTumblrのRSSフィードを取得してスライドショー表示する
    • Tumblr APIを叩いてenclosure込みのフィードを書き出す
  • TumblrのRSSフィードを取得してサムネイル一覧として表示する
    • Tumblr APIを叩いてenclosure込みのフィードを書き出す
  • 1日1ニコのRSSフィードを取得して表示する
    • 未定。リスト表示だけなら特になし


実装

LaravelでRSSフィードを取得してJSONで出力(API)

Awjudd\FeedReaderを通してSimplePieを使うことでRSSデータをバージョンを意識せずに取得する。 さらにその中から必要な情報だけを抜き出して配列化し、JSONで返す。

return array(
    'title'         => trim($feed->get_title())
    ,'permalink'    => trim($feed->get_permalink())
    ,'description'  => trim($feed->get_description())
    ,'items'        => array(
        'id'            => trim($item->get_id())
        ,'title'        => trim($item->get_title())
        ,'site_title'   => trim($item->get_feed()->get_title())
        ,'permalink'    => trim($item->get_permalink())
        ,'date'         => trim($item->get_date('Y-m-d H:i:s'))
        ,'content'      => trim($item->get_content(true))
        ,'description'  => trim($item->get_description(true))
        ,'enclosure'    => $item->get_enclosure()
        ,'categories'   => $categories
    )
);

Vue.jsでJSONを読み込んで任意の形で出力

想定される出力形式は以下の通り

  • シンプルなリスト形式
  • 横並びのサムネイル形式
  • スライドショー形式(BootstrapVueのカルーセルを使うと便利そう)

LaravelでTumblr APIを叩いて情報を取得する

インストール

$ composer require tumblr/tumblr
$ composer update