Weneedfeed

ウェブページからフィードを生成するweneedfeedというツールをつくった。

使い方

このツールはRubygemとして実装されているので、Rubyがインストールされている環境が必要になる。ツール自体はgem installでインストールできる。

gem install weneedfeed

利用者には、URLとCSSセレクタをweneedfeed.ymlというYAML形式のファイルに書いてもらうことになる。例えばこのウェブサイト、r7kamura.comの新着記事のためのRSSフィードを生成しようとすると、こんな内容になる。

pages:
  id: r7kamuracom
  title: r7kamura.com
  url: https://r7kamura.com/
  item_selector: li
  item_description_selector: p:nth-child(3)
  item_link_selector: a
  item_time_selector: time
  item_title_selector: p:nth-child(2)

weneedfeed build コマンドを利用すると、適当なRSSフィードをXMLファイルとして ./output ディレクトリに出力できる。このファイルをどこかにホスティングして使う訳だが、RSSフィードの中では (ホスト名などの含まれた) 完全な形式のURLを使う必要があるので、このURLの生成に使う情報も引数として与える必要がある。例えば、r7kamura/weneedfeed-r7kamuracomというリポジトリを利用してGitHub Pagesにプロジェクトサイトとしてホスティングしてもらう場合はこういう感じで使う。

weneedfeed build --base-url=https://r7kamura.github.io/weneedfeed-r7kamuracom

YAMLファイル記述時に手元で動作確認するために、weneedfeed server コマンドが用意されている。localhost:8080でHTTPサーバが立ち上がるので、ブラウザから生成物を確認できる。

weneedfeed server

weneedfeed-action

YAMLファイルからweneedfeedで静的ファイルをつくってGitHub Pagesに配置するという定型的な作業を自動化するために、weneedfeed-actionというGitHub Actionが用意されている。これを使うと、リポジトリにYAMLファイルを置くだけでフィードを用意できるようになる。

例えばこういう感じでGitHub Actions用のworkflowを定義して使う。ファイルの生成にr7kamura/weneedfeed-actionを、ファイルのデプロイにpeaceiris/actions-gh-pagesを使っている。

# .github/workflows/publish.yml
name: publish

on:
  push:
    branches:
      - master
  schedule:
    - cron: "15 0 * * *"

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: r7kamura/weneedfeed-action@v3
        with:
          base_url: https://r7kamura.github.io/weneedfeed-r7kamuracom
      - uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: output