他人が管理しているfacebookページの更新情報をRSSで取得する(RSS-Bridge)

注意:サーバをどこかで借りてる、もしくはScalingoかHerokuで立てれる人向けの記事です

タイトルの通り、この記事では他人が管理しているfacebookページの更新情報をRSSで取得する方法をご紹介します。
そんな難しい設定はありませんが、サーバ周りにあまり知識がない人は「代替案」でご紹介する月額制の有料サービスを使うか、ランサーズあたりで本職の人にやってもらうのがおすすめです。

今回はDiscord(プライベート用のSlack的な奴)で「他者が管理するfacebookページが更新されたら、更新情報をBOTがチャットルームに流す」という処理をしたかったため、facebookフィードの更新情報を拾ってZapierやIFTTT経由でBOTに投稿させるという処理を行いました。

面倒だったのが今回ご紹介するfacebookのフィードの更新情報を外部から取得することでした。
自分が管理しているfacebookページの情報を取得してRSSなどで吐き出すのは簡単なので問題ないのですが、他人や他社が管理しているfacebookページの更新状況をfacebook外で追いたい場合はめちゃくちゃ面倒です
facebookは昔はオフィシャルの機能としてRSSを提供していましたが、もう打ち切っています。RSSリーダーで読まれると広告収入が入らないからですかねえ。
今回はPHPで作られている、オープンソースの「RSS-Bridge」を使ってfacebookページの更新情報をRSSで取得する方法を解説していきます。

代替案

「サーバーとかわからん!無理!」って方のために、先に代替案を紹介しておきます。

FEED.EXILEED.COM

http://feed.exileed.com/
ロシアのサービスです。2017年あたりだと結構このサービスを紹介しているブログが多かったです。しかし、2020年2月の時点だとサービスは死んでいました。
もしかしたら復活するかもしれませんので、試してみてもいいかもしれません。
記事作成時点でサービスが不安定だったのは怖いので、今回は深入りせずパスしました。

FetchRSS(有料)


https://fetchrss.com/
一応生きているサービスです。無料版もありますが、無料だと以下の条件だったので却下しました。

  • 登録できるのは5フィードまで
  • フィードの更新に24時間待たないといけない
  • 7日間使用しなかった時点で、フィードが削除される

ちなみに有料の時点で選択肢から外れたので、facebookからRSSが実際に動くのかの動作確認はしていません
この記事のRSS-Bridgeがどうしてもインストールできない・わからない場合の最終手段としてはありかもしれません。(自己責任でお願いします)

RSS-Bridge


さて、本題に入ります。
RSS-Bridgeは色んなサイトの更新情報をRSSに変換するというオープンソースのプロジェクトです。

facebook以外にもYoutubeからInstagram、Flicker、Twitter、Wikipedia、Duckduckgoまで豊富なラインナップで対応しています。2020年2月の時点で対応しているサービスは295。すごいですね。

インストール後の「Show Inactive bridges」からか、

Github上のBridgeの一覧から確認できます。

ダウンロード・インストール

Githubのリポジトリはこちらです。お好きな方法でデプロイしてください。

デプロイとかよくわからないという方は、githubの右側にある「Clone or download」をクリックしてZIPをダウンロードして

解凍して、PHPの動くサーバにぶっこむだけです。FTPSでぶっこめばOK。DBも不要です。

僕はサーバー立てるのすらめんどくさかったので、xサーバのwordpressが入っているディレクトリにぶっこむという暴挙に出ました。ただしこれだけだとセキュリティ的にアレなので、メインで運用しているwordpressサイトの中などにぶっ込むのはまったくもっておすすめできません
踏み台にされないように気をつけてくださいね。

ScalingoかHerokuでデプロイするのが無難


リポジトリ上のreadme.mdにScalingoとHerokuのワンクリックデプロイのリンクがありますので、よくわかんない方はHeroku当たりにデプロイしましょう。
まあセキュリティ的にもこっちのが良いでしょうね。

Herokuでやる場合は↓を見ればまあなんとかなるでしょう。
https://jp.heroku.com/elements/buttons

使い方

example.com/rss-bridge-master/
PHPの動くサーバーに設置した上で上記のようなurlを叩けば、メイン画面が出てきます。(インストールしたディレクトリによって変わりますが)

今回はfacebookのRSSが取得したいので、「Facebook Bridge | Main Site」を探し出し、show moreをクリック。

facebookページの更新状況を追いたい場合は、「User」に入力していきます。

例えば内閣府のfacebookページを追う場合は、urlは「https://www.facebook.com/caojapan/」なのでUsernameにcaojapanと入力します。

他の入力項目は基本的には何も触らなくても大丈夫です。
Limitを-1のままにしておくと、<entry>を20個取得するので、処理によってはここを5なり1なりに変える必要があるかもしれません。
あとは出力したい形式のボタンを押せば、URLにパラメーターが乗ります。RSSでしたらAtomで出力すればOKです。

セキリティ対策

設置したディレクトリにwhitelist.default.txtというホワイトリストが記載されたテキストファイルがありますので、不要なサービスはこのファイルを編集して切っていきます。
今回はfacebookでのRSS取得なので、facebook以外は削除して保存します。逆に200個以上あるサービスの中から追加したければ、このファイルに追加すればメイン画面に表示されるようになります。

これでメイン画面がfacebookだけになりました。

次に、このままだと他の人からも丸見え状態ですのでhtaccessに自宅・職場と、IFTTTかららしきIPアドレスなど、必要なアクセス元のみを記述した、先程のアプリケーションとは別のサーバのホワイトリストをhtaccessで追加します。
/rss-bridge-master の階層に.htaccessを追加しましょう。

テザリングなどでIPアドレスを変えてみて接続し、エラーが出たら成功です。

僕はIFTTTから読み込ませたかっただけなのでホワイトリストを追加しましたが、このRSSを公開する場合はhtaccessをいじる必要はありません。
また、RSSを本来の目的で使う方でホワイトリストを追加する場合は、RSSリーダーなどの接続元も記載漏れがないようにしておきましょう。

僕の場合はIFTTTのIPアドレスは常時変わるらしい上、ドメインで指定しようと逆引きしてもawsからだということがわかり絶望しかありませんでした。苦肉の策でamazonaws.comもホワイトリスト入りです。何が悲しくてホワイトリストにawsを入れないといけないのでしょう。
ただまあ、RSSを取得したいだけの人には関係ないので安心してください。

どうしてもインストールできないなら

本職だったらすぐできることですので、クラウドソーシングで投げるのも有りだと思います。
インストールで1万円ほどの予算があれば、クラウドワークスかランサーズあたりで投げれば引く手あまたでしょう。
有料サービスであるFetchRSSのプランだと半年ほどで元も取れますしね。

以上でRSS-Bridgeの紹介は終わりです。
頑張ってみてください。