mcpField
W
Web Metadata, OpenGraph & Contact Extractor

Web Metadata, OpenGraph & Contact Extractor

リモート
github.com/JosejuXブラウザ自動化108 週間前に更新
リポジトリ

Web Metadata, OpenGraph & Contact Extractor について

Web Metadata, OpenGraph & Contact Extractor は、開発者、SEO チーム、エージェント向けの URL 抽出 API です。構造化されたサイト情報、技術や連絡先のデータ、整形済み Markdown を返します。README に MCP インターフェースの記載はありません。

主な機能

  1. 01SEO と OpenGraph メタデータの抽出
  2. 02公開メールアドレスと電話番号の検出
  3. 03ソーシャルプロフィールと技術の識別
  4. 04競合チェック付きの商品データ解析
  5. 05SEO とセキュリティヘッダーの監査
  6. 06読みやすい Markdown への変換

活用シーン

  1. 01複数 URL の SEO とセキュリティを監査
  2. 02技術スタックを基準に見込み企業を抽出
  3. 03エージェントや RAG パイプラインにページ内容を渡す
  4. 04EC ページから商品情報を抽出

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.rapidapi.com
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.rapidapi.com認証が必要

ツール

詳細

あらゆる URL を構造化されたインテリジェンスに変換 — Web Metadata、OpenGraph、Contact Extractor API

あらゆる URL を構造化されたインテリジェンスに変換します。

あらゆる公開ウェブサイトから、SEO、テクノロジー、連絡先、商品、ソーシャルプロフィール、セキュリティシグナル、AI 対応コンテンツを API 呼び出し 1 回で抽出します。

無料でお試しいただけます。デモに登録は不要です。

Python FastAPI Version Rust ORJSON RapidAPI Response Time Cache Speed License CI Keep Alive

🎮 ライブデモを試す • 🔑 RapidAPI で無料 API キーを取得 • 📖 API ドキュメント • ⚡ コード例

ターミナルのデモ:curl リクエストと JSON レスポンス

URL を貼り付ければ、数秒で実際の結果が得られます — webmetadataextractor.com では、API キー不要で実際のパイプラインをその場で実行できます。ご自身のサイト、または以下のサイトをお試しください。

buffer.com を分析 techcrunch.com を分析 basecamp.com を分析

/demo/extract は、上記のライブデモページで使われているものと同じ、API キー不要のルートです(「正直な制限事項」を参照 — IP ごとにレート制限されており、ドキュメント化された安定版 API エンドポイントではありません)。コードに組み込む場合は、以下に示すように RapidAPI キーを使用して /api/v1/extract を利用してください。

または、直接呼び出すこともできます(本番環境で使う場合は、RapidAPI で取得したキーに置き換えてください)。

curl "https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/extract?url=github.com" \
  -H "X-RapidAPI-Key: YOUR_KEY" -H "X-RapidAPI-Host: web-metadata-and-contact-extractor.p.rapidapi.com"

🎯 ユースケース

ユースケース得られる情報
🧲リード獲得指定した技術スタック(例:Shopify)を使用し、SEO スコアが低い企業を見つけて、アプローチの優先順位を決めます。
🤖AI エージェントmarkdown_content と構造化 JSON をそのままエージェントまたは RAG パイプラインに渡し、あらゆる URL のコンテキストを整理された LLM 対応形式で取得します。
🔎SEO 監査URL のリストに対して、オンページの 14 項目スコアと段階評価されたセキュリティヘッダーを定期的に確認します。
🛒E コマースSchema.org、OpenGraph、Microdata から商品名、価格、通貨、在庫状況、ブランドを取得し、相違がないか照合します。
🕵️競合インテリジェンス同じ URL のリストを再チェックして、競合他社の技術スタック、メタデータ、商品データを継続的に追跡します。
例:リード獲得 — SEO スコアが低い Shopify サイトを抽出する
import requests

RAPIDAPI_KEY = "YOUR_RAPIDAPI_KEY"
HEADERS = {
    "X-RapidAPI-Key": RAPIDAPI_KEY,
    "X-RapidAPI-Host": "web-metadata-and-contact-extractor.p.rapidapi.com",
}
BASE = "https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/extract"

for url in ["shop-a.com", "shop-b.com", "shop-c.com"]:
    data = requests.get(BASE, headers=HEADERS, params={"url": url}).json()
    if "Shopify" in data["detected_technologies"] and data["seo_score_percentage"] < 60:
        print(f"{url}: Shopify + {data['seo_score_percentage']}% SEO -> outreach candidate")
例:AI エージェントのツール呼び出し — あらゆる URL をクリーンな Markdown に変換する
import requests

def read_url_as_markdown(url: str) -> str:
    """Tool function an LLM agent can call to read any public webpage."""
    resp = requests.get(
        "https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/markdown",
        headers={"X-RapidAPI-Key": "YOUR_KEY", "X-RapidAPI-Host": "web-metadata-and-contact-extractor.p.rapidapi.com"},
        params={"url": url},
    ).json()
    return resp["markdown_content"]

🌟 主な機能

