大家好,才是真的好。
今天我们继续查看V11几个开发中的新功能,并实现Notes中查看实时天气预报功能。不过要是专门只显示实时天气预报功能,我们前面似乎讲到过,这次,我们要和手机上的Nomad访问Notes应用结合起来,显示实时位置和其位置对应的天气预报。
嗯,有灵感的你,也许能立马想到,这还可以实现外出打卡功能呢——总之,有很多实用性。
一、几个API接口网站
我们要通过手机或移动设备上的GPS位置来获取实时位置和天气预报数据,Notes Domino本身并没有存储这些信息数据,所以需要到不同的API站点去查询。本文用到的API站点有http://api.cellocation.com:81用来查询地理位置,还有http://t.weather.sojson.com用来查询天气。
二、GPS实时位置获取
Domino Designer V11中的Lotusscript语言新增了NOTESGPS类,用以查询用户当前设备所在GPS地理位置。另外对JSON处理也进行了增强,在实验过程中,可以接触到这些新功能。
我们先做一个Notes表单如下
天气图片要不要均可。其中三个字段GPS、city和weather等,都为显示时计算,值都为域的名称。
现在先把以下代码贴到表单的POSTOPEN事件中,如下图:
代码如下
'=============================================
'以下代码获取设备实时GPS地理位置中的维度和经度
Dim session As New NotesSession
Dim GPS As NOTESGPS '定义GPS类
Set GPS = session.Creategps() '创建GPS实例
Dim hasAccess As Boolean
hasAccess = GPS.Requestaccess() '判断在手机或移动设备上是否具备获取GPS的权限
If hasAccess Then '如果有权限
Dim pos As NOTESGPSPOSITION '定义地理位置
Set pos = GPS.Getcurrentposition() '实例化当前设备地理位置
Dim coo As NOTESGPSCOORDINATES
Set coo = pos.Coordinates '获取地理位置的坐标
Dim lat As Double
Dim lot As Double
lat = coo.Latitude '获取坐标纬度
lot = coo.Longitude '获取坐标经度
End If
Source.EditMode=True
Call Source.FieldSetText("GPS","纬度 " & lat & " 经度 " & lot)
'维度和经度获取结束
'=============================================
现在,我们在手机或移动设备上使用HCL Nomad访问该表单时,可显示实时GPS位置,如下图
对,我把GPS纬度和经度隐藏了几度,免得大家顺着网线来找我。
三、实时位置名称获取
有了GPS实时位置,则可根据该位置来获取实时地理位置名称信息。只要把坐标发送到站点http://api.cellocation.com:81中即可获取,我们采用了get方法,从Notes Domino V10开始,Lotuscript支持HTTP的POST和GET等操作。
我们把以下代码贴到表单的POSTOPEN事件中,上一节代码的后面,如下图:
代码如下
'=============================================
'以下代码获取设备实时地理位置名称
Dim url As String
Dim webRequest As NotesHTTPRequest
Dim jsnav As NotesJSONNavigator
Dim el As NotesJSONElement
url="http://api.cellocation.com:81/regeo/?lat=" & lat & "&lon=" & lot &"&output=json"
Set webRequest = session.CreateHTTPRequest()
Set jsnav = session.CreateJSONNavigator(webRequest.get(url) )
Set el = jsnav.GetElementByName("address")
Call Source.FieldSetText("city",el.Value)
'实时地理位置名称获取结束
'=============================================
现在,我们在手机或移动设备上再次使用HCL Nomad访问该表单时,可以查看到具体的地理位置啦。
四、实时天气预报
显示GPS和地址我们前面似乎提到过,这次,我们要和手机上的Nomad访问Notes应用结合起来,显示实时位置和其位置上的天气预报。查询城市天气预报,要根据城市代码来,虽然我们也可以找到一个站点进行城市查询,但为了简单起见,我在Notes中做了一个表单和视图,专门用来输入城市名称和代码,如下图:
以此为基础,我们还是在同样的位置,加上代码,效果如下:
能够实现该功能的代码参考
'=============================================
'以下代码获取实时天气预报
Dim view As NotesView
Dim tmpdoc As NotesDocument
Dim tmpstr As String
Dim city As String
Dim cityno As String
'此处代码为硬写的演示代码,只考虑省份,不考虑自治区、直辖市等,先把城市名提出来
tmpstr=Strright(el.Value,"省")
city=Strleft(tmpstr,"市")
'从视图中获得城市编号
Set view=session.CurrentDatabase.GetView("allCities")
Set tmpdoc=view.GetDocumentByKey(city)
cityno=tmpdoc.cityno(0)
'获得城市天气预报
Dim jsonArr As NotesJSONArray
Dim listEL As NotesJSONElement
Dim jsonObj As NotesJSONObject
url="http://t.weather.sojson.com/api/weather/city/" & cityno
Set webRequest = session.CreateHTTPRequest()
Set jsnav = session.CreateJSONNavigator(webRequest.get(url) )
Set el = jsnav.GetElementByName("data")
Set el = el.value.GetelementByName("forecast")
Set jsonArr = el.Value
Set listEl = jsonArr.GetFirstElement()
Set jsonObj=listEl.Value
tmpstr="天气" + jsonObj.GetElementByName("type" ).Value
tmpstr=tmpstr+" "+ jsonObj.GetElementByName("low" ).Value
tmpstr=tmpstr+" "+ jsonObj.GetElementByName("high" ).Value
Call Source.FieldSetText("weather",tmpstr)
'实时天气预报获取结束
'=============================================
让我们再次在手机或移动设备上再次使用HCL Nomad访问该表单吧
好了,现在我们就基本上实现了一个实时地址和天气功能的Notes应用啦,细节方面,比如显示天气对应的图片,也很容易。大家可以试试看。
今天我们就讲到这里,欢迎继续关注。
更多精彩内容请关注微信公众号“协作者”