技术博客
公众号/社群每日毒鸡汤推送:定时任务 + 去重设计

公众号/社群每日毒鸡汤推送:定时任务 + 去重设计

作者: 万维易源
2026-09-03
定时推送去重cron社群运营
# 公众号/社群每日毒鸡汤推送:定时任务 + 去重设计 > 接口/接入点:毒鸡汤生成(apiCode 2784,接入点 1) · 是否免费:免费(有使用档次限制) · 请求方式:POST/GET · 返回格式:JSON · 适用人群:自媒体运营、社群运营、后端开发 · 阅读时间:约 7 分钟 ## 核心要点 - 定时场景 = 定时触发器(cron)→ 调用接口 → 去重校验 → 推送到公众号/群机器人。 - **必须去重**:接口随机返回且无 ID,连发极易出现重复句,推送前一定要与上期/近期集合比对。 - 去重与频控可一并解决:缓存近期句子既避免重复,也减少不必要的重复调用。 ## Why:为什么定时推送要额外做去重 "每日一句毒鸡汤"是很自然的运营动作,但接口每次随机返回、且不返回可用于判重的 ID。如果不去重,用户可能连续两天收到同一句,体验打折。本篇给出一套可直接落地的定时 + 去重骨架。 ## What:接口速览 | 项目 | 说明 | |------|------| | 接口地址 | `https://route.showapi.com/2784-1` | | 入参 | 无 | | 返回关键字段 | `showapi_res_body.emposion` | | 超时 | 官方 5 秒 | | 注意 | 免费档位有频控,详见《免费档位下,如何控制毒鸡汤调用频次与成本?》 | ## How:定时 + 去重骨架(Python) 下面用本地文件做"近期去重集合"(生产可换成 Redis,见《随机返回的毒鸡汤如何避免重复?》)。 ```python import requests, hashlib, time, json, os API_URL = "https://route.showapi.com/2784-1" APP_KEY = "YOUR_APPKEY" CACHE_FILE = "recent_poison_soup.json" WINDOW = 30 # 近 30 条内不重复 def load_recent(): if not os.path.exists(CACHE_FILE): return [] return json.load(open(CACHE_FILE, encoding="utf-8")) def save_recent(recent): json.dump(recent, open(CACHE_FILE, "w", encoding="utf-8"), ensure_ascii=False) def fetch_one(): resp = requests.post( API_URL, params={"appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=5, ).json() return resp.get("showapi_res_body", {}) def get_unique_quote(max_try=5): recent = load_recent() recent_hashes = {hashlib.md5(q.encode("utf-8")).hexdigest() for q in recent} for _ in range(max_try): body = fetch_one() if body.get("ret_code") != 0: continue text = body.get("emposion", "") if not text: continue h = hashlib.md5(text.encode("utf-8")).hexdigest() if h not in recent_hashes: recent.append(text) if len(recent) > WINDOW: recent = recent[-WINDOW:] save_recent(recent) return text return recent[-1] if recent else "" # 兜底:极端情况允许重复 if __name__ == "__main__": quote = get_unique_quote() # 这里调用你的公众号/群机器人推送 API print("今日毒鸡汤:", quote) ``` 用 cron 每天定时跑这个脚本即可(例如 `0 9 * * *` 早 9 点)。 ## 返回示例 ```json { "showapi_res_body": { "ret_code": 0, "remark": "", "emposion": "别人有的,你迟早会有;你有的,别人迟早会没有。" } } ``` ## 进阶/边界 - **去重窗口**:窗口越大越不容易重复,但纯靠"多次调用避让"在内容池偏小时会频繁重试。窗口建议 20~50 条。 - **重试上限**:设 `max_try` 上限,避免极端情况死循环;兜底允许一次重复也好过推送失败。 - **频控**:每次"避让重试"都消耗调用额度,去重窗口不宜过大,平衡重复率与额度消耗。 - **推送失败**:推送通道(公众号/群机器人)自身也要有失败告警,别只盯接口。 ## FAQ **Q1:接口不是已经"每日更新"了吗,为什么还要去重?** "每日更新"是后端内容运营动作,不代表每次返回都不同,也不返回可用于判重的 ID。实际调用仍可能连续两天撞句,所以调用方需自建去重。 **Q2:去重一定要用 Redis 吗?** 不一定。低频定时推送用本地文件/数据库即可;高并发或多实例部署时才需要 Redis 这类共享存储,详见《随机返回的毒鸡汤如何避免重复?》。 **Q3:重复调用会不会很快耗尽免费额度?** 会。避让重试每次都计调用。请把去重窗口和 `max_try` 控制在合理范围,并参考《免费档位下,如何控制毒鸡汤调用频次与成本?》做额度预估。 ## 相关能力 / 下一步阅读 - [随机返回的毒鸡汤如何避免重复?](https://www.showapi.com/guides/poison-soup-dedup-2784) —— Redis 去重生产级写法 - [免费档位下,如何控制毒鸡汤调用频次与成本?](https://www.showapi.com/guides/poison-soup-free-tier-2784) —— 额度与频控 - [聊天机器人如何接入毒鸡汤?](https://www.showapi.com/guides/poison-soup-chatbot-2784) —— 另一种触发式场景 - **本系列共 14 篇**:查看[毒鸡汤生成接口官方指南总目录](https://www.showapi.com/guides/poison-soup-guides-2784)