RSS・Atom・JSON Feedの検出用linkタグを作成
ページが配信用リソースの場所をブラウザー、フィードリーダー、クローラーへ明示すると、フィードを確実に検出できます。この生成機能は、指定されたフィード形式と絶対URLから適切なメディアタイプを選び、HTML属性を壊す可能性がある文字をエスケープし、headに配置できる完全なlink rel alternate要素を返します。RSS、Atom、JSON Feedに対応し、未対応の形式やWeb用ではない不正なURLはエラーとして扱います。
無料で実行
公開する文書に合うフィード形式を選びます
検出タグのtype属性がURL先のリソースを正しく表している場合にのみ、そのタグは役立ちます。XML形式のRSS文書にはrss、XML形式のAtom文書にはatom、JSON Feed文書にはjson-feedを選択してください。それぞれapplication/rss+xml、application/atom+xml、application/feed+jsonに変換されます。この機能はリンク先を取得したり内容を調査したりしないため、サーバーが実際に返す形式と選択内容を一致させる必要があります。正確な宣言があれば、フィードリーダーは取得や解析の前にそのリソースを扱えるか判断できます。また、AtomのエンドポイントをRSSのメディアタイプで案内する、JSON Feedを一般的なJSONとして公開するといったコピー時の誤りも防げます。未知の名称を推測すると、もっともらしい誤ったタグが生まれて原因究明が難しくなるため、未対応値は拒否します。複数形式を提供するサイトでは、各エンドポイントについて実行し、生成された要素をすべてheadへ配置してください。各タグが、対応クライアントの選べる実在の代替表現になります。
公開用の正規フィードURLを指定します
訪問者のフィードリーダーから到達できる絶対HTTPまたはHTTPS URLを入力してください。例はhttps://example.com/feed.xmlです。絶対URLなら、コピーされたページ、キャッシュ済み文書、基準URLの処理が異なるクライアントでも、同じエンドポイントを参照できます。入力の前後にある空白を除去し、URLとして解析できることを確認したうえで、file、data、javascriptなどのスキームを拒否します。指定されたWeb URLは維持され、パス、クエリー、フラグメント、エスケープ表現、大文字と小文字を暗黙に書き換えません。HTML属性で特別な意味を持つ文字だけを生成タグ内で符号化するため、クエリー中のアンパサンドも安全になり、返却されるurlフィールド自体は変わりません。この検証が確認するのは形式とスキームです。所有権、稼働状況、コンテンツタイプ、リダイレクト、TLSは別途確認してください。公開後は対象URLが意図したフィードを正常に返すか実際にテストすることをお勧めします。
生成された要素を配置して確認します
フィードを検出可能にするHTMLページのheadへ、返されたタグをコピーしてください。結果にはrel="alternate"、形式固有のメディアタイプ、エスケープ済みURLのhrefが含まれます。入力に形式とURLしかないため、titleは意図的に追加しません。説明文を推測するより、サイト側のテンプレートで適切な言語と表現を指定するほうが確実です。メインフィードとトピック別フィードなど複数のフィードがある場合は、URLごとに要素を作り、利用者が区別する必要があればアプリケーション側で分かりやすいtitleを加えてください。テンプレートエンジンやセキュリティ層がマークアップを変換する場合があるため、デプロイ後に実際に配信されるソースも確認します。その後、少なくとも1つのフィードリーダーで検出を試し、エンドポイントの応答ヘッダーも調べてください。ブラウザー版とAPIは同じ決定的な関数を実行するので、同一入力から同じフィールドとタグが得られます。自動ビルドでは1回$0.002でAPIを呼び出せます。対話的な利用はブラウザー内でローカル実行されます。
活用例
公開サイトにRSS検出を追加
メディアタイプを暗記せずに、ブログやニュースサイトのRSSエンドポイント用head要素を生成できます。
Atom形式の選択肢を案内
他の配信形式とともに提供するAtomフィードへ、一貫した検出用マークアップを作成できます。
JSON Feedメタデータを公開
登録済みのJSON Feedメディアタイプを、正しくエスケープされたalternate要素で使用できます。
よくある質問
どのフィード形式に対応していますか?
rss、atom、json-feedを指定できます。それ以外の値は不正入力エラーになります。
APIの利用料金はいくらですか?
APIは1回$0.002です。ブラウザー版はローカルで無料実行できます。
フィードが存在するか確認しますか?
いいえ。ネットワーク通信は行わず、入力を検証してマークアップを作成します。
絶対URLが必要なのはなぜですか?
絶対HTTPまたはHTTPS URLなら、検出元ページや基準URLに関係なくフィードリーダーが一意に解釈できます。
URLの特殊文字は安全に処理されますか?
はい。HTML属性で特別な文字はタグ内でエスケープし、別のurlフィールドには前後の空白を除いた入力を保持します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/web/link-rel-alternate-build \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"feed_type":"rss","url":"https://example.com/feed.xml"}'const res = await fetch("https://api.kit.forhosting.com/web/link-rel-alternate-build", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"feed_type": "rss",
"url": "https://example.com/feed.xml"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/link-rel-alternate-build",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"feed_type": "rss",
"url": "https://example.com/feed.xml"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/link-rel-alternate-build", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"feed_type":"rss","url":"https://example.com/feed.xml"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"feed_type":"rss","url":"https://example.com/feed.xml"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/link-rel-alternate-build", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"feed_type": "rss",
"url": "https://example.com/feed.xml"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.link_rel_alternate_build",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
timeout_sec | 30 |
max_crawl_pages | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |