SNSでの情報収集は誘惑が多くて大変、それRSSでやってみませんか?
ゴール
- X(旧Twitter)の投稿をRSSリーダーで閲覧可能にする(ローカル限定)
使用するアプリはInstagramなど他のSNSにも対応していますが、今回は扱いません。
書いた経緯
私は普段RSSをメインに情報収集しているのですが、必要に応じてXの公式アカウントのポストも確認しています。
ですが、タイトルの通りSNSは誘惑が多く、意志の弱い私は気がつくと一般アカウントの投稿した関係ない漫画を読み漁っています。
ところで、皆さんはRSSを使っているでしょうか。
2013年にはGoogleリーダーがサービスを終了し、何となく過去の産物といったイメージがあるかもしれませんが、情報収集においては現代でも十分便利だと思っています。
私が感じているRSSの利点は主に2つです。
- 事前に登録したサイト以外は情報が入ってこない、広告もない
- 情報収集のサービスを集約できる
というわけで、RSSでXの投稿が見られれば最高という話になります。
環境構築
以下の順で進めます。
- Dockerインストール
- RSSHubの構築
- FreshRSSの構築
Dockerインストール
インストール済みの方は読み飛ばしてください。
各OSに合わせて公式サイトに記載の手順を実施します。
私の場合はUbuntuなので、以下のような感じでした。
インストール
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
起動確認
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
dockerグループにユーザーを追加
sudo usermod -aG docker $USER
newgrp docker
RSSHubの構築
RSSHubはRSSフィードを生成するためのアプリです。
インストール手順はこちらの記事を参考にさせていただきました。
また、DBはPostgreSQLを使っていますがお好きなDBでOKです。
docker-compose.ymlを作成します。
ホスト側のポートは何番でもいいので今回は1200を使用しました。
version: '3.9'
services:
rsshub:
image: diygod/rsshub:chromium-bundled
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
depends_on:
- redis
- browserless
browserless:
image: browserless/chrome
restart: always
redis:
image: redis:alpine
restart: always
volumes:
- /var/www/rsshub/data:/data
RSSHubの起動
docker compose up -d
ブラウザで「http:localhost:1200」へアクセスします。
以下の画面が出ればOKです。
FreshRSSの構築
FreshRSSはRSSリーダーです。
ポートは1201を使用します。
version: "3.8"
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
depends_on:
- postgres
restart: unless-stopped
ports:
- "1201:80"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- /var/www/freshrss/data:/var/www/FreshRSS/data
- /var/www/freshrss/extensions:/var/www/FreshRSS/extensions
postgres:
image: postgres:latest
container_name: fresh_rss_db
hostname: freshrss-db
ports:
- "5432:5432"
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
volumes:
- db_vol:/var/lib/postgresql/data
volumes:
db_vol:
FreshRSSの起動
docker compose up -d
設定
ブラウザで「http:localhost:1201」へアクセスします。
基本的には画面の指示に従えばOKです。
データベースの設定では、docker-compose.ymlの内容に合わせて入力します。
ログイン直後はリリースノートのみ表示されます。
以上で環境構築は終わりです。
使ってみる
以下の手順です。
- RSSHubでRSSフィード生成
- FreshRSSでRSSフィード閲覧
こちらの記事を参考にしました。
RSSHubでRSSフィード生成
Xのポストを取得するにはアカウントの認証情報が必要なため、その設定から行います。
Xの認証情報設定
以下の「.env」ファイルを作成し、RSSHubのdocker-compose.ymlと同じディレクトリに配置します。
# See here for more configuration options:
# https://docs.rsshub.app/deploy/config#route-specific-configurations
DEBUG_INFO=false
DISALLOW_ROBOT=true
TWITTER_USERNAME=ユーザーネーム
TWITTER_PASSWORD=パスワード
TWITTER_COOKIE=auth_token=; ct0=認証クッキー
ユーザーネームには自分のXアカウントのユーザー名、認証クッキーには後述の方法で取得した値を入れてください。
TWITTER_COOKIE
ブラウザでXへログイン後、開発者ツールで値を確認することが可能です。
以下のポストを参考にしました。
docker-compose.ymlの修正
RSSHubを停止します。
docker compose down
docker-compose.ymlにenv_fileを追記します。
services:
rsshub:
image: diygod/rsshub:chromium-bundled
restart: always
ports:
- '1200:1200'
environment:
NODE_ENV: production
CACHE_TYPE: redis
REDIS_URL: 'redis://redis:6379/'
PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
# これを追加
env_file: ./.env
RSSHubを起動します。
docker compose up -d
RSSフィードの生成
例としてXのAWS公式アカウント(https://x.com/awscloud_jp)からフィードを生成します。
「http://localhost:1200/twitter/user/awscloud_jp
」へアクセスします。
終わりです。
他にもタイムラインやリストなど取得できるので、気になる方は以下の公式ドキュメントを見てみてください。
FreshRSSでRSSフィード閲覧
フィードの追加
購読フィードの管理を選択します。
フィードの追加で「http://host.docker.internal:1200/twitter/user/awscloud_jp
」を入力します。
host.docker.internalとなっているのは、コンテナ内からホストのネットワーク(localhost)を参照させているためです。
「追加」を選択して完了です。
フィードの閲覧
左のメニューから追加したフィードを選択すると閲覧できます。
以下は前述の手順で生成したAWS公式アカウントのポストを閲覧している様子です。
画像まで表示されているので、Xで閲覧するのと同等の情報が確認できますね。
おわりに
クラウドサービス上に構築すればスマホやタブレットからも閲覧できるので、いつかやってみます。
Discussion