SPB Git forge
38commits 1branches 0releases
338.7 MBsize
maindefault branch
3 h agolast push
HTML 53.9% TypeScript 44.5% JavaScript 0.6% SQL 0.5%
3.8 KB · 40 lines markdown
Rendered Raw Blame History
1# equinix — Equinix IBX data centers23| | |4|---|---|5| Config | `config/connectors/equinix.yaml` |6| Parser | `apps/worker/src/connectors/operators1/equinix.ts` → `equinix_facility_v1` |7| Kind / priority | operator / 1 |8| License / attribution | Publicly accessible operator pages; factual data only; © Equinix, Inc. |9| Cadence | facility pages weekly · index monthly · sitemap weekly |1011## What is crawled12- Sitemap `https://www.equinix.com/sitemap-core.xml` (the `/sitemap.xml` index also lists `sitemap-resources.xml` and `sitemap-prs.xml`; the latter returns HTML, not XML).13- Facility pages: `/data-centers/<region>-colocation/<country>-colocation/<metro>-data-centers/<code>` (code = `[a-z]{2,3}\d{1,2}[a-z]?`, e.g. `dc2`, `fr5`, `ty11`). Metro / country / region pages are `index`.14- **Newsroom: disabled.** Press releases live on `newsroom.equinix.com` (RSS `https://newsroom.equinix.com/press-releases-global?pagetemplate=rss`, articles `/YYYY-MM-DD-<slug>`). Those pages are served normally (HTTP 200, ~20 KB of text) but embed Cloudflare's `/cdn-cgi/challenge-platform/` beacon, which the shared `looksBlockedOrEmpty()` heuristic in `packages/connectors/src/fetchers.ts` treats as a bot wall → each article escalated to Scrapfly (30 credits each; 120 credits burnt in the first dry run). The feed is commented out in the YAML until that heuristic only fires on short pages.1516## Access17`www.equinix.com` is behind Akamai: the bot UA gets 403, the browser identity (L2, still direct HTTP, 0 credits) is served in full. `fetch.level: 1`, `maxLevel: 4` — L2 is enough for every IBX page tested; Scrapfly is never reached. `maxCreditsPerRun: 60`. robots.txt: `Allow: /`, `Disallow: /content/dam/eqxcorp/*` (not crawled).1819## Fields (method)20- `code` ← JS constant `const title = "DC2"` in the map script (`js-var:title`); `name` ← `h1#hero-banner-heading` ("Washington DC DC2").21- `address`, `city`, `postalCode`, `countryIso2` ← `const address1/address2/city/postalCode/country` (country name → ISO-2 via `countryFromText`).22- `regionName` ← US state in the meta description ("…, Ashburn, VA.") — US only.23- `lat`/`lng` ← `const latitude/longitude` (unicode-escaped, decoded) → `geo.precision = exact` (operator marker).24- `certifications` ← "Certified to global standards" list (HECVAT, HIPAA, ISO 22301/27001/9001, NIST 800-53/FISMA High, PCI DSS, SOC 1/2 Type II …).25- `renewableClaim` ← the REC/renewable bullet of the "Sustainability" spec row.26- `facilityType` ← `const ibxType` (`IBX` → colocation, `xScale` → hyperscale). `status` ← "coming soon / under construction" only when stated in the hero; default operational.27- `description` ← meta description + "Colocation space: 11,004 m² (118,446 ft²). Power redundancy: N+1. UPS redundancy: N+1." Colocation (white) space is **not** stored as `buildingSqm` (it is not the building footprint).28- Not published per IBX: MW capacity, PUE, rack count → left null (nothing invented).29- Key `equinix:<CODE>`; `externalIds.equinix_ibx`.3031## Verification (2026-09-11)32- Discovery: 398 URLs → `facility_pages=265`, `index=133` (sitemap-core has 403 `/data-centers/` URLs: 276 IBX-shaped, of which 265 pass classify; the rest are metro/country/region pages).33- `--url` DC2: `Washington DC DC2`, 21715 Filigree Court, Ashburn, VA 20147, US, geo 39.01679/-77.46054, 9 certifications, renewable claim "2025: Wind RECs from Texas and Oklahoma vPPAs…" — matches the live page.34- `--url` FR5: `Frankfurt FR5`, Kleyerstrasse 90, 60326 Frankfurt, DE, geo 50.09842/8.63239.35- Sweep of 8 spread IBX pages (AT1, NY2, DC12, TR6, FR4, AM11, LD3, HK2): 8/8 valid, 0 rejected, all with address + coordinates. Credits: 0 (L2).3637## Gaps / TODO38- Newsroom off (see above) — re-enable the RSS line once the fetcher heuristic is fixed.39- `regionName` only for US sites; MW never published.40