Autenticación y límites de uso
URL base
Todas las solicitudes usan esta URL base:
https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/CalHeatScore_Live_Data_for_API_Use/FeatureServer/0
Añada /query (consulta) y sus parámetros de consulta para obtener datos de los puntajes de calor.
https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query?where=1=1&outFields=*&returnGeometry=false&f=json
Autenticación
No se necesita autenticación. La API es abierta y con acceso de solo de lectura —no puede modificar, crear o eliminar datos.
| Requisito | Detalles |
|---|---|
| Clave de API | No se requiere |
| Token OAuth | No se requiere |
| Cuenta | No se requiere |
| Acceso | Solo lectura (solo operaciones de query (consulta)) |
Como no se requiere autenticación, no incluya credenciales sensibles en sus solicitudes. No es necesario incluir encabezados de Authorization (Autorización) o parámetros de token.
Límites de uso
La API de CalHeatScore está alojada en ArcGIS Online, que aplica límites de uso justo a los servicios públicos de entidades. Aunque no se publican umbrales específicos, siga estas pautas para evitar que se restrinjan sus solicitudes:
Límites por solicitud:
| Restricción | Valor |
|---|---|
| Cantidad máximas de registros por respuesta | 2,000 |
| Formatos de respuesta admitidos | JSON, GeoJSON, PBF |
| Máximo de respuestas concurrentes | No publicado —manténgase por debajo de las 10 solicitudes simultáneas |
Cada registro representa los datos para un código postal de California. Nuestro conjunto de datos contiene 1,721 códigos postales.
Recomendaciones para mantenerse dentro de los límites:
- Solicite solo los campos que necesita. Use
outFieldspara especificar los campos, en lugar deoutFields=*. Esto reduce el tamaño de la respuesta y la carga del servidor. - Deshabilite la geometría cuando no la necesita. Seleccione
returnGeometry=falsesi solo necesita datos de atributos. Las coordinadas del polígono aumentan significativamente el tamaño de la respuesta. - Almacene las respuestas en caché de manera local. Los puntajes de calor se actualizan una vez al día. Guarde los resultados en caché y actualícelos una vez por día en lugar de consultar la API en cada carga de página.
- Pagine las solicitudes grandes. Use
resultRecordCountyresultOffseten lugar de solicitar todos los registros juntos.
Formatos de respuesta
Configure el parámetro f para controlar el formato de respuesta.
JSON (predeterminado)
Use f=json para JSON estándar. Mejor para la mayoría de las integraciones de aplicaciones.
curl "https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query?where=ZIP_CODE='90210'&outFields=ZIP_CODE,CHS_Day_0&returnGeometry=false&f=json"
import requests
BASE_URL = (
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/"
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query"
)
params = {
"where": "ZIP_CODE='95814'",
"outFields": "ZIP_CODE,CHS_Day_0",
"returnGeometry": "false",
"f": "json",
}
response = requests.get(BASE_URL, params=params)
data = response.json()
if "error" in data:
print(f"Error: {data['error']['message']}")
else:
for feature in data["features"]:
attrs = feature["attributes"]
print(f"ZIP {attrs['ZIP_CODE']}: score = {attrs['CHS_Day_0']}")
const baseUrl =
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/" +
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query";
const params = new URLSearchParams({
where: "ZIP_CODE='95814'",
outFields: "ZIP_CODE,CHS_Day_0",
returnGeometry: "false",
f: "json",
});
fetch(`${baseUrl}?${params}`)
.then((res) => res.json())
.then((data) => {
if (data.error) {
console.error(`Error: ${data.error.message}`);
return;
}
data.features.forEach((feature) => {
const attrs = feature.attributes;
console.log(`ZIP ${attrs.ZIP_CODE}: score = ${attrs.CHS_Day_0}`);
});
})
.catch((err) => console.error("Request failed:", err));
GeoJSON
Use f=geojson para GeoJSON. Mejor para las bibliotecas de creación de mapas como Leaflet, Mapbox y D3.
curl "https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query?where=ZIP_CODE='95814'&outFields=ZIP_CODE,CHS_Day_0&outSR=4326&f=geojson"
import requests
BASE_URL = (
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/"
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query"
)
params = {
"where": "ZIP_CODE='95814'",
"outFields": "ZIP_CODE,CHS_Day_0",
"outSR": "4326",
"f": "geojson",
}
response = requests.get(BASE_URL, params=params)
geojson = response.json()
if "error" in geojson:
print(f"Error: {geojson['error']['message']}")
else:
for feature in geojson["features"]:
props = feature["properties"]
coords = feature["geometry"]["coordinates"][0][0]
print(f"ZIP {props['ZIP_CODE']}: score = {props['CHS_Day_0']}, first coord = {coords}")
const baseUrl =
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/" +
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query";
const params = new URLSearchParams({
where: "ZIP_CODE='95814'",
outFields: "ZIP_CODE,CHS_Day_0",
outSR: "4326",
f: "geojson",
});
fetch(`${baseUrl}?${params}`)
.then((res) => res.json())
.then((geojson) => {
if (geojson.error) {
console.error(`Error: ${geojson.error.message}`);
return;
}
geojson.features.forEach((feature) => {
const props = feature.properties;
console.log(`ZIP ${props.ZIP_CODE}: score = ${props.CHS_Day_0}`);
});
})
.catch((err) => console.error("Request failed:", err));
PBF (Protocol Buffers)
Use f=pbf para Protocol Buffers. Mejor para aplicaciones de alto rendimiento que necesitan un tamaño de respuesta mínimo. Requiere un decodificador PBF para interpretar la respuesta binaria.
curl "https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query?where=ZIP_CODE='95814'&outFields=ZIP_CODE,CHS_Day_0&returnGeometry=false&f=pbf" --output response.pbf
import requests
BASE_URL = (
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/"
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query"
)
params = {
"where": "ZIP_CODE='95814'",
"outFields": "ZIP_CODE,CHS_Day_0",
"returnGeometry": "false",
"f": "pbf",
}
response = requests.get(BASE_URL, params=params)
# Save binary PBF response to a file
with open("response.pbf", "wb") as f:
f.write(response.content)
print(f"Saved {len(response.content)} bytes to response.pbf")
const baseUrl =
"https://services1.arcgis.com/PCHfdHz4GlDNAhBb/arcgis/rest/services/" +
"CalHeatScore_Live_Data_for_API_Use/FeatureServer/0/query";
const params = new URLSearchParams({
where: "ZIP_CODE='95814'",
outFields: "ZIP_CODE,CHS_Day_0",
returnGeometry: "false",
f: "pbf",
});
// Node.js: save binary PBF response to a file
const fs = require("fs");
fetch(`${baseUrl}?${params}`)
.then((res) => res.arrayBuffer())
.then((buffer) => {
fs.writeFileSync("response.pbf", Buffer.from(buffer));
console.log(`Saved ${buffer.byteLength} bytes to response.pbf`);
})
.catch((err) => console.error("Request failed:", err));
Manejo de errores
La API devuelve los errores como objetos JSON con un array de code (código), message (mensaje) y details (detalles). Errores comunes:
| Estado de HTTP | Código de error | Causa | Reparación |
|---|---|---|---|
| 200 (con cuerpo del error) | 400 |
SQL inválido en la cláusula where (dónde) |
Compruebe la sintaxis de su SQL. Los valores de tipo cadena deben ir entre comillas simples (ZIP_CODE='90210' no ZIP_CODE=90210) |
| 200 (con cuerpo del error) | 400 |
Nombre del campo inválido en outFields |
Verifique que los nombres de los campos coincidan exactamente: ZIP_CODE, CHS_Day_0, etc. (distingue mayúsculas y minúsculas) |
| 200 (con cuerpo del error) | 500 |
Error del servidor | Vuelva a intentarlo después de unos segundos. Si el error persiste, es posible que el servicio no esté disponible temporalmente |
Los servicios de entidades de ArcGIS devuelven un código HTTP 200 aun para errores — el error está en el cuerpo de la respuesta. Verifique siempre si existe una propiedad de error en la respuesta JSON antes de procesar los resultados.
{
"error": {
"code": 400,
"message": "Unable to complete operation.",
"details": [
"Invalid or unsupported SQL clause."
]
}
}