機能詳細
⚡ 超高速パフォーマンスライブ取得は約150~300msです。selectolax(C-Lexbor パーサー)、Rust の ORJSON、uvloop、HTTP/2 多重化、非同期 DNS(ノンブロッキング)、5分間の DNS TTL キャッシュを活用しています。
🧠 適応型 SPA バイト制限React、Next.js、Vue、Angular、Nuxt、Svelte、Gatsby、Remix、Astro を自動検出し、より豊富なデータを抽出できるようダウンロード上限を256 KBに拡大します。静的サイトでは64 KBのままです。
🛡️ IP固定型アンチSSRFシールドDNSを一度だけ解決し、プライベート/ループバック/クラウドメタデータの各範囲に対してIPを検証したうえで、TLS SNIを使用して接続先をIPに固定します。DNSリバインディングとリダイレクトSSRFを防止します。
🎯 豊富なSEO・OpenGraphメタデータタイトル、説明、OG画像、OGタイプ、OG URL、OG動画、ファビコン、正規URL、言語、作成者、テーマカラー、Robotsディレクティブ、hreflangタグ、H1見出し、画像数を取得します。
📧 連絡先抽出公開メールアドレスと電話番号を、誤検出を除外するスマートなDOMクリーニングとともに取得します。国番号を含む電話番号は、libphonenumberを使って phone_details に正規化され、E.164形式、ISO国コード、有効性・有効可能性フラグが付与されます。国番号を含まない番号は推測しません。
📲 ソーシャルプロフィール検索Twitter/X、LinkedIn、Facebook、Instagram、GitHub、YouTube、Telegram、TikTok、Threads、Bluesky、Mastodon、Discord、Reddit、Pinterest、Medium、GitLab、Vimeo、Dribbble、Behance、Snapchatの20プラットフォームを自動検出します。
🛠️ 40種類以上の技術スタック検出WordPress、Shopify、WooCommerce、Webflow、React、Next.js、Vue、Angular、Svelte、TailwindCSS、Stripe、GA4などを、CMS/eコマース、フレームワーク、分析/決済/ホスティングの各カテゴリから検出します。
📦 Schema.org JSON-LD+製品パーサーすべての構造化データスキーマを解析し、さらに製品の価格、通貨、在庫状況、ブランド、評価、レビュー数を自動抽出します。
🎯 複数ソースによるデータ品質・競合検出製品の価格/通貨/在庫状況/ブランドを、JSON-LD、OpenGraphの製品拡張、schema.org Microdataという3種類の構造化エンコーディング間で相互チェックします。product_field_confidence はフィールドごとの信頼度スコア(これらのエンコーディング間で一致するものが多いほど信頼度が高くなります。技術スタック検出と同じ考え方です)と、採用されたソースを報告します。実際に値が一致しない場合、SOURCE_CONFLICT 警告にフィールド名、見つかったすべての値、採用された値とその理由が示されます。トップレベルの quality オブジェクト(score、rendered: false、sources_used、warnings)は、プログラムで利用するクライアント向けにレスポンスの信頼性を要約します。注意点:これら3種類のエンコーディングは、同じサイト上では多くの場合、同一の基盤となる製品レコードに由来します。そのため、一致は「内部的に整合している」ことを意味し、「独立して検証済み」であることを意味しません。詳しくは、以下の「正直な制限事項」を参照してください。
📊 ページ内SEO健全性監査スコア対応可能な警告リストに加え、ページ内テクニカルSEOを14項目で自動診断(0~100%)します。また、プログラムで利用できる構造化された seo_checks の内訳(check ID、passed、severity、evidence)も提供します。
🔗 内部リンク・外部リンク分類1ページあたり最大100件のハイパーリンクを分類します。
🤖 AI・LLM向けクリーンMarkdownリーダー記事テキストを、ChatGPT、Claude、RAG、AI エージェント向けのクリーンなMarkdownに変換します。単語数と読了時間も含みます。
📡 RSS/Atomフィード検出RSSとAtomのフィードURLを自動検出します。
🔒 段階評価付きセキュリティヘッダー監査HSTS、CSP、X-Frame-Options、X-Content-Type-Options、Referrer Policy、Permissions Policyを、それぞれ実際の値に基づいて missing/weak/reasonable/strong と評価します(たとえば unsafe-inline を含むCSPは、「存在する=満点」ではなく「weak」と評価されます)。評価はパーセンテージスコアに反映されます。/api/v1/security では、ヘッダーごとの内訳を示す security_header_grades も返します。
🚀 15分間のインメモリキャッシュキャッシュされたレスポンスは、サーバー側の処理時間 0.01 ms未満 で提供されます。
⚡ マルチワーカー+Redis自動再接続uvicorn --workers N によるマルチプロセスクラスターを使用します(WORKERS 環境変数で設定します。gunicorn はプロセスマネージャーとして使いたい方向けに依存関係として指定されていますが、同梱のDockerfileはuvicornを直接起動します)。Redisによる分散レート制限に加え、起動時のping検証、30秒ごとの自動再接続、/health/details への degraded_fallback 状態の即時反映を提供します。
🔒 /health と /health/details の分離最小限の公開ライブネスプローブ(/health)を提供します。詳細な運用情報(Redisモード、ステータス、エンジン)は、/health/details の HEALTH_DETAILS_SECRET ヘッダーで保護されます。
🧯 ホストごとのサーキットブレーカー1つのホストでタイムアウト/接続失敗/5xxが繰り返されると作動します。クールダウン中は、リクエストごとに接続と読み取りのタイムアウト時間を使い切ることなく、すばやく失敗を返します。また、復旧を自動で確認します(通常の4xxでは作動しません)。
🧩 リクエストのシングルフライト+DNS集約同じURLへの同時リクエスト(または同じホスト名のDNS検索)は、オリジンにN回アクセスする代わりに、進行中の1回の取得を共有します。
🩹 ネガティブ結果キャッシュ直近の上流エラー(DNS/タイムアウト/5xx)を短いTTLでキャッシュします。障害中に同じ遅いエラーをリクエストごとに繰り返す代わりに、問題のあるターゲットへのアクセスをすばやく失敗させます。
🧱 適応型バイト制限の強化ストリーミングのバイト上限を 展開後の チャンクに適用し、小さなgzip/brペイロードが1回の読み取りで数MBに膨らむ可能性のある、圧縮爆弾への対策の抜け穴を塞ぎます。レスポンスヘッダーにも、個数とサイズの上限を設けています。
🏷️ 構造化エラーコードすべてのエラーレスポンスには、既存の detail 文字列に加えて、機械可読な error.code/error.retryable オブジェクト(例:SSRF_BLOCKED、UPSTREAM_TIMEOUT、CIRCUIT_OPEN)が含まれます。完全に追加的な変更であり、v1の契約は変更されません。
📈 Prometheusメトリクス+構造化JSONログ/metrics では、リクエスト/キャッシュ/SSRF/サーキットブレーカー/レート制限のカウンターとレイテンシーヒストグラムを公開します。すべてのログ行は、エンドツーエンドのトレースに使える request_id を含むJSONオブジェクトです。機密性が知られているフィールドは自動的にマスキングされます。
🧠 信頼度スコア付き技術検出/api/v1/tech-stack は元のフラットリストに加え、技術ごとの信頼度スコア、一致した根拠、カテゴリ(cms/ecommerce/framework/analytics/payment/hosting/…)を含む technology_details も返します。
📦 より詳細な製品・JSON-LD解析トップレベルのオブジェクトだけでなく、@graph とトップレベルのJSON-LD配列もたどり、SKU、MPN、GTIN/ISBN、販売者、状態、価格帯、画像を抽出します。
🔎 Unicode対応のSEO・キーワード抽出キーワード抽出で、ASCII以外の文字体系(アクセント付き文字/キリル文字など)を正しく扱えるようになりました。また、SEO監査に lang 属性、viewport、noindex、複数のH1、Twitter Card、構造化データのチェックが追加されます。
⚡ エンドポイントごとの遅延抽出専用エンドポイントは、パイプライン全体ではなく必要な抽出器だけを実行します。たとえば /security はHTMLツリーを解析せず、/tech-stack はリンク/メタデータ/Markdown/SEOの処理をすべて省略します。/api/v1/extract はデフォルトでパイプライン全体を実行しますが、?fields= はレスポンスを後から絞り込むのではなく、一致する専用エンドポイントと同じ限定的な抽出に対応付けられます(fields=detected_technologies の処理コストは /tech-stack とまったく同じです)。同じURLを取得する異なるエンドポイント(または fields= の組み合わせ)は、上流からの取得を1回だけ共有し、同じキャッシュエントリーに結果を蓄積します。
🐘 Mastodonソーシャル検出既存の20プラットフォームに加え、公開されている最大規模のMastodonインスタンス(mastodon.social、fosstodon.org、hachyderm.io、…)をベストエフォートで検出します。分散型の性質上、ホスト名マップですべてのセルフホスト型インスタンスを網羅することはできないため、誤検出のリスクを避けるべく意図的に一部のみを対象としています。
🚦 レート制限レスポンスヘッダー成功時も 429 の場合も、すべてのレスポンスに X-RateLimit-Limit、X-RateLimit-Remaining、X-RateLimit-Reset が含まれます。これにより、429 を受けて初めて制限を知るのではなく、クライアントが事前にリクエスト頻度を下げられます。
🛡️ ボット保護検出追加リクエストやJavaScriptの実行を伴わない軽量なヒューリスティック署名チェックにより、取得したページが実際のコンテンツではなくCloudflare/Akamai/PerimeterX/CAPTCHAのチャレンジページである場合にフラグを立てます。通常のレスポンスでは bot_protection_detected: true として、チャレンジが403/429/503ステータスで返された場合は、一般的な上流エラーではなく専用の BOT_PROTECTION_DETECTED エラーコードとして返します。「ターゲットがこのリクエストをブロックした」ケースを、「ターゲットにはタイトル/説明が本当にない」ケースや「実際の障害」と区別できます。
🔗 リダイレクトチェーン・短縮URL検出/extract だけでなくすべてのエンドポイントのすべてのレスポンスに、redirect_count(final_url に到達するまでにたどったHTTPリダイレクトの回数)と is_shortened_url(渡されたURLが bit.ly/tinyurl.com/t.co などの既知の短縮URLドメインに該当するかどうか)が含まれるようになりました。判定には final_url ではなく、元の入力を使用します。
📖 可読性メトリクス+見出し構造全体/api/v1/seo-audit と /api/v1/extract に readability オブジェクトが追加されました。sentence_count、paragraph_count、avg_words_per_sentence、見出しレベル(h1~h6)ごとの数を含む heading_structure の詳細が含まれます。単純な正規表現/DOMカウントによるヒューリスティックを使用しており、NLPへの依存はありません。
📦 複数URLの一括処理POST /api/v1/batch は、1回のリクエストで最大10個のURLに対して軽量なリンクプレビュー抽出を実行します。各URLは個別に取得されるため、1つのURLが失敗しても、その項目に {"success": false, "error": ...} が返されるだけで、バッチの残りには影響しません。IPごとのレート制限では1回ではなく、URLごとに1回、合計N回のリクエストとして数えられます。
🔐 オプトイン式TLS証明書検査/api/v1/security?include_tls_details=true は、ターゲットホストとのライブTLSハンドシェイクを行い、証明書の発行者、サブジェクト、有効期間、ネゴシエートされたTLSバージョンを tls_details として返します。デフォルトでは無効です。通常のヘッダーのみの監査とは別に追加のネットワーク往復が発生します。ハンドシェイクに失敗した場合(タイムアウト、自己署名証明書、非TLSホストなど)も、レスポンス全体を失敗させず、tls_details: null に切り替えます。
🌐 DNS/WHOISドメイン情報GET /api/v1/domain は、ターゲットページを取得しない独立したエンドポイントです。ホスト名に対してDNS(dnspython を使用したA/AAAA/MX/NS/TXT)とWHOIS(python-whois を使用したレジストラ、作成日/有効期限)の照会のみを行います。WHOISサーバーが不安定、またはレート制限中の場合でも、DNSの照会に成功していればリクエスト全体を失敗させず、whois_info: null に切り替えます。
📋 CSP Report-Only検出・ヘッダーの説明Content-Security-Policy-Report-Only のみを実行しているサイト(ロールアウト中で、まだ何もブロックされていない状態)は、以前は強制適用ヘッダーしか読み取られなかったため、セキュリティ監査で検出されませんでした。現在は "missing" とも強制適用ポリシーとも区別される、独自の "report-only" 評価が付与され、生の値も content_security_policy_report_only として追加で公開されます。評価対象のすべてのヘッダー(security_headers//api/v1/security)に、合否評価だけでなく、重要な理由を説明する1行の security_header_explanations エントリーも含まれるようになりました。

🎯 Performance SLA & Technical Architecture Notes

メモ

  • レイテンシとパフォーマンスのSLA:サーバー側の処理オーバーヘッド(DOMのクリーニング、C-Lexborによる解析、Rustによるシリアライズ)は平均 < 5ms です。実際の実行時間は、対象ウェブサイトのネットワークレイテンシとオリジンサーバーの応答時間によって異なります。同じURLへのリクエストを繰り返すと、インメモリーキャッシュが使用され、< 0.01ms で応答します。
  • IPv6とIPv4マップドアドレスに対応したSSRFシールド:Anti-SSRF検証エンジンは、IPv4とIPv6の両方で厳格な名前解決チェックを実施し、ループバック(127.0.0.1、::1)、リンクローカル(169.254.169.254、fe80::/10)、IPv4マップドIPv6(::ffff:127.0.0.1)アドレスをブロックします。
  • Redisレートリミッター(固定ウィンドウ、自動再接続):REDIS_URL が設定されている場合、単一のアトミックなRedis Luaスクリプト(1回のラウンドトリップで INCR と初回ヒット時の EXPIRE を実行するため、接続が切断されてカウンターにTTLが設定されないままになる時間帯はありません)を使用して、すべてのワーカー間でレート制限を分散します。Redisは起動時にpingされ、30秒ごとに再検証されます。障害時には、サービスはすぐにプロセスごとのTTLCacheにフォールバックし、/health/details の redis_status: degraded_fallback でその状態を示します。
  • ヘルスエンドポイントの分離:/health は最小限の公開ライブネス情報を返します。/health/details は完全な運用ステータス(Redisモード、trust_proxy、エンジン)を返します。HEALTH_DETAILS_SECRET 環境変数が設定されている場合は、X-Health-Secret ヘッダーが必要です。
  • 水平スケーリング:単一インスタンスではインメモリーTTLCache(IPあたり60 req/min)を使用します。マルチワーカーでは分散Redisを使用します。エンタープライズ規模ではRapidAPI GatewayまたはNginxを使用します。
  • ゼロトラストのセルフホスティング:セルフホスト可能な本番デプロイメント向けに、完全なDockerfile(uvicornのマルチワーカー)とテストスイートが含まれています。
  • モジュール化されたコードベース:サービスは単一ファイルではなく、app/ パッケージ(security/、fetcher/、cache/、ratelimit/、extraction/、observability/、api/)として構成されています。main.py は後方互換性を保つための薄いシムであり、uvicorn main:app / gunicorn main:app は変更なしで引き続き動作します。
  • 検証済みの設定:app/config.py は pydantic-settings によって管理されています。調整可能なすべての設定(レート制限、キャッシュサイズ/TTL、バイト単位のフェッチ制限、ヘッダー制限など)は、以前とまったく同じデフォルト値で起動時に検証され、環境変数による上書きにも柔軟に対応します。不正な値(負のサイズ、STREAM_SOFT_LIMIT が STREAM_HARD_LIMIT を超える場合など)は、後から実行時エラーとして発生するのではなく、明確なエラーとともに直ちに失敗します。
  • 遅延抽出:fields= を指定せずに /api/v1/extract を呼び出すと、完全なパイプラインが実行されます。一方、特化型エンドポイントと /api/v1/extract?fields=... は、必要な抽出器グループのみを実行します。たとえば、/api/v1/security はHTML解析を完全にスキップしてヘッダーのみを処理し、/api/v1/tech-stack はメタデータ/リンク/Markdown/SEOの処理をスキップします。同じURLに対して異なる特化型エンドポイント(またはフィールド選択)を2つ呼び出すと、上流へのフェッチが共有され、1つのキャッシュエントリーに統合されます。
  • 技術シグネチャの事前フィルタリング:40種類以上ある各技術シグネチャは、正規表現を実行する前に、ページを一度小文字化したコピーに対する低コストの部分文字列チェックで判定されます。すべての正規表現を無条件に実行する方式と同じ検出結果を維持しつつ、<script> タグが多いページでのCPU使用量を大幅に削減します。
  • オブザーバビリティ:GET /metrics は、Prometheusのカウンターとレイテンシーヒストグラム(リクエスト、キャッシュのヒット/ミス、SSRFブロック、サーキットブレーカーの作動、レート制限、ダウンロードしたバイト数など)を公開します。標準的なPrometheusの運用慣行に従い、デフォルトで公開されていますが、ポートをインターネットに公開し、手前にリバースプロキシのルールがない環境でセルフホストする場合は、METRICS_SECRET/X-Metrics-Secret を使ってアクセスを制限できます。すべてのアプリケーションログは1行のJSON形式で、レスポンスヘッダー X-Request-ID と共有される request_id が含まれており、ログとメトリクスをまたいでリクエストを追跡できます。
  • プロパティベースのファズテスト:Hypothesisを利用したテストでは、実行ごとに何百もの敵対的な入力を生成し、URLの正規化、SSRFのIP安全性分類(固定リストだけでなく、すべてのIPv4/IPv6アドレスが対象)、および攻撃者が制御するページコンテンツを処理するすべての抽出器を検証します。これらのテストでは、クラッシュが発生しないこと、およびSSRFロジックが危険なアドレスを決して許可しないことを確認します。その結果、実際のバグが2件見つかり、修正されました。細工された url=[ クエリ文字列で未処理の500エラーを引き起こせる問題と、URLスキームを省略すると埋め込み認証情報のチェック(user:pass@host)を回避できる問題です。
  • 実環境における精度ベンチマーク:benchmarks/bench_accuracy.py は、ECサイト/ニュースサイト/ブログ/SaaS/SPA/WordPress/多言語サイト/小規模サイト/ボット対策サイトにまたがる、厳選され独立して検証された稼働中URL 29件のサンプルに対して実際のパイプラインを実行します。評価方法と率直な制限事項については、benchmarks/README_ACCURACY.md を参照してください。最初の実環境での実行結果は61%でした。現代のCDN経由のサイトで一般的なBrotli圧縮レスポンスが、デコードされないまま気づかれずに渡され、UTF-8として強制的にデコードされていました。エラーはどこでも発生していませんでした。app/fetcher/client.py は Accept-Encoding: br を指定していましたが、デコーダーパッケージがインストールされていなかったためです。requirements.txt に brotli を追加すると、他のコード変更なしで修正され、同じURL 29件での実行結果は100%となり、予期しないエラーは0件になりました。

🎯 この API が適している用途と、適していない用途

この API は、URL をそのページに関する構造化された情報に変換します。SEO/OpenGraph メタデータ、公開されている連絡先情報、ソーシャルプロフィール、技術スタック、Schema.org/商品データ、評価付きセキュリティヘッダー、リンクの分類、整形済み Markdown を、1 回の高速な HTTP リクエストにまとめます。これは通常のサーバー生成 HTML に対するメタデータ/インテリジェンスレイヤーであり、汎用スクレイピングツールやブラウザー自動化の代替ではありません。用途に合うかどうかを判断する際は、この点を念頭に置いてください。

✅ 適している用途:

  • 企業/ウェブサイトの分析 — 対象サイトの技術スタック、CMS、ソーシャル情報、連絡先情報、SEO の状態を 1 回の呼び出しで取得できます。
  • 営業/アウトリーチのワークフローへの入力 — /api/v1/contacts は、ページ上に公開されているメールアドレス/電話番号/ソーシャルリンクを見つけます。これは、構築するリード獲得プロセス(企業の特定、役職の確認、CRM の情報拡充)に渡す生の情報であり、それ自体がリード情報の拡充を行う製品ではありません。詳しくは、以下の「制約について」を参照してください。
  • 自動 SEO 監査 — 14 項目のページ内スコア、構造化された seo_checks の内訳、評価付きセキュリティヘッダー監査は、まさにこの用途のために設計されています。
  • 競合/技術スタックのモニタリング — 既知の URL のリストを対象に、技術スタック、メタデータ、商品データを継続的に比較できます。URL のリストは利用者が用意して再確認する必要があります。組み込みのクローラーはありません(以下を参照)。
  • AI エージェント/RAG パイプライン — markdown_content と構造化 JSON フィールドは、生の HTML の寄せ集めではなく、LLM に入力しやすい形式として設計されています。
  • E コマースデータの抽出 — サイトが Schema.org JSON-LD、OpenGraph の商品タグ、または Microdata を公開している場合に、商品名/価格/通貨/在庫状況/ブランド/SKU/レビューを抽出し、フィールドごとの信頼度スコアで照合します。商品レスポンスには、価格データは他のデータより早く古くなることを考慮して、特に短い 3 分間のキャッシュを使用します。
  • リンクプレビュー — チャットアプリ、ソーシャルカード、ブックマークツール向けに、タイトル、説明、画像、ファビコンを取得できます。

❌ 適していない用途:

  • 複雑/インタラクティブなスクレイピング — ログイン、複数ステップのフォーム、ボタンのクリック、無限スクロール、CAPTCHA で保護されたコンテンツ。この API は HTTP GET を 1 回送信し、取得した HTML を解析します。ブラウザーを操作したり、ユーザー操作をシミュレートしたりはしません。
  • JavaScript への依存度が高いサイト — 意味のあるコンテンツがクライアントサイドのハイドレーション後にしか存在しない場合、この API に見えるのは通常の HTTP クライアントが見るものとほぼ同じ、空のページ構造です。適応型のバイト制限によって、サーバーがすでに送信した内容をより多く取得できますが、JavaScript を実行するわけではありません。
  • 大規模または分散型のクロール — キュー、フロンティア、または「ドメインを渡せばページを見つける」モードはありません。設計上、URL を 1 つ入力すると、1 ページ分のデータを出力します。クローラーへと機能を拡大するのではなく、ステートレスで高速な状態を保ちます。
  • 侵入テストまたは脆弱性スキャン — セキュリティヘッダー監査では、HSTS、CSP、X-Frame-Options などのヘッダーの有無と品質を評価します。脆弱性の調査や、それらのヘッダー以外の設定ミスのスキャンは行わず、セキュリティ評価を行うものでもありません。security_score が高いというのは「このページは適切なセキュリティヘッダーを送信している」という意味であり、「このサイトは安全である」という意味ではありません。
  • 「あらゆるサイトからあらゆるものを抽出する」スクレイピング — 対象は、明確に定義された抽出機能(SEO、連絡先、ソーシャル情報、技術情報、商品、リンク、Markdown)です。任意のカスタムフィールドやページ構造に対応する、プログラム可能なスクレイパーではありません。

こうした境界を設けている技術的な理由(JavaScript の実行、クロール、ボット保護の回避を対象外としている理由や、信頼度/品質スコアが示すものと示さないもの)については、以下の「制約について」を参照してください。

ScrapingBee、Firecrawl、BuiltWith との違いを知りたいですか? それぞれが実際にどのような場合に優れているのかを、価格を確認したうえで率直に比較した COMPETITOR_COMPARISON.md をご覧ください。


⚠️ 制約について

この API は HTTP の生レスポンスを取得して HTML を解析します。ブラウザーではありません。これは速度を優先した意図的なトレードオフです(ブラウザーの起動が不要、JavaScript の実行待ちが不要、リクエストごとのメモリ使用量が最小限)。そのため、正規表現や抽出器をいくら追加しても完全には解消できない、実際の制約があります。

  • JavaScript は実行されません。 クライアント側のレンダリング後にのみ存在するコンテンツ(多くの SPA、一部のログインが必要なページ、「さらに読み込む」操作の背後にあるコンテンツ)は、欠落したり不完全になったりします。静的ページ/SSR ページ(ほとんどのブログ、EC の商品ページ、マーケティングサイト、GitHub、Wikipedia)は問題なく動作します。一方、初期 HTML が <div id="root"></div> だけのクライアントレンダリング型シングルページアプリでは、ほとんど空の結果が返されます。この API は、ページにコンテンツを埋め込む JavaScript を実行できません。
  • JavaScript フレームワークを検出しても、JavaScript の問題が解決したわけではありません。 React/Next.js/Vue などのシグネチャが検出された場合に適応型バイト制限(以下を参照)が 256 KB に拡大されることで、初期 HTML の カバレッジ は向上しますが、ブラウザーを起動したり、ハイドレーションを実行したり、クライアント側の API 呼び出しを待ったりするわけではありません。Next.js -> より多くのバイト -> より大きな解析 は、Next.js -> Chromium -> JavaScript の実行 -> ハイドレーション -> 最終 DOM ではありません。「サーバーからすでに送信された内容を、より念入りに読み取ろうとした」と捉えてください。「SPA の問題を解決した」わけではありません。
  • ボット対策/CAPTCHA は検出しますが、回避はしません。 bot_protection_detected(上記を参照)によって、Cloudflare/Akamai/PerimeterX/CAPTCHA がリクエストをブロックしたことは分かりますが、チャレンジを解決することはできません。実際のブラウザーを実行する以外に回避策はありません。
  • 抽出結果はヒューリスティックに基づく証拠であり、確定的な事実ではありません。確信度が高く見える場合も同様です。 技術、連絡先情報、ソーシャルリンク、商品データの検出は、パターン/シグネチャに基づいています。技術シグネチャが一致しても(たとえば、画像 URL に CDN ホスト名が 1 つ含まれている場合)、取得処理が調べたどこかにその文字列が存在したことを示すだけで、その技術が実際に 使用されている ことの証明にはなりません。未使用のコード、共有/サードパーティのアセット、推移的依存関係、偶然含まれた部分文字列の可能性があります。technology_details.confidence は、いくつの独立したシグナルが一致したかを示すものであり、検出が正しい確率ではありません。上記の実際の GitHub の例では、og:image URL にある単一の CDN ホスト名から "Contentful" が 0.75 の信頼度で検出されています。妥当な証拠ではありますが、GitHub が Contentful を利用している証明ではありません。
  • quality.score が 1.0 に近くても、それは この API が利用できる証拠 に一貫性があったことを意味するだけで、データの正確性が検証済みであることを意味しません。 JSON-LD、OpenGraph、Microdata がすべて同じ価格を報告している場合、それは 3 つの エンコーディング であり、必ずしも 3 つの 独立した 情報源ではありません。多くのサイトは、同じ基礎となる商品レコードからこれら 3 つすべてを生成するため、一致していても「1 つのデータソースを 3 通りに表現している」のであって、独立して検証された 3 つの事実とは限りません。confidence: 0.98 は「ページ内にこれと矛盾する情報がない」と読み、「正しい確率が 98%」とは解釈しないでください。
  • 適応型の 64/256 KB バイト制限は、単なるパフォーマンス調整ではなく、実際のトレードオフです。 これにより通常のリクエストを高速に保てますが、大きなページの後半に配置されたコンテンツ(</body> の終了タグ近くに置かれた JSON-LD、長い CMS 生成ページのかなり下にある商品ブロックなど)は、ページの「複雑さ」とは関係なく、HTML 内の 位置 のために見落とされることがあります。皮肉なことに、大きくスクリプトの多いページほど、関連データが上限を超えた位置に押し出されやすくなります。欠落フィールドを「このページには存在しない」と判断する前に、必ず quality.warnings に CONTENT_TRUNCATED があるか確認してください。「この API がそこまで読み取らなかった」可能性があります。トップレベルに独立した content_truncated ブール値はなく、この情報は quality 内にあります。
  • Markdown への変換は、意味を理解することとは異なります。 markdown_content は比較的きれいな HTML→Markdown 変換であり、「記事の本題が何かを読んで理解する」モデルではありません。どのレイアウトでも、主要コンテンツとナビゲーション、関連記事ウィジェット、有料記事の予告、定型文を確実に見分けられるわけではありません。
  • キャッシュは速度と引き換えに鮮度を犠牲にします。そのトレードオフの重要度はフィールドによって異なります。 15 分前の <title> は問題ありませんが、15 分前の価格情報は問題です。そのため、商品情報を含むレスポンスには、一般的な 15 分のキャッシュとは別に、より短い TTL(デフォルトで 3 分の PRODUCT_CACHE_TTL_SECONDS)が設定されています。それ以外は引き続き一般的な TTL に従います。この時間差を考慮せずに、一般的なキャッシュ経由でリアルタイムの価格監視サービスを直接構築しないでください。
  • 任意の URL の取得は、この API に限らず本質的に信頼性に欠けます。 ページの応答が遅い、何度もリダイレクトする、非常に大きい、自動化されたクライアントをブロックする、TLS に問題がある、地域や User-Agent によって異なるコンテンツを配信する、一時的に停止している、予期しないステータスコードを返す、といったことがあります。SSRF 対策、タイムアウト、リダイレクト制限、バイト数上限、サーキットブレーカー(上記を参照)によって影響は抑えられますが、信頼性の低い対象を信頼できる対象に変えることはできません。
  • 「約 150~300ms」はライブ取得時のネットワーク区間を示すもので、レスポンス全体の上限ではありません。 サーバー側の処理は実際に 1 桁ミリ秒で完了します(ベンチマーク方法については benchmarks/ を参照)が、ライブ のエンドツーエンド時間は対象サイトが応答するまでの時間に左右されます。対象サイトに 2.5 秒かかれば、リクエストにも同じだけかかります。見出しの数値を「対象にかかわらず、この API は 200ms で応答する」と解釈しないでください。
  • クローラーはありません。 処理単位は「URL を 1 つ入力し、1 ページ分のデータを出力する」ことであり、「ドメインを渡せば、そのページを発見/優先順位付け/クロールしてくれる」ものではありません。/api/v1/links は、指定されたページ上のハイパーリンクを最大 100 件分類しますが、そのリンクをたどることはありません。サイト全体(ホームページ+/about+/pricing+/blog)を分析し、重複排除、優先順位付け、クロールを行うには、URL ごとに /extract を 1 回呼び出す処理を外部で調整する必要があります。このプロジェクトでは、高速でステートレスなリクエスト単位の API として維持することを重視しているため、キュー/ワーカー/クロール対象管理システムはあえて追加していません。
  • /api/v1/contacts が見つけるのは、公開されている連絡先の 手がかり であり、企業や人物に関するインテリジェンスではありません。 ページの HTML から見つかったメールアドレス/電話番号/ソーシャルリンクを返しますが、それらが誰に属するのか、その人の役職、あるいは情報の検証は行いません。「ウェブサイト → 公開されている連絡先の手がかり」を、実際のリード情報拡充(domain -> 企業の特定 -> 人物 -> 役職 -> 検証 -> 信頼度)に変換することは対象外です。このエンドポイントは、機能以上のことを示唆しないよう、意図的に「リード情報拡充」ではなく「連絡先の発見」と名付け、タグ付けしています。
  • /api/v1/extract よりも用途に合った個別のエンドポイントを優先するか、fields= を使用してください。 fields を指定せずに /extract を呼び出すと、完全なパイプラインが実行されます。/extract?fields=detected_technologies は、現在 GET /api/v1/tech-stack と同じ限定的な抽出を実行し、キャッシュエントリーも共有します。fields は不要な処理を実際に省略し、すべてを計算した後で結果を絞り込むものではありません。
  • このプロジェクトの API は現在も進化しています。 新しいフィールドが頻繁に追加されています(quality、product_field_confidence、bot_protection_detected などは、いずれも最近追加されました)。変更は追加のみで、既存フィールドの型が変わることはありません(以下のバージョニングに関する注意を参照)。ただし、深く統合する場合は、コミットが 1~2 回分遅れることのある README の記述よりも、最新の /openapi.json スキーマを信頼できる情報源として扱ってください。 このことは、想定されている用途(一般的な Web ページからメタデータ、SEO 情報、連絡先、技術情報をすばやく抽出すること)に対して、基盤となるアプローチに欠陥があることを意味するわけではありません。「1 回の HTTP リクエストですべての URL からすべてを抽出する」には限界があり、その限界を引き上げられるのはブラウザー自動化(Playwright/Puppeteer)だけです。ただし、その場合、この API を高速にしているスピードとリソース消費の少なさが犠牲になります。

⚡ クイックスタート

Python
import requests

url = "https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/extract"
headers = {
    "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY_HERE",
    "X-RapidAPI-Host": "web-metadata-and-contact-extractor.p.rapidapi.com"
}
params = {"url": "https://github.com"}

data = requests.get(url, headers=headers, params=params).json()

print(f"Title:        {data['metadata']['title']}")
print(f"OG Type:      {data['metadata']['og_type']}")
print(f"Robots:       {data['metadata']['robots']}")
print(f"hreflang:     {data['metadata']['hreflang_tags']}")
print(f"Product:      {data['product_data']}")
print(f"Emails:       {data['contacts']['emails']}")
print(f"Tech Stack:   {data['detected_technologies']}")
print(f"Time:         {data['execution_time_ms']} ms")
JavaScript / Node.js
const url = 'https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/extract?url=https%3A%2F%2Fgithub.com';
const response = await fetch(url, {
  headers: {
    'X-RapidAPI-Key': 'YOUR_RAPIDAPI_KEY_HERE',
    'X-RapidAPI-Host': 'web-metadata-and-contact-extractor.p.rapidapi.com'
  }
});
const data = await response.json();
console.log('Title:', data.metadata.title);
console.log('OG Type:', data.metadata.og_type);
console.log('Product:', data.product_data);
console.log('Time:', data.execution_time_ms, 'ms');
cURL
curl --request GET \
  --url 'https://web-metadata-and-contact-extractor.p.rapidapi.com/api/v1/extract?url=https%3A%2F%2Fgithub.com' \
  --header 'X-RapidAPI-Host: web-metadata-and-contact-extractor.p.rapidapi.com' \
  --header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY_HERE'

📦 クライアントライブラリ

Python では、requests を直接呼び出すより公式クライアントをおすすめします。同じ 11 個のエンドポイントを利用でき、型付き例外に対応しているほか、同期クライアントと非同期クライアントの両方が用意されています。

pip install webmetadata-extractor
from webmetadata_extractor import WebMetadataClient

client = WebMetadataClient(api_key="YOUR_RAPIDAPI_KEY_HERE")
data = client.extract("https://github.com")

ターミナルを使う場合は、同じパッケージで web-inspect CLI もインストールできます(または Homebrew から単体で入手できます。Python は不要です)。

brew tap josejux/webmetadata && brew install web-inspect   # or: pip install webmetadata-extractor

web-inspect example.com --security
web-inspect example.com --markdown > article.md

エージェントを構築していますか? よく使われる 3 つのフレームワーク向けにツールパッケージが用意されています。いずれも、エージェントにすぐ渡せるツール(extract、markdown/reader、contacts、seo_audit)が含まれています。

pip install langchain-webmetadata-extractor    # LangChain / LangGraph
pip install crewai-webmetadata-extractor       # CrewAI
pip install llamaindex-webmetadata-extractor   # LlamaIndex (reader + tools)
from langchain_webmetadata_extractor import get_tools

tools = get_tools(api_key="YOUR_RAPIDAPI_KEY_HERE")

LlamaIndex には、RAG への取り込み用に専用の WebMarkdownReader も用意されています(URL をエージェントのツール呼び出しに使うだけでなく、直接 Document に読み込みます)。

from llamaindex_webmetadata_extractor import WebMarkdownReader

documents = WebMarkdownReader(api_key="YOUR_RAPIDAPI_KEY_HERE").load_data(["https://example.com"])

4 つのパッケージはすべて MIT ライセンスのオープンソースです:webmetadata-extractor、langchain-webmetadata-extractor、crewai-webmetadata-extractor、llamaindex-webmetadata-extractor。

コードスニペットではなく、実際に動作する完全な例をお探しですか? これらのパッケージを使った 3 つの実用的なワークフロー(CrewAI による競合分析、クリーンな Markdown を取り込む LlamaIndex RAG パイプライン、実際の変化があった場合にのみ通知する LangGraph の価格・在庫モニター)を agent-cookbooks/ でご覧ください。

何もインストールせずに試してみたいですか? Hugging Face Spaces のライブデモで URL を貼り付けると、ブラウザーで完全なレスポンスを確認できます。


🤖 MCP / AI エージェントのサポート

この API は、RapidAPI のホスト型ゲートウェイを通じて、すぐに使える MCP サーバーとして利用できます。追加のセットアップやセルフホストは不要です。Claude Desktop、Claude Code、Cursor、または MCP 対応クライアントに追加してください。

{
  "mcpServers": {
    "RapidAPI Hub - Web Metadata and Contact Extractor": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.rapidapi.com",
        "--header",
        "x-api-host: web-metadata-and-contact-extractor.p.rapidapi.com",
        "--header",
        "x-api-key: YOUR_RAPIDAPI_KEY_HERE"
      ]
    }
  }
}

