Skip to content

yukidevv/s4s

Repository files navigation

s4s (Strategic Tracking & RSS System)

自分専用RSSリーダー。登録したフィードの新着記事をWeb UIで閲覧できます。

技術スタック

  • Python 3.14
  • SQLite
  • FastAPI / uvicorn
  • feedparser / BeautifulSoup4

セットアップ

Docker(推奨)

docker compose up -d --build

Web UI: http://localhost:8000

ローカル

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn api:app --reload --host 0.0.0.0

認証

クエリパラメータにトークンを付与することでアクセスを制限できます。

docker-compose.override.yml をプロジェクトルートに作成します(gitignore済み):

services:
  app:
    environment:
      - STARTS_TOKEN=<your-token>

トークンの生成:

python -c "import secrets; print(secrets.token_urlsafe(32))"

docker compose up 時に自動で読み込まれます。

アクセスURL:

https://example.com/s4s/?token=<token>

このURLをスマホにブックマークしてください。トークンなしのアクセスは403になります。

Web UI

http://localhost:8000 にアクセスすると以下が利用できます。

  • 新着タブ — 取得済みの未読エントリ一覧。フィード(ソース)ごとにグルーピングして表示し、新着が各グループの先頭に並ぶ。既読ボタンで消化、後で読むボタンで保存
  • 後で読むタブ — 保存した記事の一覧。削除ボタンで消化
  • フィード管理タブ — フィードの登録・削除

RSSフィードのURLだけでなく、サイトのトップURLを入力してもフィードを自動検出します。サイト名も自動で取得します。

CLI

python main.py run  # 新着を取得してDBに記録

フィードの追加・削除は Web UI から行います。

Push通知

ヘッダーの「通知」ボタンから購読できます。通知は main.py run 実行のたびに送信されます。

VAPID鍵の生成:

python -c "from py_vapid import Vapid; v = Vapid(); v.generate_keys(); print('PRIVATE:', v.private_pem().decode()); print('PUBLIC:', v.public_key.public_bytes(__import__('cryptography.hazmat.primitives.serialization', fromlist=['Encoding','PublicFormat']).Encoding.X962, __import__('cryptography.hazmat.primitives.serialization', fromlist=['Encoding','PublicFormat']).PublicFormat.UncompressedPoint).hex())"
# または py_vapid CLI: vapid --gen

環境変数に設定:

VAPID_PRIVATE_KEY=<秘密鍵>
VAPID_PUBLIC_KEY=<公開鍵(URL-safe Base64)>
VAPID_EMAIL=<your@email.com>

docker-compose.override.yml に追記する場合:

services:
  app:
    environment:
      - STARTS_TOKEN=<token>
      - VAPID_PRIVATE_KEY=<秘密鍵>
      - VAPID_PUBLIC_KEY=<公開鍵>
      - VAPID_EMAIL=<your@email.com>

サーバーへのデプロイ (systemd)

git clone <repo> /srv/www/htdocs/s4s
cd /srv/www/htdocs/s4s
python -m venv .venv
.venv/bin/pip install -r requirements.txt

sudo systemctl link $(pwd)/systemd/s4s.service
sudo systemctl link $(pwd)/systemd/s4s.timer
sudo systemctl daemon-reload
sudo systemctl enable --now s4s.timer

07:00 / 12:00 / 17:00 (JST) に自動で新着取得します。

sudo systemctl list-timers s4s.timer  # 次回実行時刻の確認
journalctl -u s4s.service             # ログ確認

DB

docker compose exec app sqlite3 data/stars.db
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM feeds;    -- 取得済みエントリ
sqlite> SELECT * FROM sources;  -- 登録フィード一覧
sqlite> .quit

About

Special RSS reader!!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors