RSS フィードが公開されていない Web サイトの更新情報を Slack に自動投稿する

RSS フィードって以前ほど話題にのぼらなくなくなりましたよね…

YAGISHITA,Shigeru
本日もご安全に

--

とあることから、Web サイトの更新を日々チェックしなければならない必要に迫られました。

問題は対象の Web サイトがそんなに頻繁に更新されるわけではない、という点です。毎日のように更新されているなら毎日確認する習慣にすればいいわけですが、そんなに頻繁に更新されないとついつい確認しなくなっていくこと請け合いです。

そこで、Web サイトが更新されたら教えてくれるような仕組みを作ることにしました。

Web サイトの更新情報といえば RSS フィード。たしか RSS フィードを与えてやれば更新を投稿してくれる Slack アプリがあったはず。RSS フィードが公開されていればすぐに実現できてしまいそう。

しかし、今回の目的としている Web サイトは大手のニュースサイトというわけでもなく、 RSS フィードの提供がありません。肝心の RSS フィードの提供がなければ Slack の RSS アプリも意味がありません。

そこで、Web サイトから RSS フィードを生成できないものかなと調べ始めました。できたら Web サイトを食わせると RSS フィードが生成されるようなサービスがあったらいいなと。

ありました。

RSS フィード生成サービス「Feed43」

Feed43 というサービスが見つかりました。Webサイトの RSS フィードを作成してくれるサービスです。無料では巡回間隔が6時間ということですが、たまに更新されるサイトの更新を見逃したくない、という今回の目的には不足はありません。

Feed43 の Web サイト

以下のサイトを参考に設定してみましたので、設定手順をここに記録してみました。

Feed43 の設定

実際に更新を確認したかったサイトとは別ですが、ここでは鉄道雑誌の「鉄道ファン」の Web サイト railf.jp の鉄道ニュースページの RSS フィードを生成する設定する過程を記録しておくことにしておきます。このサイトも RSS フィードの提供がないサイトです。

Feed43 というサービスが面白いのはアカウント作らなくても利用できるんですね。とはいっても誰でもフィード生成の設定をいじれてしまうことになるので、パスワードはかけた方がよさそうですが。ここではアカウントを作らないで利用する方法での設定方法を記録してみます。

設定を開始する

Feed43 のページの「Create your first RSS feed」ボタンを押して利用規約同意のページに進みます。

Feed43 のトップページの「Create your first RSS feed」ボタンでスタート

利用規約に同意する

利用規約の「I agree to the Terms of Service」にチェックをつけて「Continue >」ボタンクリックで次に進む

利用規約の表示がされるので、チェックをつけて同意して進みます。

URLの指定

RSS フィードを生成したい Web サイトの URL を指定します。

「Step 1. Specify source page address (URL)」の「Address」で URL を指定

「Step 1. Specify source page address (URL)」のセクションの「Address」に URL を指定します。

  1. 「Address」に URL を指定
  2. 「Reload」ボタンを押す
  3. 「Page Source」にページソースが表示される

という手順になります。

「Address」「Encoding」を指定して「Reload」ボタンで「Page Source」にページソースが表示される

表示されたソースの日本語部分が化けていて日本語のエンコーディングがうまくいっていなかったようなので、「Encoding」に「utf-8」を指定して再度「Reload」を押すと正しく表示されるようになりました。

抽出ルールの指定・Global Search Pattern

「Page Source」の表示の下に「Step 2. Define extraction rules」というセクションがあります。こちらで Page Source から RSS フィードの要素を抽出するための抽出ルールを指定します。

「Page Source」の下方に「Step 2. Define extraction rules」がある

「Global Search Pattern」は Optional の指定で、このあと設定する RSS フィードのアイテムを探し出すマッチングパターンの指定「Item (repeatable) Search Pattern」での設定だけでは Web サイトのRSSフィードにしたい箇所以外のところの要素までマッチされてしまうような場合にRSS フィードにしたい箇所の範囲を指定すればいいようで、通常は無指定でよさそうです。

抽出ルールの指定・Item (repeatable) Search Pattern

RSS フィードのアイテムとなる要素を探し出すマッチングパターンを「Item (repeatable) Search Pattern」に指定します。

今回は鉄道ニュースの以下の「新着記事」の部分を RSS フィードにしたいと思います。

ページ中ほどの「新着記事」を RSS フィード化したい

この箇所のソースが以下の通り。

<li class="other-contents"><article><a href="https://railf.jp/news/2019/10/27/200000.html" title="&quot;芸備線で快速&ldquo;庄原ライナー&rdquo;の運転開始&quot;を表示する"><div class="thumbnail-90"><img alt="芸備線で快速&ldquo;庄原ライナー&rdquo;の運転開始" src="https://cdn3.railf.jp/img/sq100/2019/10/sq191026_47_0606.jpg" /></div><div class="list-box-516"><div class="mini west">JR西日本</div><h3 class="list-title">芸備線で快速&ldquo;庄原ライナー&rdquo;の運転開始</h3><div class="list-caption">2019年10月27日掲載</div></div></a></article></li>