接続すると、エージェントは抽出ツールを直接呼び出せます。たとえば、RAG パイプラインに markdown_content を取り込んだり、自律型の調査・アウトリーチワークフローの一環として detected_technologies や seo_score_percentage を確認したりできます。まずはRapidAPI の掲載ページから無料のキーを取得してください。


🧩 Dify、Flowise、または Langflow での使用

いずれもプラグインのインストールは不要です。ビジュアルエージェントビルダーから、この API を直接呼び出せます。

Dify または Flowise なら、約 60 秒で設定できます: どちらも、OpenAPI スキーマからカスタムツールを直接インポートできます。RapidAPI の掲載ページから無料のキーを取得してから、次の手順に進みます。

  1. Dify:ツール → カスタムツール → OpenAPI から作成。Flowise:「OpenAPI Toolkit」ノードを追加し、スキーマを指定します。
  2. dify-flowise-openapi.json を貼り付けます。これは、RapidAPI ゲートウェイ経由で呼び出すように事前設定された、完全な API の 3 エンドポイント(extract、markdown、schema)をまとめたものです。
  3. ツールの認証設定で、ヘッダー X-RapidAPI-Key に取得したキーを設定します。X-RapidAPI-Host は仕様内ですでに適切な値に固定されているため、ほかに設定は不要です。

