メインコンテンツへスキップ
Web サイトモニターは、固定された URL のリストではなく、サイト全体を対象にします。各チェックでは対象の url に対してクロールを実行し、検出されたすべてのページをスクレイピングしたうえで、その結果を直近で保持されたスナップショットと照合します。これにより、あらかじめ指定したページへの編集だけでなく、追加・変更・削除されたページも検知できます。ドキュメントサイト、ブログ、更新履歴、ヘルプセンター、競合他社のサイトには最適な選択肢です。 このページでは crawl ターゲットを扱います。スケジューリング、ゴールと判定、変更追跡、通知、料金は、すべてのモニタータイプで共通です。モニターの概要 を参照してください。
終了: /monitor フィードバック報酬

報酬の対象となるすべてのインタビュー参加者には、すでにご連絡しています。今後の報酬キャンペーンはドキュメント内でご確認ください!

Web サイトモニターを作成する

各チェック時にクロールで検出されたすべてのページの差分を取得するには、crawl ターゲットを持つモニターを作成します。
from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

monitor = firecrawl.create_monitor(
    name="Docs monitor",
    schedule={"cron": "7-59/15 * * * *", "timezone": "UTC"},
    goal="Notify me when docs pages add, remove, or materially change API behavior",
    targets=[
        {
            "type": "crawl",
            "url": "https://example.com/docs",
            "crawlOptions": {
                "limit": 100,
                "maxDiscoveryDepth": 3,
            },
        }
    ],
    webhook={
        "url": "https://example.com/webhooks/firecrawl",
        "events": ["monitor.page", "monitor.check.completed"],
    },
)

print(monitor.id)
import Firecrawl from "@mendable/firecrawl-js";

const firecrawl = new Firecrawl({ apiKey: "fc-YOUR-API-KEY" });

const monitor = await firecrawl.createMonitor({
  name: "Docs monitor",
  schedule: { cron: "7-59/15 * * * *", timezone: "UTC" },
  webhook: {
    url: "https://example.com/webhooks/firecrawl",
    events: ["monitor.page", "monitor.check.completed"],
  },
  goal: "Notify me when docs pages add, remove, or materially change API behavior",
  targets: [
    {
      type: "crawl",
      url: "https://example.com/docs",
      crawlOptions: {
        limit: 100,
        maxDiscoveryDepth: 3,
      },
    },
  ],
});

console.log(monitor.id);
curl -s -X POST "https://api.firecrawl.dev/v2/monitor" \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Docs monitor",
    "schedule": {
      "cron": "7-59/15 * * * *",
      "timezone": "UTC"
    },
    "webhook": {
      "url": "https://example.com/webhooks/firecrawl",
      "events": ["monitor.page", "monitor.check.completed"]
    },
    "goal": "Notify me when docs pages add, remove, or materially change API behavior",
    "targets": [
      {
        "type": "crawl",
        "url": "https://example.com/docs",
        "crawlOptions": {
          "limit": 100,
          "maxDiscoveryDepth": 3
        }
      }
    ]
  }'

クロールターゲット

crawl ターゲットでは、type と 1 つの url が必要です。クロールの挙動は crawlOptions、検出された各ページをどのようにスクレイピングするかは scrapeOptions で指定します。
Crawl target
{
  "type": "crawl",
  "url": "https://example.com/docs",
  "crawlOptions": {
    "limit": 100,
    "includePaths": ["/docs"]
  },
  "scrapeOptions": {
    "formats": ["markdown"]
  }
}
一般的な crawlOptions フィールド:
  • limit: 1 回のチェックでクロールするページの最大数。
  • maxDiscoveryDepth: 開始 url から何リンク先までページを検出するか。
  • maxDepth: クロールの最大深度。
  • includePaths: これらのパスパターンに一致する URL のみをモニターします (例: /docs) 。
  • excludePaths: これらのパスパターンに一致する URL はスキップします。
ページ モニターと同様に、モニターによってトリガーされるスクレイピングでは maxAge のデフォルト値が 0 になるため、scrapeOptions で別の maxAge を設定しない限り、各チェックで検出されたページは毎回新たにスクレイピングされます。

各チェックで報告される内容

クロールチェックでは、検出されたすべてのページを前回のチェック結果と照合し、ページごとのステータスを記録します。
  • same: ページが再度検出され、変更はありませんでした。
  • changed: ページが再度検出され、変更がありました。
  • new: ページが初めて検出されました。
  • removed: 前回のチェックで検出されたページが、今回は検出されませんでした。
  • error: ページをチェックできませんでした。
クロールされたページ全体の特定の構造化フィールドに対してアラートを出すには、scrapeOptionschangeTracking フォーマットを追加してください。変更追跡 を参照してください。

共通の構成

  • スケジュール: cron または自然言語で設定する実行間隔。最短 5 分です。
  • ゴールと判定: 意味のある変更があった場合にのみ通知します。
  • 通知: webhook とメールで配信します。
  • チェック結果: 各チェックとページごとの差分を確認できます。
  • 料金: チェックごとに、検出された各ページにつき 1 クレジットを消費し、これに加えて任意の判定分が発生します。