Lua 中如何实现条件循环和随机选择
2017-8-22 9:2:42
收藏:0
阅读:125
评论:0
我想获取一个随机的记录(使用两个 API),其中包含一张图片并将其显示给用户。此外,由于获取的记录包含不同的值,我希望稍后在不同的 Lua 文件中重复使用它们。
在下面的代码中,value.original.source 是图像网址(在第二个 API 调用中),并且在记录中可能为空(nil),因此我认为我需要保持获取记录,同时它为空(使用 repeat-until 或 while-do?)也许我需要使用全局变量将数据传递到不同的文件中,但不确定。它很棘手,具有挑战性。任何关于某个或全部内容的想法和解决方案都将不胜感激。谢谢!
-- 创建空表
t = {}
t2 = {}
-- 第一个 API 调用
local json = require("json")
local function getWikipediaData(event)
local res = json.prettify(event.response)
local decoded = json.decode(res)
for key, value in pairs(decoded.results.bindings) do
local pname = value.person_name.value
local dbpuri = value.person.value
-- 将数据放入表中
t["PNAME"] = pname
t["DBPURI"] = dbpuri
-- 打印键值
for key, value in pairs(t) do
print(key, value)
end
local wikititle = string.gsub(dbpuri, "http://dbpedia.org/resource/", "")
print(wikititle)
-- 2nd API call,其中一个函数嵌套了进去
network.request(
"https://en.wikipedia.org/w/api.php?action=query&prop=pageimages&format=json&piprop=original&titles=" .. wikititle, "GET",
function(event)
local res2 = json.prettify(event.response)
local decoded2 = json.decode(res2)
-- 这部分是我有问题的棘手部分。"value.original.source" 在记录中可能为空(nil),因此我想保持获取记录,同时它为空。然后,在获取的记录中(其中包含 `value.original.source`),最后我想随机选择一个记录。记录中的数据(在变量中)应该传递给其他文件。
while (pickdata == nil) do
-- 下一级到“pages”是数组,因此需要使用 for 重复获取数据
for key, value in pairs(decoded2.query.pages) do
-- 将数据放入表中
local source = value.original.source
table.insert(t2, source)
end
end
end, params)
end
end
-- 这是第二个任务,尝试随机从创建的表中选择一个带有图像的记录,但不起作用。循环和本地与全局变量是要解决的问题。
local pick = math.random(3)
local pickdata = t2[pick]
print(pickdata)
local headers = {}
headers["Content-Type"] = "application/json"
local body = ""
local params = {}
params.headers = headers
params.body = body
network.request("https://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=select+*%0D%0Awhere+{%3Fperson+rdfs%3Alabel+%3Fperson_name+%3B+rdf%3Atype+%3Ftype+%3B+dbo%3AbirthDate+%3Fbirthdate+.%0D%0A++++bind(rand(1+%2B+strlen(str(%3Fperson))*0)+as+%3Frid)%0D%0AFILTER+regex(%3Ftype%2C+%22Person%22)%0D%0A}+order+by+%3Frid%0D%0ALIMIT+10&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000&debug=on&format=json", "GET", networkListener, params)
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
