RSSをWebhookに送るには、定期的にフィードを確認して新しい記事を検出し、それぞれをHTTP POSTで指定したURLに送る仕組みが必要です。 Feederの「Webhookに投稿」ルールなら、キーワードで絞り込みながら、いくつでもフィードを監視できます。再試行機能も備わっています。Zapier、Make、IFTTT、n8nなどの自動化ツールや、自分のサーバーで動かす短いスクリプトでも実現できます。
RSSをWebhookに送る方法
| 方法 | 適している用途 | 知っておきたいこと |
|---|---|---|
| Feederの「Webhookに投稿」ルール | 複数のフィード、キーワードによる絞り込み、全フィード共通のJSON形式 | Feeder Professionalの機能です。詳しくは以下をご覧ください。 |
| Zapier、Make、IFTTT、n8n | コードを書かずに、各記事をほかのアプリに渡す | フィールドの対応付けは自分で行います。各ツールにはそれぞれ異なるプランと制限があります。 |
| スクリプト | 細かく制御したい開発者 | スクリプトの設置や実行スケジュールの設定、送信済み記事の管理は自分で行います。 |
Feederの「Webhookに投稿」ルールの仕組み
「Webhookに投稿」は、Feederのルールで実行できるアクションのひとつです。ルールを作成し、どうするべき?でWebhookに投稿を選択して、エンドポイントのURLを入力します。監視するフィードやフォルダー、またはすべてのフィードを選びます。特定の記事だけを対象にする場合は、キーワードを追加してください。設定後は、条件に一致する新しい記事がFeederからURLに送信されます。
Webhookを使って独自の連携を作成するでは、スクリーンショット付きですべての手順を確認できます。機能の公開記事では、ルールの動作を紹介しています。このページの技術情報は、Webhookを送信するコードに基づいています。
FeederからWebhookに送られるデータ
記事ごとにHTTPのPOSTリクエストが1件送信されます。リクエストにはJSON形式の本文と、次のヘッダーが含まれます。
POST /hooks/rss HTTP/1.1
Content-Type: application/json
User-Agent: Feeder-Webhooks/1.0
X-Feeder-Signature: sha256=<HMAC-SHA256 of the body, in hex>
以下は、Feederブログの記事を送る場合の本文例です。contentは短縮しています。実際には1行で送信されますが、読みやすいように改行しています。
{
"version": "2023-06-26",
"message_id": "3f1c9a52-7e4b-4d0a-9b6e-2c8d51f0a7e4",
"post": {
"id": "aff2424a-abc9-11f1-afb3-1a21cf3a468a",
"title": "Feed your AI",
"url": "https://feeder.co/blog/1208-feed-your-ai",
"published": "2026-09-08T20:19:59Z",
"content": "\u003cp\u003eWith Feeder's MCP server, you can connect Feeder to your AI client of choice.\u003c/p\u003e",
"audio_url": null,
"image_url": "https://uploads.feedercdn.com/8XSXZN92WHeb2d17f3440d-feedyourai-1024x538.png"
},
"feed": {
"id": "21f058e947",
"source_url": "https://feeder.co/blog.rss",
"public_url": "https://feeder.co/blog",
"title": "Feeder.co",
"favicon": "https://icons.feedercdn.com/feeder.co"
}
}
| フィールド | 内容 |
|---|---|
version | 形式のバージョンです。2023-06-26が指定されます。 |
message_id | メッセージごとに新しいIDが付与されます。同じメッセージの再試行ではIDは変わらないため、重複を除外できます。 |
post.id | 記事を識別するFeederのIDです。 |
post.title | 記事のタイトルです。 |
post.url | ウェブサイト上の記事へのリンクです。 |
post.published | 記事の公開日時です。RFC 3339形式のタイムスタンプ、またはnullが入ります。 |
post.content | フィードに含まれる記事のHTMLです。記事全文または概要が入ります。 |
post.audio_url | ポッドキャストのエピソードなど、記事に添付されたMP3のURL、またはnullです。 |
post.image_url | 記事に添付された画像のURLです。添付画像がない場合は、記事本文の最初の画像のURL、またはnullが入ります。 |
feed.id | フィードを識別するFeederの短いIDです。 |
feed.source_url | フィードのURLです。 |
feed.public_url | フィードが属するウェブサイトのURLです。 |
feed.title | フィードのタイトルです。 |
feed.favicon | サイトのアイコンのURLです。 |
content内の<、>、&は、それぞれ\u003c、\u003e、\u0026として送信されます。これは有効なJSON表現であり、JSONパーサーでHTMLに戻せます。
Webhookが実行されるタイミング
- 新しい記事だけが対象です。ルールの保存後にFeederが検出した記事に対して実行されます。すでにフィードにある記事は送信されません。
- 記事ごとに1回送信されます。条件に一致する記事はそれぞれ個別のリクエストになります。複数の記事がまとめて送られることはありません。サイト側で記事が後から編集され、Feederが変更を検出した場合は、編集後の記事も送信されます。
- フィードの次回チェック後に送信されます。Professionalでは、Feederは初期設定で10分ごとにフィードを確認します。フィードの更新頻度は最短1分ごとに設定できます。詳しくはFeederがフィードを確認する頻度をご覧ください。
- 条件に一致した記事だけが対象です。キーワードを設定すると、一致する記事だけが送信されます。設定しない場合は新しい記事がすべて送信されます。投稿をフィルターまたは重複フィルターのルールで非表示になった記事は送信されません。
エンドポイントが停止している場合
Feederは応答を最大60秒待ちます。2xxステータスが返ると配信成功とみなされます。404や500などのエラーが返るか、応答がない場合、Feederはさらに最大8回再試行します。
| 試行回数 | 前回の試行からの待ち時間 |
|---|---|
| 2 | 5秒 |
| 3 | 30秒 |
| 4 | 1分 |
| 5 | 5分 |
| 6 | 10分 |
| 7 | 30分 |
| 8 | 30分 |
| 9 | 30分 |
初回を含めて9回目の試行後、最初の送信から約1時間47分で、その記事の再試行は終了します。失敗した試行はそれぞれルールのエラーログに記録されます。ルールを開いてエラーログを開くを選択してください。再試行待ちの間にルールのURLを変更すると、次回以降の再試行は新しいURLに送信されます。テストメッセージを投稿ではテストを1回だけ送信し、再試行は行いません。
エンドポイント側で必要な対応
- すばやく応答する。まず2xxステータスを返し、その後に時間のかかる処理を行ってください。60秒の応答時間を十分に下回るようにします。
- 重複を除外する。サーバーがメッセージを処理した後、応答が遅れて再試行されると、同じメッセージがもう一度届きます。受信済みの
message_idまたはpost.idを記録してください。 - 最終的なURLを使う。
https://example.com/hooks/rssのようにパスを含むURLを指定し、パブリックインターネット上のサーバーを参照する必要があります。Feederはローカルネットワークやプライベートネットワークのアドレスには投稿しません。リダイレクトも避けてください。301、302、303リダイレクトの後は、JSON本文を含まないGETリクエストとして到着します。 - 署名を確認する。URLを知っている人なら誰でもリクエストを送れるため、有効な
X-Feeder-Signatureがあるリクエストだけを信頼してください。確認方法は次のセクションで説明します。
リクエストがFeederから届いたことを確認する
FeederはルールのWebhookシークレットを使って、すべてのリクエストに署名します。確認するには、ルールを開き、アドバンストをオンにして、Webhook Secretをコピーし、ルールを保存します。X-Feeder-Signatureヘッダーにはsha256=に続いて、シークレットを使ってリクエスト本文から計算したHMAC-SHA256の16進数表現が入ります。
確認するには、JSONを解析する前の未加工の本文に対して同じHMACを計算し、2つの値を一定時間で比較します。Pythonの場合は次のとおりです。
import hashlib, hmac
def from_feeder(body, header, secret):
expected = "sha256=" + hmac.new(secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, header or "")
ここでbodyは、バイト列として受け取ったリクエスト本文です。from_feederがFalseを返した場合はリクエストを拒否してください。再試行の署名にはその時点でルールに設定されているシークレットが使われるため、シークレットを変更すると再試行にも新しい値が適用されます。
FeederからWebhookにダイジェストを送信できますか?
いいえ。「Webhookに投稿」は、Feederが記事を検出すると、記事ごとに1件のリクエストを送信します。ダイジェストを作成するには、次の3つの方法があります。
- 受信側でまとめる。エンドポイントが受信した記事を保存し、スケジュールに合わせて独自のまとめを送信します。
- メールのダイジェストを使う。Feederでは、PlusおよびProfessionalで、選択したフィードの日次、週次、月次のまとめをメールで受け取れます。詳しくは新着記事の通知を受け取るをご覧ください。
- フィードを公開する。Professionalでは、フォルダーまたはコレクションをRSSフィードまたはJSONフィードとして公開し、任意のツールで設定したスケジュールに合わせて読み込めます。詳しくは記事をRSSフィードやJSONフィードとしてエクスポートする方法をご覧ください。
Zapier、Make、IFTTT、n8nでRSSをWebhookに送る
それぞれのツールで、RSSトリガーとHTTPアクションを組み合わせます。以下の名称は、2026年9月28日に各ツールの公式サイトで確認したものです。
| ツール | トリガー | アクション | 補足 |
|---|---|---|---|
| Zapier | RSS by Zapier: フィード内の新しいアイテム、または複数フィード内の新しいアイテム | Webhooks by Zapier: POST | Webhooks by Zapierはプレミアムアプリで、有料プランでのみ利用できます。 |
| Make | RSS: RSSフィードのアイテムを監視 | HTTP: リクエストを実行 | RSSモジュールはRSSフィードとAtomフィードを読み込みます。 |
| IFTTT | RSS Feed: 新しいフィードアイテム | Webhooks: ウェブリクエストを実行 | IFTTTは無料プランでは1時間ごと、ProおよびPro+では5分ごとにフィードを確認します。 |
| n8n | RSS Feed Triggerノード | POSTメソッドを指定したHTTP Requestノード | Poll Timesでフィードの確認頻度を設定します。 |
すでにいずれかのツールを使っている場合は、これらのツールを使うのが手早い方法です。Feederと組み合わせることもできます。「Webhookに投稿」ルールの送信先に、ZapierのCatch Hookトリガーまたはn8nのWebhookノードを指定してください。フィードの監視と記事の絞り込みはFeederが行い、その後の処理はワークフローに任せられます。
スクリプトでRSSをWebhookに送る
次のPythonスクリプトは、1つのフィードにある新しいアイテムをWebhookに送信します。送信済みのアイテムをseen.txtに記録し、各アイテムを1回だけ送信します。初回実行時は、その時点でフィードに含まれているすべてのアイテムが送信されます。
import json, pathlib, urllib.request
import feedparser # pip install feedparser
FEED_URL = "https://example.com/feed.xml"
WEBHOOK_URL = "https://example.com/hooks/rss"
seen_file = pathlib.Path("seen.txt")
seen = set(seen_file.read_text().split()) if seen_file.exists() else set()
for entry in reversed(feedparser.parse(FEED_URL).entries):
key = entry.get("id") or entry.get("link")
if not key or key in seen:
continue
payload = {"title": entry.get("title"), "url": entry.get("link"), "published": entry.get("published")}
request = urllib.request.Request(WEBHOOK_URL, data=json.dumps(payload).encode(),
headers={"Content-Type": "application/json"})
urllib.request.urlopen(request, timeout=30)
seen.add(key)
seen_file.write_text("\n".join(seen))
実行にはPython 3とfeedparserパッケージが必要です(pip install feedparser)。スケジュールを設定して実行してください。たとえばcronで15分ごとに実行する場合は、次のようにします。*/15 * * * * cd /path/to/folder && python3 rss_to_webhook.py。エンドポイントからエラーが返るとスクリプトは停止し、次回の実行で同じアイテムを再試行します。
よくある質問
「Webhookに投稿」からSlack、Teams、DiscordのWebhookにRSSを送信できますか?
直接は送信できません。Feederが送信するJSON形式は、これらのアプリが求めるメッセージ形式とは異なります。代わりにFeederのSlackに投稿、Microsoft Teamsに投稿、Discordに投稿するルールを使うか、Zapier、Make、n8nを間に挟んでください。
Webhookを使えるFeederのプランはどれですか?
「Webhookに投稿」はProfessionalの機能です。記事をフィルターしたり、スターを付けたり、収集したりするルールはPlusでも利用できます。
Webhookには記事全文が含まれますか?
フィードに掲載されている内容が含まれます。フィードに記事全文がある場合、contentには全文が入り、概要のみの場合はその概要が入ります。
ルールを保存する前にエンドポイントをテストできますか?
できます。テストメッセージを投稿を選ぶと、登録したフィードの記事を1件、実際に指定したURLへ送信します。アカウントに記事が含まれるフィードが少なくとも1つ必要です。
Feederを試す
Feederはウェブ、iOS、Androidで使えるRSSリーダーです。Chrome、Firefox、Edge向けの拡張機能もあります。無料プランでは広告なしで最大200件のフィードをフォローでき、フィードは最短30分ごとに更新されます。Plusでは2,500件のフィードをフォローでき、最短5分ごとの更新とメールダイジェストを利用できます。