上周有个读者发来一段按键精灵脚本,说他每天定时抓游戏里的金币数量,攒了三个月,全存在本地的 TXT 里,结果电脑一重装,数据全没了。他问我:按键精灵数据上传云端怎么设置,能不能别搞太复杂,我就想每次跑完脚本把一段数据丢上去。
这需求一点不复杂。云递数据这类轻量级存储平台,本质就是给你一个 HTTP 接口,脚本发个 POST 就完事,不用买服务器、不用建数据库。下面先把一段最小可运行的代码贴出来,你在按键精灵里新建一个脚本,把域名和 APIKey 换成自己的,按 F5 就能跑:
// 按键精灵 VBScript 最小示例:推送一条数据
Dim http
Set http = CreateObject("MSXML2.XMLHTTP")
Dim url, body
url = "http://你的域名/api/push.php"
body = "{""api_key"":""你的APIKey"",""dataset"":""gold_log"",""data"":{""gold"":12345,""time"":""2024-06-01 10:00""}}"
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send body
TracePrint http.responseText
跑通这段,说明链路是通的。剩下的就是把它嵌进你真实的业务流程里,再搞清楚几个容易踩的坑。下面按顺序讲。
按键精灵脚本数据为什么需要上传云端
按键精灵的脚本大多跑在用户自己的机器上,数据默认落在本地文件或者内存变量里。本地存储的问题不是"存不下",而是"存不住"和"看不见":换机器就断档,脚本崩了可能丢最后几条,多台设备之间也没法共享同一份状态。
云端存储解决的是这三件事。第一是持久化,脚本跑完数据就出去了,本地删了也不影响。第二是集中查看,你打开控制台就能看到今天推了多少条、占了多少容量、哪些已经被消费掉,不用再翻日志文件。第三是跨设备分发,比如 A 机器上的脚本负责采集,B 机器上的脚本负责读取处理,中间靠云端队列衔接,两边都不用知道对方的 IP。
用个不太严谨的比喻:本地文件像你把便签贴在自家冰箱上,云端像贴在公司公告栏——谁都能看,换办公室也不丢。对于跑量、跑时长的按键精灵脚本来说,这个差别会随时间放大。
云递数据的推送与读取接口原理
整个平台只有两个核心接口,一个写、一个读,理解这两条就够用了。
推送接口是 POST http://你的域名/api/push.php,请求体是 JSON:{"api_key":"你的APIKey","dataset":"数据名","data":要存的数据}。其中 data 可以是对象、数组,也可以直接是一段文本。api_key 除了放在 JSON 里,也可以走 X-Api-Key 请求头,后者在有些老环境里更方便。
读取接口是 POST http://你的域名/api/pull.php,按写入顺序 FIFO 读取,取走即标记已读,不会重复下发。支持分页,也支持按数据名读取——也就是说你可以只取 gold_log 这个数据集里的数据,不碰别的。
这里有个设计值得单独说:写入时会自动规范化并计算哈希去重,内容完全相同的数据只保留第一条。这意味着脚本重试、重复提交不会把队列撑爆,对网络不稳的场景很友好。另外还有一个兼容写法,?api_key=xxx&dataset=yyy 配合纯文本请求体,可以直接存一段文本,适合老程序或者不想拼 JSON 的场景。
分步实现:按键精灵上传数据到云端的完整配置
第一步,先去注册账号拿到 APIKey,然后在控制台建一个数据名,比如 gold_log,顺手加个标签备注,方便以后区分。数据名是分类管理的核心,别所有东西都往一个 dataset 里塞。
第二步,在按键精灵里写推送逻辑。真实业务里通常要带上时间戳和唯一标识,方便后面排查:
// 推送:带时间戳的采集数据
Function PushGold(goldValue)
Dim http, url, body, ts
Set http = CreateObject("MSXML2.XMLHTTP")
url = "http://你的域名/api/push.php"
ts = Now()
body = "{""api_key"":""你的APIKey"",""dataset"":""gold_log"",""data"":{" & _
"""gold"":" & goldValue & "," & _
"""ts"":""" & ts & """}}"
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send body
If http.status = 200 Then
PushGold = True
Else
TracePrint "推送失败,状态码:" & http.status & " 返回:" & http.responseText
PushGold = False
End If
End Function
// 调用
Call PushGold(12345)
第三步,写读取逻辑。pull 是消费式的,取走就标记已读,所以读取端要做好"取到就处理、处理完再取下一批"的节奏,别一口气拉完堆在内存里:
// 读取:按数据名拉取一批已写入的数据
Dim http, url, body
Set http = CreateObject("MSXML2.XMLHTTP")
url = "http://你的域名/api/pull.php"
body = "{""api_key"":""你的APIKey"",""dataset"":""gold_log"",""page"":1}"
http.Open "POST", url, False
http.setRequestHeader "Content-Type", "application/json"
http.Send body
TracePrint "返回内容:" & http.responseText
// 返回的 JSON 用按键精灵自带的 JSON 解析或字符串处理提取字段
第四步,把推送函数挂到你脚本的关键节点上——采集完成后调一次,或者按时间间隔批量推。不建议每条数据都单独发一次请求,网络往返的开销比你想的大,攒一批再发更划算。
如果脚本运行环境很老,JSON 拼起来费劲,可以用兼容写法直接传纯文本:
// 兼容写法:URL 带参数,请求体直接是文本
Dim http, url, text
Set http = CreateObject("MSXML2.XMLHTTP")
url = "http://你的域名/api/push.php?api_key=你的APIKey&dataset=note_log"
text = "2024-06-01 10:00 金币采集完成,数量 12345"
http.Open "POST", url, False
http.Send text
TracePrint http.responseText
运行效果:控制台查看条数、容量与已读状态
脚本跑起来之后,回到云递数据控制台就能看到实际效果。每个数据集会显示当前条数、占用容量,以及每条数据的已读状态——推送进去是未读,被 pull 取走之后变成已读。这个视图对调试特别有用:你怀疑脚本没推成功,看一眼条数有没有涨就知道;怀疑读取端没消费,看已读状态变没变就行。
数据本身也支持下载、编辑、清空、删除。测试阶段我一般建议先推几条假数据,确认控制台能正常显示、pull 能正常取走,再把脚本接入正式流程,避免脏数据混进队列。
下面这张表把本地存储和云端存储做个直观对比,方便你判断自己的场景该不该上云:
| 对比项 | 本地文件存储 | 云端队列存储 |
|---|---|---|
| 换机器后数据是否还在 | 不在,需要手动迁移 | 在,登录即可查看 |
| 多设备共享 | 需要额外同步方案 | 同一 APIKey 直接读写 |
| 重复提交处理 | 自行去重 | 写入自动哈希去重 |
| 消费进度可见性 | 靠日志推断 | 控制台看已读状态 |
| 容量与条数统计 | 手动统计 | 控制台直接显示 |
常见坑与注意事项
第一类坑是 JSON 拼错。按键精灵里字符串拼接很容易多一个引号少一个逗号,结果接口返回解析错误。建议把拼接好的 body 先 TracePrint 出来,肉眼过一遍再发。第二类是编码问题,中文字段在部分环境下会乱码,尽量用英文键名,值里带中文时确认请求头是 UTF-8。
第三类是网络超时。按键精灵的同步请求默认没设超时,网络一卡脚本就僵住。可以在 http.Open 之后加上 http.setTimeouts 或者把推送放到独立线程里跑,别阻塞主流程。
第四类是误以为 pull 可以反复读同一条。它是队列式消费,取走即标记已读,不会重复下发。如果你的业务需要"读多次",得自己在本地留副本,或者推送时就设计成可重建的数据结构。
第五类是 key 泄露。APIKey 直接写在脚本里,脚本发给别人就等于把钥匙给了别人。尽量在私有环境使用,或者定期在控制台更换 key。平台侧有 API 密钥鉴权、PDO 预处理防注入、接口限流等机制,但钥匙保管还是使用者自己的责任。
最后提一句会员。新用户注册赠送 3 天会员试用,正式会员月卡 19 元、年卡 99 元,卡密充值,YK 开头是月卡、NK 开头是年卡,多张可以叠加、到期顺延。到期后数据保留不删除,只是暂停推送和读取,续费即恢复。如果你要私有化部署到自己的内网或公网服务器,平台是 Nginx + PHP + MySQL 架构,数据自主可控。
常见问题
按键精灵上传数据时提示鉴权失败怎么办?
先检查 api_key 是否完整复制、有没有多余空格。如果走 JSON 体,确认字段名是 api_key,不是 apikey 或 key;如果走请求头,确认头名是 X-Api-Key。还有一种情况是 key 已更换但脚本里还是旧的,去控制台核对一下当前有效的 APIKey。
云递数据读取后数据会重复下发吗?
不会。pull 接口按写入顺序 FIFO 读取,取走即标记已读,不会重复下发。如果你的脚本因为网络问题没收到响应就重试,可能造成同一条被标记已读但你没处理到,这种情况要在本地记录消费位置,别盲目重试。
按键精灵能直接传纯文本而不是 JSON 吗?
可以。用兼容写法 ?api_key=xxx&dataset=yyy 配合纯文本请求体,就能直接存一段文本,适合老程序或者不想拼 JSON 的场景。JSON 体里的 data 字段本身也支持文本、对象、数组三种形态。
会员到期后已上传的数据会被删除吗?
不会。会员到期后数据保留不删除,仅暂停推送和读取,续费后恢复正常。所以不用担心到期那天数据被清空,但也别把到期当长期存储方案,该备份的还是要备份。
按键精灵脚本需要额外安装插件或 SDK 吗?
不需要。按键精灵自身支持创建 MSXML2.XMLHTTP 对象,直接发 HTTP 请求即可,不依赖任何额外插件或 SDK。同理,易语言、PHP、Python、curl、PowerShell、ESP8266/ESP32 这些只要能发 HTTP 请求的环境都能接入。
开始使用
本文的代码示例都可以直接在云递数据上运行:注册后即可获得专属 APIKey,在 开发文档 中查看推送、读取接口的完整说明;需要长期使用可以在 会员中心 用卡密开通月卡或年卡;更多实战内容可以浏览技术博客的其他文章。