これら 3 つ以外のエンドポイントが必要ですか?完全な OpenAPI 仕様には 11 個すべてが含まれています。同じ手順でインポートし、代わりにその URL を指定して、同じ 2 つのヘッダーを追加してください。

Langflow: 上記の設定が済んでいれば、追加のセットアップは不要です。Langflow は MCP にネイティブ対応しています(v1.8.4 以降、クライアントとサーバーの両方に対応)。MCP Tools コンポーネントを追加し、上記の「MCP / AI エージェント対応」セクションに記載されているのと同じ x-api-host / x-api-key ヘッダーを使用して https://mcp.rapidapi.com に接続すると、すべてのエンドポイントがツールとして表示されます。


📊 API レスポンスのサンプル(JSON)

メモ

これは、2026-08-11 に取得した GET /api/v1/extract?url=https://github.com の実際のライブ出力であり、手作業で編集した例ではありません。見栄えのよくない部分も含め、意図的に整形していません。detected_technologies には、ほぼ間違いなく Contentful を利用していないページで "Contentful" が含まれています(下記の technology_details を参照してください。根拠は og:image の URL にある CDN ホスト名ひとつだけなので、信頼度は 0.98 ではなく 0.75 です)。また、GitHub のホームページは JavaScript を多用したシェルで、初期 HTML にこの API が検出できる <article> のようなコンテンツがないため、markdown_content と word_count は空で返されます。どちらも下記の「正直な制限事項」が実際に表れたものであり、この例で問題を取り繕っているわけではありません。social_links には合計 20 個のキーがあります(上記の主な機能の表を参照してください)。読み取る価値があるのは null でないものだけなので、長さを抑えるため、ここでは省略しています。実際のレスポンスには 20 個すべてが含まれます。

