"""Bayer seeds scraper — DEKALB (corn) + Asgrow (soy) + WestBred (wheat). Source: ``cropscience.bayer.us`` — same Next.js + ``__NEXT_DATA__`` infrastructure used by crop-chem-docs' Bayer crop-protection scraper. That scraper is the reference; this one lifts ~80% of its plumbing and adapts the per-product field mapping for seed schema. Catalog index pages: /corn/dekalb/seed-catalog /soybeans/asgrow/seed-catalog /wheat/westbred/seed-catalog Each catalog page is a Next.js route; the per-variety data lives in ``__NEXT_DATA__.props.pageProps.{whatever}``. The buildId in the script tag rotates — fetch the index page first, extract the buildId, then fetch the per-variety JSON. Output layout: corpus/bayer_seeds/.md LLM-visible body corpus/bayer_seeds/.json Sidecar metadata source_key convention: ``-`` lowercased, e.g. ``dekalb-dkc62-08rib`` or ``asgrow-ag34xf2``. Sidecar schema (per CLAUDE.md): source: "bayer_seeds" source_key: str vendor: "Bayer" brand: "DEKALB" | "Asgrow" | "WestBred" product_name: str crop: "corn" | "soybeans" | "wheat" relative_maturity: int | null # corn only maturity_group: float | null # soy only wheat_class: str | null # wheat only trait_stack: list[str] agronomic_ratings: dict[str, int] # normalized 1-9 (9 = best) disease_ratings: dict[str, int] # normalized 1-9 (9 = best) regional_recommendation: list[str] source_urls: list[str] fetched_at: str (ISO 8601 UTC) TODO: implement. Reference: ~/github/crop-chem-docs/scrape/sources/bayer.py """ from __future__ import annotations import sys def main(argv: list[str] | None = None) -> int: print("bayer_seeds: not implemented yet — see ~/github/crop-chem-docs/scrape/sources/bayer.py for the reference Next.js extraction pattern", file=sys.stderr) return 2 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))