1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RustのAPIサーバーによる、PythonとSQLiteの役割の切り分けを行いました

1
Posted at

何が出来るの?

Pythonで直接SQLiteを触らずに、RustのAPIを間に入れました。

Systemdで家庭内サーバーで自動化するだけならRustは重厚ですが、Node.jsのように迅速に作れ、ファイルや言語ごとに役割を明確にしました。

このプログラムはPythonファイルで指定したRSSの取得し、整形しRustのAPI経由でSQLiteに保存します。その後、SQLiteにある任意のキーワードの有無のCSVファイルを比較できるよう、添付形式でメールが届きます。

PythonとSQLiteで実装出来ますが、Rustを学ぶ目的で作りました。


使い方

1. システム起動

# Rust APIサーバー起動
cd /path/to/rss-to-me
cargo run --release #初回のみビルドします(Rustの処理系が必要です)

サーバーが http://127.0.0.1:8080 で起動します。

2. キーワード管理(システム管理者権限)

ここは任意です。現在のキーワードで問題無ければ飛ばして下さい。

# SQLite直接操作でキーワード管理
sqlite3 news_titles.db

# キーワード追加
INSERT INTO keywords (keyword) VALUES ('新しいキーワード');

# キーワード無効化
UPDATE keywords SET is_active = 0 WHERE keyword = '削除するキーワード';

# キーワード一覧確認
SELECT * FROM keywords WHERE is_active = 1;

3. Python処理実行

⚙️ 設定

Email設定(rss_sqlite_email_api_version.py)

EMAIL_CONFIG = {
    'smtp_server': 'smtp.gmail.com',
    'smtp_port': 587,
    'email': 'your_email@gmail.com',  #Gmailアカウント(送信側)
    'password': 'your_app_password',  #上記アプリパスワード
    'to_email': 'recipient@gmail.com' #送信先
}

ターミナル

# 仮想環境でPython実行
source /path/to/venv/bin/activate
python3 rss_sqlite_email_api_version.py
deactivate

(自動化目的なので、Pythonスクリプトにハードコートする仕様です。環境変数などをお勧めします)

4. API確認(オプション)

# ヘルスチェック
curl http://127.0.0.1:8080/health

# キーワード一覧(Python用読み取り専用)
curl http://127.0.0.1:8080/api/keywords

# 最新記事(7日間)
curl "http://127.0.0.1:8080/api/news/recent?days=7"

🏗️ アーキテクチャ

設計思想

Node.js哲学 → 厳格な役割分離設計
├── Index: エントリーポイント
├── Routing: Rust API層 ← セキュリティ層・擬似サンドボックス(読み取り制御)
├── Logic: Python処理層 ← ビジネスロジック(読み取り専用)
└── Data: SQLite データ層 ← データストレージ(管理者直接操作)

権限レベル

🏛️  システム管理者: SQLite直接操作(全権限)
  ├── キーワード管理
  ├── データベース設定
  └── システム設定

🔒 Rust API層: セキュリティ制御(読み取り制御)
  ├── データアクセス制御
  ├── 記事保存制御(Python用)
  └── 読み取り専用API提供

🐍 Python処理層: ビジネスロジック(読み取り専用)
  ├── RSS収集・処理
  ├── キーワード読み取り
  ├── 記事分類・分析
  └── メール送信

リポジトリ

最後までお読み下さりありがとうございます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?