🐶

SNSでの情報収集は誘惑が多くて大変、それRSSでやってみませんか?

2024/12/12に公開

ゴール

  • X(旧Twitter)の投稿をRSSリーダーで閲覧可能にする(ローカル限定)

使用するアプリはInstagramなど他のSNSにも対応していますが、今回は扱いません。

書いた経緯

私は普段RSSをメインに情報収集しているのですが、必要に応じてXの公式アカウントのポストも確認しています。
ですが、タイトルの通りSNSは誘惑が多く、意志の弱い私は気がつくと一般アカウントの投稿した関係ない漫画を読み漁っています。

ところで、皆さんはRSSを使っているでしょうか。
2013年にはGoogleリーダーがサービスを終了し、何となく過去の産物といったイメージがあるかもしれませんが、情報収集においては現代でも十分便利だと思っています。
私が感じているRSSの利点は主に2つです。

  • 事前に登録したサイト以外は情報が入ってこない、広告もない
  • 情報収集のサービスを集約できる

というわけで、RSSでXの投稿が見られれば最高という話になります。

環境構築

以下の順で進めます。

  1. Dockerインストール
  2. RSSHubの構築
  3. 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の内容に合わせて入力します。

ログイン直後はリリースノートのみ表示されます。

以上で環境構築は終わりです。

使ってみる

以下の手順です。

  1. RSSHubでRSSフィード生成
  2. 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アカウントのユーザー名、認証クッキーには後述の方法で取得した値を入れてください。

ブラウザでXへログイン後、開発者ツールで値を確認することが可能です。
以下のポストを参考にしました。

https://x.com/aruta2525/status/1617353011050975232

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で閲覧するのと同等の情報が確認できますね。

おわりに

クラウドサービス上に構築すればスマホやタブレットからも閲覧できるので、いつかやってみます。

LCL Engineers

Discussion