@miniknife
2020-03-17T11:50:25.000000Z
字数 10222
阅读 56273
已不进行更新,最新版请查看:http://helpdoc.touchsprite.com/dev_docs/2183/437/438.html
开发手册
API文档
当前手册适用于触动精灵 iOS v2.2.3+,Android v1.3.0+ 版本
触动精灵为高级开发者提供部分开放 API 接口,使用此接口可为触动精灵开发周边扩展工具,实现诸如:远程启动脚本、远程停止脚本、获取脚本运行状态、发送文件等功能,接口调用需验证开发者身份,请注册登录触动精灵开发者平台申请。
- 大部分接口需要触动精灵 iOS 客户端授权后方可正常使用,调试前请确保您用来调试的设备已经购买过触动精灵授权并激活
- 此接口同样适用于触动精灵安卓客户端,且安卓无需购买客户端授权
- 本接口仅适用于触动精灵(非企业版)和触动小精灵
- 本手册仅提供接口信息,各位开发者可使用自己熟悉的任意语言进行编程(包括但不限于 C、Java 和易语言)
数量(台) | 价格(元/月) | 价格(元/年) |
---|---|---|
5 | 免费 | 免费 |
50 | 250 | 900 |
100 | 500 | 1800 |
200 | 1000 | 3600 |
1000 | 500 | 18000 |
注意事项
- 接口购买地址:http://dev.touchsprite.com/openapi/index?handle-type=add_access_key
- 每个开发者账号会提供一个免费的试用 key,允许 5 台设备进行调试
- 当使用该 key 的设备到达最大上限时,可以通过清空设备列表取消之前的设备的授权,再添加新设备
- 如果您付款成功却没有显示 Access Key,请联系客服 QQ 2885667299 提供您的购买记录、商户订单号和开发者邮箱进行查询
新版入口地址: http://openapi.touchsprite.com/api/openapi(本网址仅为入口,不可使用浏览器直接访问)
同时支持 http 及 HTTPS 的 post 请求,
兼容旧版地址
**参数格式: JSON
请求方式: POST
客户端发送
{
"action": "getAuth", //获取验证串
"key": "开发者的key", //开发者的 access key
"devices": ["设备号1","设备号2"...], //设备数量不能超过开发者的最大设备数限制
"valid": 希望验证串的有效期, //单位秒,最大为 3600
"time": 时间戳 //当前 Unix 时间戳
}
服务器正确返回
{
"status": 200, //200成功
"message":"xx", //status不等于 200 时,返回错误提示。
"time": 1422930265, //当前 Unix 时间戳
"auth": "xx", //验证串,直接填充到发送给触动服务的 auth 字段
"valid": 3600, //验证串实际有效时间
"remainder_token": 4 //剩余的令牌数,当剩余令牌为 0 时,getAuth 协议将调用失败
}
- 在搜索设备时,先建立一个 UDP 接收端,然后发送一个包含自己 IP 地址和端口信息的广播
- 广播的端口号为 14099,UDP 接收端就会收到来自各方触动客户端的回复
是否需要验证:否
控制端需要发送信息
{"ip":"接收端IP", "port":接收端端口号}
各方触动正确返回
{"deviceid":"设备号", "tsversion":"触动版本号", "ip":"该设备IP", "port":设备服务端口, "devname":"设备名"}
远程调用服务采用 HTTP 框架,部分协议需要验证调用者身份
控制客户端调用格式
http方法:[POST或者GET] /[命令路径] HTTP/1.1
Host: [服务端ip]
Connection: close
Content-Length: [数据长度]
其他参数: [header]
LUA调用实例
local response_body = {}
http = require("socket.http")
http.TIMEOUT=1
local response_body = {}
local rep , code = http.request{
url = "http://192.168.0.2:50005/status",
headers=
{
["auth"] = Auth,
},
sink = ltn12.sink.table(response_body),
}
注意事项:
Auth 通过 getAuth 方法获得,具体使用参照开发者后台 http://dev.touchsprite.com/openapi/index
是否需要验证:否
控制客户端发送
GET /deviceid HTTP/1.1
Host: [服务端ip]
Connection: close
Content-Length: 0
服务返回
HTTP/1.1 200 OK
Connection: close
[触动精灵设备号]
是否需要验证:否
控制客户端发送
GET /devicename HTTP/1.1
Host: [服务端ip]
Connection: close
Content-Length: 0
服务返回
HTTP/1.1 200 OK
Connection: close
[设备名]
是否需要验证:是
控制客户端发送
GET /snapshot?ext=[jpg|png]&compress=[0.1-1]&orient=[0|1|2|3] HTTP/1.1
Host: [服务端ip]
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
参数 | 说明 |
---|---|
ext | 截图格式 |
compress | 当格式为JPG时有效,范围为 0.1 - 1 |
orient | 图片方向,对应移动设备的四种方向 |
服务返回
HTTP/1.0 200 OK
Content-Length: [图片长度]
Content-Type: image/png
[图片数据]
是否需要验证:是
控制客户端发送
POST /upload HTTP/1.1
Host: [服务端ip]
--触动专业版 iOS 无需写入验证串
auth: [验证串]
root: [根类型:lua|res|log|plugin]
path: [路径:例如"/aaa"或者"/aaa/bbb";多级路径下,前面带'/';后面不带‘/’,根路径就是"/"]
filename: [文件名]
Connection: close
Content-Type: touchsprite/uploadfile
Content-Length: [文件长度]
[文件数据]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
400 | 参数错误 |
401 | 授权验证失败 |
是否需要验证:是
控制客户端发送
GET /logServer HTTP/1.1
Server: [LOG服务ip]
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
Port: [端口号]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /status HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
服务返回
HTTP/1.0 200 OK
Content-Length: 3
Content-Type: text/html; charset=utf-8
[f00|f01|f02]
名词解析:
f00 - 空闲;f01 - 运行;f02 - 录制
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /getFileList HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
Root: [根类型:lua|res|log|plugin]
Path: [路径:例如"/aaa"或者"/aaa/bbb";多级路径下,前面带'/';后面不带‘/’,根路径就是"/"]
服务返回
HTTP/1.0 200 OK
Content-Length: 143
Content-Type: text/html; charset=utf-8
{"ret":true,"Dirs":[],"Path":"\/","Files":["1436408889.lua","test.lua","main.ios.tsp","sz-ios.lua","sz-ios.lua.lua","ts1-ios.lua"],"Root":"lua"}
返回 | 说明 |
---|---|
ret | true - 成功;false - 失败 |
Dirs | 文件夹数组 |
Files | 文件数组 |
Path | 子路径 |
Root | 根路径 |
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /getFile HTTP/1.1
Host: [服务端ip]
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
Root: [根类型:lua|res|log|plugin]
Path: [路径:例如"/aaa"或者"/aaa/bbb";多级路径下,前面带'/';后面不带‘/’,根路径就是"/"]
file: [文件名]
Connection: close
服务返回
HTTP/1.0 200 OK
Content-Length: [文件长度]
Content-Type: text/html; charset=utf-8
[文件数据]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
400 | 参数错误 |
401 | 授权验证失败 |
是否需要验证:是
控制客户端发送
GET /reboot?type=1 HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /reboot?type=0 HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
POST /setLuaPath HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
Content-Type: application/json
Host: [服务端ip]
Connection: close
Content-Length: 46
{"path":"/var/mobile/Media/TouchSprite/lua/test.lua"}
注意事项:
示例中的路径为触动精灵 iOS 版脚本路径,安卓路径请在手机触动精灵客户端更多界面查看设备信息获取。
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /runLua HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /stopLua HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /rmFile HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
Root: [根类型:lua|res|log|plugin|config]
Path: [路径:例如"/aaa"或者"/aaa/bbb";多级路径下,前面带'/';后面不带‘/’,根路径就是"/"]
file: [文件名]
Connection: close
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
[ok|fail]
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
是否需要验证:是
控制客户端发送
GET /setScreenRes HTTP/1.1
--触动专业版 iOS 无需写入验证串
Auth: [验证串]
type: ["640x960"|"750x1334"|"640x1136"|"1125x2001"|"1242x2208"|"768x1024"|"1536x2048"|"default"]
Connection: close
服务返回
HTTP/1.0 200 OK
Content-Length: 2
Content-Type: text/html; charset=utf-8
HTTP返回代码含义
返回代码 | 代码含义 |
---|---|
200 | 成功 |
下面是用 lua 写的 API 示例,点击下载文件 TSRemoteAPIDemo.lua
本代码由 天朝五毛君
分享。
--[[测试环境 OsVer: ios7.0.1
TsVer: v2.3.5
必备库 luaSocket
测试者: Half
]]
local sz = require"sz"
local http = require"szocket.http"
local json = sz.json
local ltn12 = require"ltn12"
--触动专业版 iOS 无需获取验证串,进行身份验证
local response_body = {} -- 构造主体部位接受的地方
local post_data = {
action = "getAuth",
key = "JqYVQgWc4V6dTVq部分马赛克处理掉7yKRbZDGYfg4Yp6F4qv0xjoU", -- 这就不用我自己的了……替换成自己的就好了
devices = {"aab9d7903部分马赛克处理掉cc0c0f51b595b70"}, -- 设备ID
time = os.time(),
valid = 3600,
}
post_data = json.encode(post_data)
local staus,code,header = http.request{
url = "http://openapi.touchsprite.com/api/openapi",
method = "POST",
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded",
["Content-Length"] = #post_data,
},
source = ltn12.source.string(post_data),
sink = ltn12.sink.table(response_body), --用ltn12转化接受的数据为lua可用
}
print(table.concat(response_body))
--将会打印以下内容,这是一个 json,将之使用 json.decode 处理后取 auth 字段保存起来供我们接下来使用
--[[{"status":200,
--触动专业版 iOS 无需写入验证串
"auth":"直接马赛克好了,那么长的一串",这就是我们获取到的验证串,由于太长我就马赛克掉了
"valid":2592000,"devices":["aab9d7903393a992dcc0c0f51b595b70"],
"remainder_token":0,
"time":1470216706}]]
local auth = "eyJrZXkiOiJGSmRrNFdBQmY2WnByc0NFSG40ZzNUcmZZMDlBNk9HNXNcL0NiczNzblhzdTQ3NTczRDJ5dXFNN1wvdXFlRFwvMldCclZyU3hEbEdEb0owWUJtV1RpekV5OWlFMVdoNmpiZ0Y4dG5mWWwrY0hKSHBVTmtSOWx4QkxCQjVvOTN1WTZGMFwvRzEyODBxY09WQUtXazExVklqT1pQM3pRVzJzeUVMeDVvM200QzVYcitKQ3pxdmhqM2hjdWx1MXJCdjJkRUg0YTlGaWZtNmpERXUyU1NkajJqcWRYb0M2Y013eUZnb08rc1dqVUtNNUtqekZZN3pJc1IrVTZwM0R3MWZnQ2dSRVZCdUhpRFdyUGdCXC9HbXNLaVZoM1JGdzF6aWlwWEVJSnhtZ2VOeUFqNnlVSGp2K2lVVkVGTThzNkdVc05UMUN1ZmpHK0NGV3VyRjg4VTZSQlRKeGdhQT09IiwiZGF0YSI6IjN0TFhNVFRKRTJkdWZtUlFcL2tuTjlcL3Z4Qm8zOFhlT2t1WE1UUHVKSHMrYXRMdFc3YW96QzlFY3IwcFwvTVJGdlJFRDlcL3NaY3p6ellQRlI4aDJocmtyWjhjUzdSQ2F0ZDRLMHhNXC9zaGpXclNzQTd1NG5HaE5kdTMyeTQ1bm9TUXgiLCJtZDUiOiJQdHp0YXo5b1ZKalgzb29HcTRVczVuYWgyVVwvbkxKcXpFNkNHMWVXSnRPMFVpa2ZhNjFEa1RNZVNhZ0hSUlwvYlFtdThYWXlOQWY3RERhekJxSDZcL2ZIR0hObkhSYzhpeDVOWWo1Mmt1cERuK3VMb3BDUlM0Q0lKREdhbjZqd2VnRnUzQjdia0RQbERRYzRKRlpCNmpXc1B0emFkdGtWVUZvOWYxazFKNk1Qd3dGNUx2WHVsSDB1MTg1SVVCeHJyNnZBRXdhcVBxUTYxbUpVZFg5ZE5RWTR2UzVoalp1UU85bXpEd3d1UDhMblwvVVY1QnAxUmNVVmZqVFA4MThzTjRyTHhCZk9lMzBHR2pVYkR1SEhpUlwvVjhyVzZGN0RiYWpIYXBcL0lnbmJrN1wvYkJaU1NjTEF4dkNkajc2Y2EwSmlqNHJqOHZPRG0rcXFGeWVtMWJlcFV3VUhBPT0ifQ=="
-- --假装保存了auth
local response_body = {}
http.TTIMEOUT = 8
local staus,code,header = http.request{
url = "http://192.168.1.120:50005/deviceid",
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded",
},
sink = ltn12.sink.table(response_body), --用ltn12转化接受的数据为lua可用
}
print(table.concat(response_body))
--将会打印[[aab9d7903393a马赛克以下c0c0f51b595b70]]
local response_body = {}
local staus,code,header = http.request{
url = "http://192.168.1.120:50005/snapshot?exp=png&orient=0",
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded",
--触动专业版 iOS 无需写入验证串
["auth"] = auth,
},
sink = ltn12.sink.table(response_body), --用ltn12转化接受的数据为lua可用
}
local function writePicture(picpath, content)
local file = io.open(picpath,"wb")
if file then
file:write(content)
file:close()
return true
end
return false
end
writePicture("C:\\Users\\Administrator\\Desktop\\1.png",table.concat(response_body))
--在桌面写入一张图片
local response_body = {}
local staus,code,header = http.request{
url = "http://192.168.1.120:50005/getFileList",
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded",
--触动专业版 iOS 无需写入验证串
["auth"] = auth,
["Root"] = "lua",
["Path"] = "/"
},
sink = ltn12.sink.table(response_body), --用ltn12转化接受的数据为lua可用
}
print(table.concat(response_body))
--我的打印{"ret":true,"Dirs":[],"Path":"\/","Files":[".12786.cfg",".383.cfg",".8308.cfg","12786.tsp","1467787409.lua","383.tsp","8308.tsp","English.lua"]}
触动精灵脚本开发手册
触动精灵脚本开发函数扩展库
触动精灵脚本开发视频教程
已知与触动精灵冲突的插件列表
showUI 不能弹出、点击没反应、滑动失效等问题有可能是由于安装了冲突插件引起的
https://www.zybuluo.com/miniknife/note/307651#已知与触动精灵冲突的插件列表
触动精灵脚本开发实例代码
下载、安装触动精灵iOS/帮你玩脚本商城,欢迎添加官方推荐软件源
触动精灵官方源:http://apt.touchsprite.com
触动精灵iOS使用教程
脚本编辑器
远程调试、运行脚本
1. TouchSprite Studio:http://www.touchsprite.com/tools
取色、图像工具
远程截图、取色、生成代码
1. 触动精灵抓色工具:http://www.touchsprite.com/tools
脚本加密
文字点阵识别字库制作工具
- 大漠:链接:https://pan.baidu.com/s/1DA1l5pSBL6ryDI94rZ2cPQ 密码:rygv
设备 SSH 连接工具
- WinSCP:WinSCP.zip
- 简体中文语言包:WinSCP 简体中文语言包.zip
- Putty:putty.zip
相关工具运行库
- VCredist 2010:VCredist.zip
- NET Framework 4:http://www.microsoft.com/zh-cn/download/details.aspx?id=17718
OCR(光学字符识别)相关
- 触动精灵本地 OCR 简体中文识别库:https://pan.baidu.com/s/1snhuZyH 密码:hy56
- 触动精灵本地 OCR 英文数字识别库:https://pan.baidu.com/s/1pMbdlEV 密码:9ewt