太陽がまぶしかったから

C'etait a cause du soleil.

Googleアラートの登録キーワードRSSフィードとSlackの相性が悪いから変換プロキシを作って快適化

Google アラートは便利だけど

 情報収集をするのには Google アラートが便利。仕事や趣味に関係するキーワードをGoogleアラートに登録し、それをRSSフィードに出力することで、最新のニュースを見逃すことなく、リアルタイムで情報を取得することができる。

 しかしながら、GoogleアラートRSSフィードをSlackに表示させようとすると以下のような表示になって視認性が低くなってしまう。

  • Gooogleの転送URLを通るためSlackでカード展開されない
  • ボールドタグが文字列として出力されている
  • 本文が中途半端に出力される

 また同じようなニュースが重複することも多く、それもまたノイズになってしまう。

Google アラートのRSSフィードを変換するプロキシを作成

 この課題に対応するため、以下のシーケンスでGoogleアラートの生成するRSSフィードを変換するサーバレス関数を作成し、生成したRSSのURLをSlackに登録するようにした。

 具体的には下記の変換処理を行っている。

  • エントリの URL を転送先URLに変換し、Slackで URL 展開されるようにする
  • 余計な修飾や情報の削除
  • 重複タイトルのエントリを除去(レーベンシュタイン距離で判定)

 以上のようにGoogleアラートが捕捉したニュースの視認性を上げることができた。

 あとは気になったカードに絵文字リアクションをすればシェアチャンネルに転送されて、ChatGPTが要約を出力してくれるので快適に情報収集できるようになる。

「編集距離」アルゴリズムが面白い

 フィード変換処理自体はパースと生成をライブラリにさせているだけなのでソースコードを読んでもらえばと思うが、工夫したのが重複エントリ除去のためのレーベンシュタイン距離計算である。特にプレスリリースが打たれたりすると同じような内容がPRサイトなどに重複して流れてくるが、実際に知りたいのは最速≒オリジナルのエントリだけだったりもする。

 これを回避するためにサイト名を除去して全く同じタイトルであれば除外するような対応も考えられるが、サイトによって句読点や括弧の付け方などが「編集」されてしまって単純なパターンマッチではうまく除外できない。これを回避するための類似度計算がレーベンシュタイン(編集)距離である。

文字の挿入/削除/置換で一方を他方に変形するための最小手順回数を数えたものが編集距離

 このアルゴリズム自体が動的計画法によって解けるという古典的な計算機科学とサイトによる「編集」を検出する文系的な意味づけが交差するのが個人的には面白い。

ヘッドレスなタイムラインコンテンツとしてのRSS

 RSSフィードを変換するプロキシのURLをSlackに登録する発想は上記のエントリの影響を受けている。当該プロキシはもっと汎用的に作られている一方で、Googleアラート独特の問題とは別なのでスクラッチで作成した。

 その一方で、はてなブックマークRSSなどにも同じような課題があるため、それはそれで作りたいがGoogleアラートプロキシとリポジトリを別に切り出すべきなのか、同一リポジトリの汎用サービスにしてRSSフィードのURLごとにストラテジを切り分けるのかは悩みどころ。とりあえずは、Googleアラート版を運用しておいおい手を広げていきたい。

 何にせよ。RSSオワコン論から遠く離れて、ChatBotや生成AIに対するヘッドレスなタイムラインコンテンツ給餌装置(フィード)としてのRSS有望論がリバイバルしてきているのだけど、今時のサイトはあんまりRSSフィードを提供してくれてなくて、スクレイピングしてRSSフィードを生成したりせざるを得ない感じになってきているのが色々とアレである。