{
  "url": "https://github.com",
  "final_url": "https://github.com",
  "status_code": 200,
  "execution_time_ms": 130.43,
  "bot_protection_detected": false,
  "metadata": {
    "title": "GitHub · Change is constant. GitHub keeps you ahead. · GitHub",
    "description": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
    "og_image": "https://images.ctfassets.net/8aevphvgewt8/4pe4eOtUJ0ARpZRE4fNekf/f52b1f9c52f059a33170229883731ed0/GH-Homepage-Universe-img.png",
    "og_type": "object",
    "canonical_url": "https://github.com",
    "language": "en",
    "favicon": "https://github.githubassets.com/favicons/favicon.svg",
    "theme_color": "#1e2327",
    "hreflang_tags": [
      {"lang": "en-us", "url": "https://github.com"},
      {"lang": "pt-br", "url": "https://github.com?locale=pt-br"}
    ],
    "h1_tags": [],
    "links_count": 51,
    "content_length_bytes": 109075
  },
  "social_links": { "github": "https://github.com/features/copilot", "twitter": null, "linkedin": null, "...": "17 more platforms, all null here" },
  "contacts": { "emails": [], "phones": [] },
  "detected_technologies": ["Contentful"],
  "technology_details": [
    { "name": "Contentful", "confidence": 0.75, "evidence": ["ctfassets.net"], "category": "cms" }
  ],
  "product_data": null,
  "quality": {
    "score": 0.85,
    "rendered": false,
    "sources_used": ["meta"],
    "warnings": [{ "field": null, "type": "CONTENT_TRUNCATED" }]
  },
  "rss_feeds": ["https://github.com/opensearch.xml", "https://github.githubassets.com/favicons/favicon.svg"],
  "json_ld_schemas": [],
  "security_score_percentage": 64.2,
  "seo_score_percentage": 75.0,
  "seo_passed_checks": ["Title tag present with optimal length (10-70 chars)", "Canonical link tag present", "OpenGraph image present for social sharing", "Favicon icon present"],
  "seo_warnings": ["Meta description present but sub-optimal length (186 chars)", "Missing <h1> primary heading", "No structured data (JSON-LD) found"],
  "internal_links": ["https://github.com/", "https://github.com/login", "https://github.com/features/copilot"],
  "total_internal_count": 44,
  "total_external_count": 5,
  "word_count": 0,
  "reading_time_minutes": 0.0,
  "markdown_content": ""
}

