프로젝트 작업 중이고 urlGet에 대한 경험이 거의 없으므로 예제를 통해이 작업을 직접 수행 할 수있는 훌륭한 참고 자료를 찾지 못했습니다. 따라서 커뮤니티에서 도움이 될 수 있기를 바랍니다. LUA에 대한 이해 urlGet 및 RegEx
은 내가 특별히, 웹 페이지에서 일부 데이터를 추출하려고 시도하고있다 :이 페이지https://rrtp.comed.com/rrtp/ServletFeed?type=instanthourly
은 거주 실시간 가격라는 프로그램에 우리의 사람들을 위해 전기에 대한 실시간 가격 데이터입니다. 이 페이지에서 가정용 자동화 시스템과 함께 사용하기 위해 수치적인 비용 데이터를 가져 오려고합니다.
필자는 야후 날씨 API를 통해 데이터를 가져 오는 예제로서 직설적 인 번역이 아닌 내 작업의 기본 예제와 비슷한 다른 드라이버를 사용하고 있습니다. 그러나 일반 교장은 내가 이해하는 것과 동일해야합니다.
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
SO ... 내가 답을 알고 있다고 생각
내 첫 번째 질문,있다 : 여기서 특히 RequestData 기능을보고 예제 코드에서 관련 SNIPPIT 및 ParseData 섹션입니다 url을 사용할 때 어떻게 웹 페이지를 볼 수 있습니까? 그것은 원시 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