现在网络越来越发达了,对组态软件要求也越来越多,我参考了网上的一些例子,但是获取的数据都不是很多,对于搞暖通楼控的工程师来说温度、湿度、和大气压力都很重要,若你要获得更多的气象数据网上提供的API是要收费的。我通过分析网站的数据,得到了更详细的数据,免费。这里我自己写了一个抓取天气信息的VBS脚本,有兴趣可以适当的改改弄到组态软件当中去,这个是网页抓取JSON格式的,这个可以作为参考如何从网页当中抓取数据。 不同的组态软件有不同的办法,这个VSB脚本提供给大家参考。 我这个抓取的原始数据信息相当较全面,由于VBS不是JAVA不能直接解析JSON,我这里用了正则表达式提取了几个数据作为弹窗。不同的组态软件都可以参考这个进行获取数据达到组态软件中。。。。本例子获得的气象数据为成都市双流区的。。你懂得我家在这里 改动参数就可以获得别的地方的气象数据。这个是中央气象台的后台实时数据。。
题外话:最近也比较忙,其实挺想网上看些资料写个关于不同经纬度不同日期时间的日照,太阳高度等西门子SCL的程序。。PLC就可以计算了对做楼控的兄弟就很有用了。。有兴趣的支持我一下。
Dim html,http,strHtml,post_list,window,kuwo,tet,fso,f,t
Dim regEx, Match, Matches
DIM StrTEST
'Set html = CreateObject("htmlfile")
Set http = CreateObject("Msxml2.ServerXMLHTTP")
'html.designMode = "on" ' 开启编辑模式
http.open "GET", "http://www.nmc.cn//f/rest/real/56288", False
http.send
strHtml = trim(http.responseText)
'msgbox strHtml
'html.write strHtml ' 写入数据
'Set post_list = html.getElementById("post_list")
'For Each el In post_list.children Ws cript.Echo el.getElementsByTagName("a")(0).innerText
'Next
'#################################################
'strHtml = http.responseText ' 得到数据
'Set window = html.parentWindow
'window.execs cript strHtml, "Js cript" '定义一个JS变量,将JSON数据引入
'Set kuwo = window.returnCitySN ' 获取解析后的对象
' MsgBox"温度 " & window & " 摄氏度"
'Set kuwo = kuwo.json ' 获取解析后的对象
'Ws cript.Echo "温度:", kuwo.temperature, " 湿度:", kuwo.humidity
'MsgBox window.Eval("json.temperature")
'#################################################
'
' MSGBOX sc.Eval("o.temperature")
set fso=createobject("s cripting.filesystemobject")
set f=fso.opentextfile("c:a.txt",2,true):f.write strHtml :f.close
set f=fso.opentextfile("c:a.txt",1)
strHtml = f.ReadAll
MsgBox strHtml
' 创建变量。
StrTEST="temperature"
Set regEx = New RegExp ' 创建正则表达式。
regEx.Pattern = StrTEST ' 设置模式。
regEx.IgnoreCase = True ' 设置为不区分大小写。
regEx.Global = True ' 设置全局适用。
Set Matches = regEx.Execute(strHtml) ' 执行搜索。
For Each Match in Matches ' 对 Matches 集合进行迭代。
RetStr = RetStr & Match.FirstIndex
Next
MSGBOX "温度为"&Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,Instr(1, Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,6),",", 1)-1)
StrTEST="humidity"
RetStr=""
regEx.Pattern = StrTEST ' 设置模式。
regEx.IgnoreCase = True ' 设置为不区分大小写。
regEx.Global = True ' 设置全局适用。
Set Matches = regEx.Execute(strHtml) ' 执行搜索。
For Each Match in Matches ' 对 Matches 集合进行迭代。
'RetStr = RetStr & "Match found at position "
'RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
'RetStr = RetStr & Match.Value & "'." & vbCRLF
RetStr = RetStr & Match.FirstIndex
'RetStr = RetStr & Match.Value & ":" & vbCRLF
Next
'MSGBOX RetStr
MSGBOX "湿度为"&Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,Instr(1, Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,6),",", 1)-1)
StrTEST="airpressure"
RetStr=""
'Set regEx = New RegExp ' 创建正则表达式。
regEx.Pattern = StrTEST ' 设置模式。
regEx.IgnoreCase = True ' 设置为不区分大小写。
regEx.Global = True ' 设置全局适用。
Set Matches = regEx.Execute(strHtml) ' 执行搜索。
For Each Match in Matches ' 对 Matches 集合进行迭代。
RetStr = RetStr & Match.FirstIndex
Next
MSGBOX "大气压为"&Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,Instr(1, Mid(strHtml, LEFT(RetStr,3)+LEN(StrTEST)+3,6),",", 1)-1)
'set html=nothing
set http=nothing