reference-sync.py · 配置示例 · 开奖参数示例
先手动测试一个 ID,再设置每天执行。示例开奖数据必须替换为真实数据。
服务地址:https://shengtu.494499.xyz
本文档网页:https://shengtu.494499.xyz/integration.php
机器可读全文:https://shengtu.494499.xyz/integration.md
目标与兼容
在目标网站服务器每天执行一次任务,按指定图片 ID 请求生成 PNG,保存到目标网站的图片目录。例如 image_id=18ma 保存为 /www/wwwroot/YOUR-SITE/tu/18ma.png,网页引用 /tu/18ma.png。
本功能是“请求生成并下载”,不是读取一个固定远程图片地址。每次成功 POST 都重新生成随机参考内容并消耗一张额度。不要在访客刷新网页时调用生成接口。
原有 generate、batch_generate、旧模板 ID、KEY、参数和返回格式保持兼容。原来已对接的网站无需改动。新增 64 张参考模板使用 reference_generate;不要把新 image_id 传到旧接口的 template 参数中。
旧接口说明:https://shengtu.494499.xyz/api-docs.php
1. 获取图片 ID
GET https://shengtu.494499.xyz/api.php?action=reference_catalog
无需 KEY。响应 JSON 顶层有 total、eligible、skipped、images。
只使用 images 中 status 为 eligible 的项;id 是原图文件名去掉 .jpg。当前有 64 张可用、17 张历史核对项跳过。
例如:18ma、amxj、tjn。完整清单见网页或上述接口,不要猜测 ID。
2. 生成并下载一张图片
POST https://shengtu.494499.xyz/api.php?action=reference_generate
请求头:
Authorization: Bearer YOUR_KEY
Content-Type: application/json
User-Agent: ShengtuReferenceClient/1.0
请求 JSON(以下号码和日期仅为示例,不是真实开奖记录):
{
"image_id": "18ma",
"name": "澳门赛马会",
"website": "example.com",
"period": "308",
"draw_time": "2026-11-04 21:30:00",
"previous_period": "307",
"previous_draw_time": "2026-11-03 21:30:00",
"previous_draw": [1, 13, 25, 37, 49, 2, 26]
}字段说明:
- image_id:必填,可用清单中的字符串 ID。
- name:必填,彩票名称,按传入原文使用。图片中原有的彩票名称会动态替换,栏目后缀保留。例如传入“香港cc”,火凤凰图显示“香港cc火凤凰”。同图的小标题、专用标识、重复边框中的彩票名称同步替换;长名称在原区域内自动缩小,不挤占其他栏目。无需新增参数,image_id 保持不变。
- website:必填,目标网站文字。仅在模板原本有网址字段的位置绘制。
- period:必填,本期字符串期号,保留前导零。不可由今天日期盲目推算。
- draw_time:必填,本期开奖日期时间,北京时间 YYYY-MM-DD HH:mm:ss。
- previous_period:必填,上期开奖期号字符串。
- previous_draw_time:必填,上期真实开奖时间,必须早于 draw_time。
- previous_draw:必填,上期真实 7 个号码,整数数组,范围 1—49,组内不重复;最后一个为特码。
号码补齐两位由服务器处理。生肖、五行按对应开奖日期及农历春节换年;推荐内容不作为实际开奖,也不验证历史命中。
同一轮同步先读取一份完整参数,再用于所有图片,避免中途切换期号。
成功:HTTP 200,Content-Type: image/png,响应正文就是 PNG 二进制,不是 JSON、Base64 或图片 URL。
X-Image-Version:本次图片版本。X-Reference-Only: true:随机参考内容。Cache-Control: no-store。
调用方必须先检查状态码、Content-Type 和 PNG 完整性,再替换本地文件。
失败:正文为 JSON。401=KEY 无效/过期;405=方法错误;422=参数或 ID 不正确;429=额度不足;500=生成失败。
服务明确返回失败时不扣额度。网络超时可能发生在服务器生成成功之后,不保证可无损重试;不要无限或立即重试。先检查服务状态和额度。
3. 可直接下载的同步脚本
脚本(Python 3.9+,Linux,无第三方 Python 依赖):
https://shengtu.494499.xyz/reference-sync.py
配置示例:https://shengtu.494499.xyz/reference-sync.example.json
开奖参数示例:https://shengtu.494499.xyz/reference-request.example.json
目标服务器准备:
mkdir -p /opt/shengtu-sync
chmod 700 /opt/shengtu-sync
curl --fail --show-error --location https://shengtu.494499.xyz/reference-sync.py -o /opt/shengtu-sync/reference-sync.py
curl --fail --show-error --location https://shengtu.494499.xyz/reference-sync.example.json -o /opt/shengtu-sync/config.json
curl --fail --show-error --location https://shengtu.494499.xyz/reference-request.example.json -o /opt/shengtu-sync/request.json
chmod 600 /opt/shengtu-sync/config.json /opt/shengtu-sync/request.json修改 config.json:
{
"endpoint": "https://shengtu.494499.xyz/api.php?action=reference_generate",
"key": "YOUR_KEY",
"image_ids": ["18ma", "amxj", "tjn"],
"request_file": "/opt/shengtu-sync/request.json",
"output_dir": "/www/wwwroot/YOUR-SITE/tu",
"state_dir": "/opt/shengtu-sync/state"
}KEY 由本站管理员发放。只能放在目标服务器的私有配置或 SHENGTU_KEY 环境变量中,不得放进网页 JavaScript、公开目录、URL 或提交到代码库。
更换 YOUR-SITE、YOUR_KEY 和需要下载的 image_ids。确认运行账户有权写入 output_dir。
每天调用前,目标网站通过自己可信的开奖数据来源更新 request.json;本服务及同步脚本不会自动获取开奖,也不会自动递增期号。请原子替换参数文件,避免读取半份 JSON。
示例 request.json 必须换成真实数据才能正式使用。不要把示例日期固定在每日任务中。
先手动测试:
/usr/bin/python3 /opt/shengtu-sync/reference-sync.py --config /opt/shengtu-sync/config.json行为:
- 顺序生成,每张成功消耗一张额度;每日额度至少覆盖所选图片数量。
- 相同北京时间日期、相同参数且本地图片完整时,重复运行会跳过已成功项;参数变化会重新生成。
- 文件锁阻止任务重叠。完整校验 PNG 后,用同目录临时文件原子替换对应的 ID.png。
- 不清空目标目录,不删除其他图片;失败项保留旧图。更新按单张进行,并非全套事务。
- 不自动重试。退出码 0=成功或全部跳过,1=部分失败,2=配置错误;查看日志处理后再执行。
- 状态和版本信息在私有 state_dir,不要清空它,否则可能重复扣额度。
4. 每天定时执行
宝塔:计划任务 → Shell 脚本 → 每天 → 选择时间,填写:
/usr/bin/python3 /opt/shengtu-sync/reference-sync.py --config /opt/shengtu-sync/config.json >> /opt/shengtu-sync/sync.log 2>&1或使用 crontab(以下为服务器本地时间每天 00:10;确认调度器时区为 Asia/Shanghai,按实际开奖及参数更新时间调整):
10 0 * * * /usr/bin/python3 /opt/shengtu-sync/reference-sync.py --config /opt/shengtu-sync/config.json >> /opt/shengtu-sync/sync.log 2>&1开奖参数更新任务必须先完成,再执行图片任务。只在目标网站设置计划任务,不需要在本站增加计划任务。若服务器 Python 不在 /usr/bin/python3,用实际的 Python 3.9+ 路径。
5. 目标网页显示图片
目标文件:/www/wwwroot/YOUR-SITE/tu/18ma.png
目标网址:https://YOUR-SITE/tu/18ma.png
每个 ID 在页面只展示一次。访客看到本地文件,不触发远程生成。
给图片 URL 加本地文件修改时间或 X-Image-Version 作为 v 参数,避免 CDN/浏览器一直显示旧图。PHP 示例:
<img src="/tu/18ma.png?v=<?= filemtime(__DIR__ . '/tu/18ma.png') ?>" alt="18ma">以上假设页面 PHP 位于网站根目录,并且图片已经成功下载。若有 CDN,确认查询参数参与缓存键,或在同步成功后刷新对应图片缓存。
6. 可直接发给其他 AI 的任务
请阅读 https://shengtu.494499.xyz/integration.md,在我的目标网站接入“按 ID 每天生成并下载图片”。保留现有网站功能。先确认目标根目录、图片目录、所需 image_ids、KEY 的私有存放位置、可信开奖数据来源及每天执行时间。使用 reference_generate POST;把 200 PNG 正文保存为目标目录/image_id.png。以真实开奖数据填充所有必填字段,一轮任务统一参数。使用文档提供的 reference-sync.py 或等效实现,保留文件锁、完整 PNG 校验、原子替换、当日幂等跳过和失败保留旧图行为。KEY 不得出现在前端。先手动验证一个 ID,再配置目标服务器每天计划任务。页面使用本地图片与版本参数,不在页面刷新时调用生成接口。旧 generate/batch_generate 调用不要改动。交付修改文件、任务配置、日志路径和恢复方法。
64 个可用图片 ID
点击可复制 ID。17 张历史核对图片未开放生成,原因见 完整 JSON 清单。