エンジニアやWeb制作者にとって、技術情報のキャッチアップは避けて通れません。しかし、RSSリーダーを開くと未読が数百件…という状況に疲弊している方も多いのではないでしょうか。
世の中には情報収集を自動化するツールやサービスがありますが、多くは「RSSからSlackやDiscordに通知する」だけ。それならFeedlyで十分ですし、結局は大量の記事から自分で選別する必要があります。
そこで今回は、AIが記事を自動でスコアリングし、興味のある記事だけを自分のサイトに表示する 自動化システムを作りました。さらに、リンククリック, Like/Dislikeボタンでフィードバックすることで、AIの採点精度が向上していく仕組みです。
API『RSS Portal』

RSS Portal:
AIがRSS記事をスコアリングし、興味のある記事だけを表示するWordPress連携システム
主な機能
| 機能 | 説明 |
|---|---|
| RSS自動取得 | 登録した技術ブログから記事を自動収集(6時間ごと) |
| AIスコアリング | 各記事を1〜5点で自動評価 |
| AI要約生成 | 記事の要約を130文字以内で生成 |
| Like/Dislike | リンククリック, Like/Dislike クリックをフィードバックとしてAI学習に活用 |
| Dislike非表示 | 興味のない記事は次回から表示しない |
| WordPress連携 | 自分のサイトに埋め込み可能 |
システム構成
┌─────────────────────────────────────────────────────────────────┐
│ サーバー │
│ │
│ ┌─────────────┐ ┌─────────────────────────────────────┐ │
│ │ Cron │ │ Python FastAPI │ │
│ │ (6時間毎) │───▶│ │ │
│ └─────────────┘ │ 1. RSS取得 (feedparser) │ │
│ │ 2. AIスコアリング (Gemini API) │ │
│ │ 3. SQLiteに保存 │ │
│ │ 4. JSON出力 │ │
│ └─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ API (port 8001) │ │
│ │ /api/rss-portal/ │ │
│ └─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ WordPress / 静的サイト │ │
│ │ │ │
│ │ [JavaScript] ─fetch─▶ /api/rss-portal/articles │ │
│ │ │ │
│ │ [評価ボタン] ─POST─▶ /api/rss-portal/feedback │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
技術スタック
| 役割 | 技術 |
|---|---|
| バックエンド | Python FastAPI + uvicorn |
| データベース | SQLite |
| RSS取得 | feedparser |
| AIスコアリング | Gemini API(Gemini 2.0 Flash) |
| フロントエンド | WordPress(JavaScriptで埋め込み) |
AIスコアリングの仕組み
スコアリングの基準
AIには「興味のある分野」と「興味のない分野」を事前に設定しておきます。
興味のある分野の例:
- WordPress開発・カスタマイズ・プラグイン開発
- AIコーディング(Claude Code, Cursor等)
- Web制作全般(HTML/CSS/JavaScript)
- 具体的な実装例・コード例がある記事
興味のない分野の例:
- モバイルアプリ開発
- ゲーム開発
- 日記・体験談・ポエム的な内容
- 「まとめてみた」だけで具体的な実装がない記事
フィードバック学習
リンクをクリック、Like/Dislikeボタンを押すと、その情報がデータベースに記録されます。次回のスコアリング時には、過去にLikeした記事・Dislikeした記事がAIのプロンプトに含まれ、より精度の高いスコアリングが行われます。
# スコアリング時にフィードバックを活用
liked_articles = get_liked_articles(5) # 過去5件のLike記事
disliked_articles = get_disliked_articles(5) # 過去5件のDislike記事
prompt = f"""
【過去に高評価した記事】
{liked_articles}
【過去に低評価した記事】
{disliked_articles}
この傾向を踏まえて、以下の記事を評価してください...
"""
Gemini API 運用コスト
このシステムの大きなメリットは、運用コストが非常に安いことです。
API料金(Gemini 2.0 Flash)
| 項目 | 料金 |
|---|---|
| 1記事あたり | 約$0.0001〜0.0005 |
| 1日100記事処理 | 約$0.01〜0.05 |
| 月間コスト | 約$0.30〜1.50(約50〜200円) |
実際の運用では、月額$1の上限設定で十分に収まっています。
サーバー費用
レンタルサーバー「カラフルボックス」共用サーバー(月額500〜1,000円程度)で動作可能です。VPSや専用サーバーは不要です。
実装のポイント
1. RSS取得(feedparser)
import feedparser
def fetch_rss(feed_url):
feed = feedparser.parse(feed_url)
articles = []
for entry in feed.entries:
articles.append({
'title': entry.get('title', ''),
'link': entry.get('link', ''),
'summary': entry.get('summary', ''),
'published': entry.get('published', '')
})
return articles
2. AIスコアリング(Gemini API API)
import requests
def score_article(title, summary, user_interests, user_dislikes):
prompt = f"""
以下の記事を1-5のスコアで評価してください。
【ユーザーの興味】
{user_interests}
【ユーザーが興味のない分野】
{user_dislikes}
【記事情報】
タイトル: {title}
概要: {summary}
JSON形式で回答: {{"score": 数値, "reason": "理由", "summary": "130文字以内の要約"}}
"""
response = requests.post(
f"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key={API_KEY}",
headers={"Content-Type": "application/json"},
json={
"contents": [{"parts": [{"text": prompt}]}],
"generationConfig": {"temperature": 0.1, "maxOutputTokens": 500}
}
)
return response.json()
3. フロントエンド(JavaScript)
fetch('/api/rss-portal/articles')
.then(res => res.json())
.then(data => {
data.articles.forEach(article => {
// スコア3以上の記事のみ表示
if (article.score >= 3) {
renderArticle(article);
}
});
});
function sendFeedback(articleId, type) {
fetch('/api/rss-portal/feedback', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({article_id: articleId, feedback: type})
});
}
まとめ
RSS Portalは、以下の課題を解決するために作りました。
| 課題 | 解決策 |
|---|---|
| 興味のない記事が多い | スコアリングでフィルタリング |
| 要約がない/読みにくい | AI生成の日本語要約 |
| 学習しない | Like/Dislikeで精度向上 |
| 外部サービス依存 | 自分のサイトに設置可能 |
「情報収集の自動化」というと、SlackやDiscordへの通知が一般的ですが、それだけでは結局手動で選別する必要があります。AIによるスコアリングと学習機能を自動化することで、欲しい情報だけが届くシステムを実現できました。
関連記事
続・RSS×AIで情報収集を自動化!採点&学習する自分好みの情報ポータルの作り方
参考リンク
- Gemini API - GoogleのAI API
- FastAPI - Python製の高速Webフレームワーク
- feedparser - PythonのRSSパーサー
