理解LUA的urlGet和RegEx
2014-3-2 4:47:30
收藏:0
阅读:138
评论:1
在项目中使用 urlGet 并缺乏经验,没有找到一个带有示例的好资源来自己学,所以希望这里的社区能够帮助我。
我正在尝试从一个网页中提取一些数据,具体来说是:
https://rrtp.comed.com/rrtp/ServletFeed?type=instanthourly
在这个页面上是实时定价的数据,针对在一个叫做住宅实时定价的计划上的人们。我想从这个页面中提取数字成本数据,用于家庭自动化系统。
我正在使用另一个类似的驱动程序作为我的工作基础示例,但它不是一个直接的转换,因为该示例是通过 Yahoo 天气 API 获取数据。但是,从我所了解的情况来看,基本原理应该是相同的。这是示例代码的相关片段,具体来说是查看 RequestData 函数和 ParseData 部分:
function Init()
-- Create Variables
for k, v in pairs(weatherData) do
if (not Variables[k]) then
C4:AddVariable(k, v, "NUMBER", true, false)
end
end
end
function RequestData()
local query = "select%20wind%2C%20atmosphere%2C%20item.title%2C%20item.condition.code%2C%20item.condition.temp%20from%20weather.forecast%20where%20woeid%3D" .. Properties[WOEID] .. "%20and%20u%3D%22" .. Properties[UNIT] .. "%22"
C4:urlGet(string.format("http://query.yahooapis.com/v1/public/yql?q=%s", query))
end
function ReceivedAsync(ticketId, strData, responseCode, tHeaders)
dbg(string.format("ReceivedAsync[%s]: %s", ticketId, strData))
for k, v in pairs(weatherData) do
local tempVal = ParseData(strData, k)
-- Set property, table, and variable
Properties[displayProperties[k]] = tempVal
weatherData[k] = tempVal
C4:SetVariable(k, tostring(tempVal))
OnPropertyChanged(displayProperties[k])
if (tempVal ~= weatherData[k]) then
if (k == RISING) then
tempVal = weatherRising[tonumber(tempVal)] or "N/A"
end
end
C4:UpdateProperty(displayProperties[k], tostring(tempVal))
end
if(weatherData["code"] ~= "N/A" and weatherData["code"] ~= nil) then
weatherData["condition"] = weatherConditions[tonumber(weatherData["code"])]
C4:UpdateProperty(CONDITION, weatherData["condition"])
end
for k, v in pairs(weatherData) do
dbg(displayProperties[k] .. ":" .. v)
end
end
function ParseData(strData, item)
return string.match(strData, string.format("%s=\"(.-)\"", item)) or
string.match(strData, string.format("<%s>Conditions for (.+)</%s>", item, item)) or
"N/A"
end
所以……
我首先要问的问题,我认为我知道答案,就是当你使用 urlGet 时,它是如何看待网页的?即它是否看到了原始的 HTML 或没有所有的 HTML 标记。
我问这个问题是因为我相信它会改变我需要构建的正则表达式,以提取数字数据。
这是我提议的 urlGet 和 string.match。如果我朝着正确的方向前进,我会很感激任何见解,也希望得到任何其他的建议。
function RequestData()
C4:urlGet(string.format("https://rrtp.comed.com/rrtp/ServletFeed type=instanthourly))
end
.
function ParseData(strData, item)
return string.match(strData, string.format("\b([0-9]\.[0-9])\b")) or
"N/A"
end
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
尝试使用此模式提取价格:
"(%d+%.%d+)"。请注意,Lua模式中的转义符为%。