このレスポンスは、MetadataResponse(app/models/responses.py)をシリアライズし、長さを抑えるために一部を省略したものです。上記に表示されているフィールドはすべて実際のものです。モデルのフィールドのうち、表示されていないものが 4 つあります。phone_details と product_field_confidence(このページには電話番号も product_data もないため、どちらもここでは空です)、seo_checks(上記にすでに表示されている seo_passed_checks/seo_warnings をチェックごとに構造化したもの)、そして external_links(total_external_count によると URL は 5 個で、internal_links が途中で省略されているのと同様に省略されています)です。トップレベルに content_truncated/bytes_downloaded はありません。その情報は quality.warnings 内にあります。

v4.0.0 以降、metadata には viewport、twitter_card、h1_count も含まれます。また、/api/v1/tech-stack は technology_details(信頼度スコア、一致した根拠、テクノロジーごとのカテゴリ)を追加で返し、product_data(存在する場合)には sku、mpn、gtin/isbn、seller、condition、価格帯のフィールドが含まれます。追加はすべて既存フィールドへの影響がない形で行われており、既存のフィールドが削除されたり、型が変更されたりすることはありません。以前は型が指定されていなかった Dict/List[Dict] のデータ(metadata、technology_details、seo_checks、phone_details)には、OpenAPI スキーマにドキュメント化された Pydantic モデルが追加されました。また、ここでは表示されていたにもかかわらず、以前は /api/v1/extract に含まれていなかった product_data が、実際に返されるようになりました。さらに、product_field_confidence とトップレベルの quality オブジェクトも追加されています。たとえば、JSON-LD が €39.99、OpenGraph が €29.99 を示すページでは、次のようになります。"product_field_confidence": {"price": {"value": "39.99", "confidence": 0.5, "source": "json_ld", "agreement": ["json_ld", "microdata", "opengraph"]}} および "quality": {"score": 0.9, "rendered": false, "sources_used": ["json_ld", "microdata", "opengraph", "meta"], "warnings": [{"field": "product.price", "type": "SOURCE_CONFLICT", "values": {"json_ld": "39.99", "microdata": "39.99", "opengraph": "29.99"}, "chosen_source": "json_ld", "chosen_value": "39.99"}]}。

