事实上,使用现成的lua第三方库(比如luasocket)就可以实现更全面的http功能,但考虑到即使对于Windows平台的大多数骰主而言,自行配置也存在着较高门槛,我们在Dice!2.6.1内置了最基础的http函数。
函数说明
res,data = http.get(url)
向指定url发送Get请求
res,data = http.post(url, jsondata)
以application/json
的数据形式向指定url发送Post请求
url = http.urlEncode(str)
将文本转码为url格式
str = http.urlDecode(url)
将url字符串解码
注意http.get和http.post都利用到了lua的多返回值特性,第一个返回值指示访问是否成功,第二个返回值在访问成功时返回数据,在访问失败时返回错误信息。
关于lua第三方库
我们修改了lua内部的package.path与cpath,无论是require调用lua还是dll文件,都可以使用/Diceki/lua/作为第三方库的存放目录。
考虑到大多数api的返回数据和post的发送形式都是json的形式,推荐使用lua-cjson库或者不需要编译的json.lua
图库接口实例
并不是所有随机图库都提供url直接随机跳转,有的图库返回json来提供图片url,以接口https://www.dmoe.cc/random.php?return=json
为例,返回的数据格式如下:
{
"code":"200",
"imgurl":"https:\/\/tva2.sinaimg.cn\/large\/0072Vf1pgy1foxlhv1sxmj31hc0u07i9.jpg",
"width":"1920",
"height":"1080"
}
这就需要在lua中取到json并在解析后提取"imgurl"
res,info=http.get("https://www.dmoe.cc/random.php?return=json")
json = require "cjson" --调用第三方库
j = json.decode(info)
return "[CQ:image,url="..j.imgurl.."]"