このうち、アイテムにより可変する場所は

  • <a href="…" title="…"> の URL の部分(記事へのURL)と リンクへの文字列。
  • <img alt="…" src="…"/> のイメージへの文字列とイメージの URL。
  • <dev class="mini west"> の mini west の部分(ニュース対象に対応した文字列)
  • <dev class="mini west"> タグで括られた鉄道会社名。
  • <h3 class="list-title"> タグで括られた記事タイトル。
  • <div class="list-caption"> タグで括られた掲載日。

の8か所になります。

そこで、可変箇所を {%}で置き換えた以下を検索パターンとして指定します。

<li class="other-contents"><article><a href="{%}" title="{%}"><div class="thumbnail-90"><img alt="{%}" src="{%}" /></div><div class="list-box-516"><div class="{%}">{%}</div><h3 class="list-title">{%}</h3><div class="list-caption">{%}</div></div></a></article></li>

これを「Item (repeatable) Search Patten」に指定します。

「Extract」ボタンを押すと、マッチングされて抽出された結果がこの下の「Clipped Data」に出力されます。

「Extract」ボタンを押すと「OK (n items found)」と抽出されたアイテム数が表示されるとともに抽出結果が「Clipped Data」に出力される

「OK」と表示が出て、「Clipped Data」に抽出結果(1アイテムあたり8要素)が表示されました。

いい感じに検索・要素が抽出されたので、これでOKとしましょう。

出力フォーマットを指定する

この下に「Step 3. Define output format」セクションがあるので、ここで出力フォーマットを指定します。

「RSS feed properties」には

  • Feed Title
  • Feed Link
  • Feed Description

の項目があります。

「Step 3. Define output format」ある程度埋まっている状態になっている

ある程度埋まっているので、変更したければ変更するということでいいでしょう。

「RSS Item properties」には

  • Item Title Template
  • Item Link Template
  • Item Content Template

の項目があり、出力テンプレートを作ってここで指定する必要があります。

「Preview」ボタンで指定した内容でどのように出力されるのかプレビューされることになります。ここのテンプレートで先ほど抽出された{%n}を指定することができます。

さきほど抽出された要素は以下の通り。これらを指定できます。

  • {%1}…記事へのURL
  • {%2}…記事リンクへの文字列
  • {%3}…イメージへの文字列
  • {%4}…イメージの URL
  • {%5}…<dev class=”mini west”> の mini west の部分(ニュース対象に対応した文字列)
  • {%6}…ニュース対象の鉄道会社名
  • {%7}…記事タイトル
  • {%8}…掲載日

「Item Title Template」にはニュースタイトルとニュース対象の鉄道会社名をセットすることにします。

{%6}:{%7}

「Item Link Template」には記事のURLを指定します。

{%1}

新着記事には記事タイトル以外はないので「Item Content Template」には何も指定しなくてもいいように思うのですが、今回は掲載日を指定することにします。

{%8}

それぞれ指定して「Preview」ボタンを押して生成されるフィードをプレビューします。

「Item Title Template」「Item Link Template」「Item Content Template」を設定して「Preview」ボタン押すと「Feed Preview」にフィードのプレビューが表示される

フィードの URL の取得と保護

各項目の指定と「Preview」を目的の結果になるまで繰り返して、目的の結果が得られたら、この「Feed Preview」の下にすでにフィードの URL が用意されているので、このURLでフィードを使うことができます。
また、設定編集ページの URL も用意されているので、この URL から編集ページに入ることができます。

フィードのプレビューの下方にフィードの URL と設定編集ページの URL が用意されている

ただ、設定編集用ページは推測可能なこともあり、このままだと誰でも編集できてしまいますが、アカウントがあればアカウントに追加できるようです(「Add this feed to my account」)。また、アカウントがなくてもメールアドレスとパスワードで保護することができます(Protect feed from being edited)。

「Optional features」としていくつかのオプション機能があり、「Add this feed to my account」「Protect feed from being edited」も用意されている

Slackへの設定

これで生成された RSS フィードを Slack の RSS アプリに設定してあげることで、Web サイトの更新が Slack へ通知されるようになりました。

Slack の RSS アプリで「フィードの追加」で Feed43 で生成されたフィードの URL と投稿先のチャンネルを指定して「このフィードを購読する」をクリックで設定完了

Web サービス型のフィードリーダー・RSSリーダーが次々サービスを停止して久しく、SNS や動画配信などの広がりにより情報発信おける Web サイトの占める割合は下がってきていますが、公式発表などは Web サイトの更新を確認する必要があるかと思います。ところがフィードリーダー・RSS リーダーの衰退により RSS フィードの提供がない Web サイトも多くなっています。

そんな状況において手軽に RSS フィードを得られる Feed43 サービスは非常に有用なサービスと感じました。設定による結果のプレビューを見て設定をすすめていくようになっているので、欲しい結果の設定がやりやすいようになっているのもよかったです。
課題はこのサービスが持続できるのかどうかですね。

--

--

YAGISHITA,Shigeru
本日もご安全に

一応ファイターズファンであるものの札幌移転でFに関係なくパ観戦。小川皓市の小川皓市的こころ。川名コーチ/北見運送/システム開発者/WPF/Windows Phone/中田ヤスタカにやられてる/954深夜/お笑い/赤い電車。精神年齢15でアラフォー。なにしてんだろ。