最新の追加機能:すべてのエンドポイントのレスポンスに redirect_count(final_url に到達するまでにたどった HTTP リダイレクトの回数)と is_shortened_url(渡された URL が final_url ではなく bit.ly などの既知の URL 短縮ドメインにある場合は true)が含まれるようになりました。/api/v1/seo-audit と /api/v1/extract には、readability オブジェクト(sentence_count、paragraph_count、avg_words_per_sentence、heading_structure)が追加されています。新しいエンドポイントも 3 つあります。POST /api/v1/batch(最大 10 個の URL を対象に、URL ごとに軽量なリンクプレビューを抽出)、GET /api/v1/domain(ページを取得せずに DNS/WHOIS を照会)、/api/v1/security?include_tls_details=true(既定では無効の、オプトイン方式によるライブ TLS 証明書の検査)です。すべて追加のみで、既存フィールドの形や型は変更されていません。

さらに、/api/v1/security(および /api/v1/extract の security_headers)は Content-Security-Policy-Report-Only を、欠落として扱うのではなく、独自の "report-only" グレードとして検出するようになりました。また、グレードが付与されたすべてのヘッダーに、重要な理由を説明する security_header_explanations エントリが含まれるようになりました。

📖 API エンドポイントのドキュメント

エンドポイントメソッド説明
/api/v1/extractGET完全なペイロード — SEO、連絡先、ソーシャル、技術スタック、スキーマ、セキュリティ、AI 向け Markdown、SEO 監査、リンク、製品データ。fields フィルターに対応しています。
/api/v1/link-previewGETソーシャルリンクのプレビューカード — タイトル、説明、OG 画像、ファビコン、サイト名、言語。
/api/v1/contactsGET連絡先の検出 — ページ上で見つかった公開メールアドレス、電話番号、ソーシャルプロフィール(リード獲得ワークフロー向けの生シグナルであり、リードエンリッチメントそのものではありません。「正直な制限事項」を参照)。
/api/v1/tech-stackGETフレームワークと CMS の検出 — 40 種類以上の技術シグネチャ。
/api/v1/schemaGETSchema.org JSON-LD パーサー — 製品価格、記事、イベント、組織。
/api/v1/securityGETセキュリティヘッダー監査 — HSTS、CSP、X-Frame-Options、Referrer Policy とパーセンテージスコア。
/api/v1/markdownGETAI と LLM 向け Markdown リーダー — 整形済みの記事テキスト、単語数、読了時間。
/api/v1/seo-auditGET自動 SEO 診断 — 警告リスト付きの 14 項目の監査スコアに加え、構造化された checks(各チェックの重要度/証拠)と readability の内訳(文/段落の数、文あたりの平均単語数、h1-h6 の見出し構造全体)。
/api/v1/linksGETリンク分類 — 内部と外部のハイパーリンク(1 ページあたり最大 100 件)。
/api/v1/batchPOSTURL の一括処理 — 1 回のリクエストで最大 10 個の URL のリンクプレビューを軽量に抽出します(JSON ボディ {"urls": [...]})。各 URL は個別に取得されるため、1 件の失敗がほかに影響することはありません。
/api/v1/domainGETDNS/WHOIS ドメイン情報 — 対象ホスト名の A/AAAA/MX/NS/TXT レコードに加え、レジストラ/作成日/有効期限の WHOIS データ。ページ自体は取得しません。
/healthGETヘルスチェック — ステータス、バージョン、保護モード。
/health/detailsGET運用状態のヘルスチェック — Redis モード/ステータス、trust-proxy 設定。HEALTH_DETAILS_SECRET が設定されている場合は、X-Health-Secret が必要です。
/health/readyGETレディネスプローブ — HTTP クライアントの初期化後は 200、起動中は 503 を返します。
/metricsGETPrometheus のスクレイプ対象 — リクエスト/キャッシュ/SSRF/サーキットブレーカー/レート制限のカウンターとレイテンシーヒストグラム。デフォルトでは公開されています(標準的な Prometheus の運用方法に従い、ネットワーク/プロキシレベルで保護してください)。ポートがインターネットからアクセス可能で、前段にネットワークレベルの制御がない環境でセルフホストする場合は、代わりに METRICS_SECRET を設定して X-Metrics-Secret ヘッダーを必須にできます。公開 OpenAPI スキーマには表示されません。
クエリパラメーター
パラメーター型必須説明
urlstringはい対象 URL(例:https://example.com)。スキームのない入力は自動的に正規化されます。JSON ボディ({"urls": [...]})を使用する /api/v1/batch では使用しません。
fieldsstringいいえカンマ区切りのレスポンスフィルター(例:metadata,contacts)。/api/v1/extract 専用です。
user_agentstringいいえカスタム User-Agent ヘッダー文字列。
include_tls_detailsbooleanいいえ/api/v1/security 専用です。ライブ TLS ハンドシェイクをオプトインで実行し、証明書の発行者/サブジェクト/有効期間/ネゴシエートされた TLS バージョンを tls_details として返します。デフォルトでは無効(false)で、通常のヘッダーのみの監査に加えてネットワークの往復が発生します。

🔧 セルフホスティングとローカル開発

# 1. Clone
git clone https://github.com/JosejuX/rapidapi-metadata-extractor.git
cd rapidapi-metadata-extractor/rapidapi_service

# 2. Install
pip install -r requirements.txt

# 3. Fixture-based test suite (SSRF matrix, circuit breaker, single-flight, rate-limit atomicity, ...)
pip install pytest
pytest tests/ -q

# 3b. Live-network smoke suite (14 SSRF vectors + 12 global domains)
python test_api.py

# 4. Load test (concurrent requests benchmark)
python load_test.py

# 5. Dev server
uvicorn main:app --reload --port 8000

インタラクティブな Swagger UI を利用するには、http://localhost:8000/docs を開いてください。

Docker
# Pull the published image (built + pushed by .github/workflows/docker-publish.yml on every version tag)
docker pull ghcr.io/josejux/rapidapi-metadata-extractor:latest
docker run -p 8000:8000 ghcr.io/josejux/rapidapi-metadata-extractor:latest

# Or build it yourself
cd rapidapi_service
docker build -t rapidapi-metadata-extractor .
docker run -p 8000:8000 rapidapi-metadata-extractor

🏷️ キーワード

metadata-extractor • opengraph-parser • email-scraper • contact-extractor • social-links-finder • tech-stack-detector • seo-parser • fastapi • rapidapi • python-web-scraper • link-preview-generator • lead-generation-api • hreflang • schema-org • product-data-extractor • ssrf-protection


🤝 開発への協力

この API は、人間による設計、レビュー、テストの判断と並行して、AI コーディングアシスタントである Google の Gemini 3.6 Flash と Anthropic の Claude Sonnet 5 と協力しながら開発・改良されました。


📄 ライセンス

MIT License の下で配布されています。詳しくは LICENSE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。