技术博客
免费地震信息:免费额度下的缓存与调用频率最佳实践

免费地震信息:免费额度下的缓存与调用频率最佳实践

作者: 万维易源
2026-09-03
地震信息缓存频率免费额度
# 免费地震信息:免费额度下的缓存与调用频率最佳实践 - **接口/接入点**:免费地震信息 · 2274-1 - **是否免费**:是(注册即免费额度,有档位限制) - **请求方式**:POST / GET - **返回格式**:JSON - **适用人群**:已接入用户、生产环境开发者 - **阅读时间**:约 7 分钟 ## 核心要点 - 接口免费但有档位限制(具体档位以 [免费 API 说明](https://www.showapi.com/free-api) 为准,本文不编数字),生产环境必须控制调用频率。 - 历史地震数据「当天基本不变」,非常适合按「日期(+地区)」做本地缓存,命中即返、未命中才调接口。 - 客户端做令牌桶/简单 sleep 限频 + 失败指数退避,是稳妥的生产写法。 ## Why:免费不等于能随便刷 很多 demo 跑通后就直接上生产,结果用户每次刷新都打接口,几天把免费额度刷爆,接口开始限流。历史地震不是高频变化数据,合理的缓存与限频能让免费额度撑起一个不小的应用。 ## What:接口速览 | 项 | 值 | |----|----| | 接口地址 | `https://route.showapi.com/2274-1?appKey={your_appKey}` | | 计费 | 免费(档位限制见 [免费 API 说明](https://www.showapi.com/free-api)) | | 数据特性 | 历史地震,当日数据基本稳定,适合缓存 | ## How:本地缓存 + 限频的 Python 示例 ```python import requests, time, json, os from datetime import datetime, timedelta APP_KEY = "YOUR_APPKEY" URL = "https://route.showapi.com/2274-1" CACHE_DIR = "cache" os.makedirs(CACHE_DIR, exist_ok=True) _last_call = 0 MIN_INTERVAL = 1.0 # 两次调用最小间隔(秒),按你的档位调整 def cached_day(date_str, ttl_hours=24): path = f"{CACHE_DIR}/{date_str}.json" if os.path.exists(path): mtime = datetime.fromtimestamp(os.path.getmtime(path)) if datetime.now() - mtime < timedelta(hours=ttl_hours): return json.load(open(path, encoding="utf-8")) # 命中缓存 return None def fetch_day(date_str): global _last_call wait = MIN_INTERVAL - (time.time() - _last_call) if wait > 0: time.sleep(wait) _last_call = time.time() for attempt in range(3): try: r = requests.post(URL, params={"appKey": APP_KEY}, data={"date": date_str}, timeout=10) body = r.json().get("showapi_res_body", {}) if body.get("ret_code") == 0: json.dump(body, open(f"{CACHE_DIR}/{date_str}.json", "w", encoding="utf-8")) return body return body except Exception as e: time.sleep(2 ** attempt) # 指数退避 return None # 使用:先查缓存,未命中再请求 day = "20250120" data = cached_day(day) or fetch_day(day) ``` ## 返回示例与解析 缓存命中时直接读本地 JSON,不再消耗接口额度;未命中才请求并落盘。返回结构同 [返回字段全解](https://www.showapi.com/guides/earthquake-info-response-fields-2274)。 ## 进阶 / 边界 - **TTL 设定**:历史数据当日稳定,TTL 设 24 小时足够;「近期地震」(不传 date)更新更快,TTL 可缩短到 10~30 分钟。 - **缓存键设计**:以 `date` 为键;若做地区筛选,因 `area` 不可靠、`location` 是客户端过滤,缓存仍以 `date` 为键、过滤在读取后做。 - **限频参数**:`MIN_INTERVAL` 与重试次数按你的实际档位调整,本文不给出具体额度数字。 - **失败退避**:网络抖动时指数退避(1s→2s→4s)优于立即重试。 ## FAQ **Q1:免费额度到底能用多少次?** 具体档位限制以 [免费 API 说明](https://www.showapi.com/free-api) 为准,本文不编造数字;建议通过缓存把实际调用量降到最低。 **Q2:缓存会不会拿到过期数据?** 历史地震当日基本不变,24h TTL 风险极低。若你的场景要求「最新」,缩短 TTL 或不缓存「近期」查询即可。 **Q3:限频设多少合适?** 取决于你的档位。保守做法:单次循环请求间隔 ≥ 1 秒,并在服务端统一收敛多用户请求(如先查共享缓存),避免每个用户都直打接口。 **Q4:被限流了怎么办?** 先降低频率、加大缓存命中率;若仍不足,到控制台查看档位与升级选项。不要靠疯狂重试硬扛,会越限越狠。 ## 相关能力 / 下一步阅读 - [免费地震信息:date 与 area 参数使用指南(含实测筛选坑)](https://www.showapi.com/guides/earthquake-info-params-guide-2274) - [免费地震信息:科研取数——按日期批量导出震情做统计](https://www.showapi.com/guides/earthquake-info-research-dataset-2274) - [免费地震信息:做一个「全球近期地震」查询页(前端实战)](https://www.showapi.com/guides/earthquake-info-recent-quakes-app-2274) - **本系列共 14 篇**:查看[免费地震信息指南总目录](https://www.showapi.com/guides/earthquake-info-guides-2274)