在Notes V10应用中获取实时天气预报等信息

#dominoforever

大家好,才是真的好。我们很少讲述Domino V10新的LotusScript类以及其作用,今天我们通过一个小的实时天气预报应用的Demo例子来说明V10中的几个LotusScript新类的具体运用。

正如我们所说,过去数年,随着JSON数据格式的广泛运用,各种平台和解决方案推出了大量基于JSON格式的API接口,帮助用户方便地进行数据访问等操作,从简单的访问天气预报、语言翻译,到复杂的语音和图像识别、邮件和日历等等,现在Domino V10中,开发人员可以采用LotusScript中新提供的API接口来进行更强大的Web处理,就是我们所说的诸如NotesHTTPRequest、NotesJSONNavigator等类。

不过,一切的前提是,你需要掌握最基础的Notes表单和视图设计知识,至少要了解Notes表单和视图等概念。

一、天气预报公共API接口

今天我们采用免费的API,即全国天气 JSON API接口来获取天气预报。获取格式类似于http://t.weather.sojson.com/api/weather/city/101010100,我们可以直接在浏览器中打开,可以看到是JSON数据,如下图
在Notes V10应用中获取实时天气预报等信息
URL地址最后是101010100,为具体城市的编码,可以通过站点http://www.cnblogs.com/danyueweb/p/3521973.html查询不同城市的代码,如下图:
在Notes V10应用中获取实时天气预报等信息
在URL地址后面写入不同城市编码,可获取不同城市的实时天气预报情况。

二、Notes中的表单和视图

在Demo应用中,我们设计了两个表单(城市、天气预报)和一个视图(城市)。为了Notes中查询城市代码方便,我们利用城市表单和视图,把一些重点城市名称和编号提前录入到Notes应用中(需要先设计一个Notes表单‘城市’和视图‘城市’,用来创建、保存和展示城市名和城市编号),其中视图中的城市一列需要排序。如下图:
在Notes V10应用中获取实时天气预报等信息
紧接着,我们设计一个“天气预报”表单,表单含字段“city”,类型为“对话框列表”,它的选项值就来自于刚才创建的视图(此处名称为city);再创建一个展现天气预报结果的字段“weather”(普通文本字段,最好是可计算类型);如下图:
在Notes V10应用中获取实时天气预报等信息
三、代码内容

重点是"city"字段旁边的一个按钮,我们取名为“查询”,而后为它写入LotusScript脚本,如下图:
在Notes V10应用中获取实时天气预报等信息
具体的LotusScript代码如:

'声明该代码中用到的变量
Dim ns As New NotesSession
Dim ws As New NotesUIWorkspace
Dim webreq As NotesHTTPRequest
Dim url As String
Dim json As Variant
Dim info As String
Dim cityname As String
Dim cityno As String
Dim jsonnav As NotesJSONNavigator

'判断用户是否选择了城市
If ws.CurrentDocument.FieldGetText("city")="" Then
	Msgbox "请选择要查询天气的城市名称!",0+16,"警告"
	Exit Sub
End If

'根据所选城市查找城市编号
cityname=ws.CurrentDocument.FieldgetText("city")
If Not ns.CurrentDatabase.GetView("city").GetDocumentByKey(cityname) Is Nothing Then
	cityno= ns.CurrentDatabase.GetView("city").GetDocumentByKey(cityname).no(0)
Else
	Msgbox "未查询到城市编号!",0+16,"警告"
	Exit Sub
End If

'获取JSON的站点地址,其中cityno就是我们获取的城市编号
url="http://t.weather.sojson.com/api/weather/city/"+cityno
    ‘使用到新的NotesHTTPRequest类
Set webreq=ns.CreateHTTPRequest()
webreq.PreferStrings=True
'通过NotesHTTPRequest类解析URL地址来获取JSON数据
json=webreq.Get(url)

'去掉json数据中的空格和回车
newjson = Replace(Replace(json, Chr(13), ""),Chr(10),"")

'开始获取天气预报信息,结合具体的JSON数据,使用到了NotesJSONNavigator类以及该类的一个方法Getelementbypointer,找到需要的键值,chr(13)为回车符,该段代码完全可以分为几段较短代码,从提高可读性。

Set jsonnav = ns.CreateJSONNavigator(newjson)
info="当前时间:"+ jsonnav.Getelementbypointer("/time").value+Chr(13)+"当前温度:"+jsonnav.Getelementbypointer("/data/wendu").value _
+Chr(13)+"当前湿度:"+jsonnav.Getelementbypointer("/data/shidu").value+Chr(13)+"感冒指数:"+jsonnav.Getelementbypointer("/data/ganmao").value

'最后写入天气预报信息到weather字段中
Call ws.CurrentDocument.Document.ReplaceItemValue("weather",info)
Call ws.CurrentDocument.Refresh

最后,我们在Notes客户机中进行预览。先选择一个城市:
在Notes V10应用中获取实时天气预报等信息
而后,点击“查询”按钮。这样,我们就通过指定的公共API接口的URL地址获取JSON数据,并解析出当前的实时天气预报数据,最后写入到表单上,从而得到结果。如下图:
在Notes V10应用中获取实时天气预报等信息
本篇是两个新类的基础知识运用介绍,主要目的是抛砖引玉,希望大家也可以举一反一,进一步利用Domino V10中的新类实现各种超乎想象的功能。

今天我们就讲到这里吧。

更多精彩内容可关注微信公众号:“协作者”
在Notes V10应用中获取实时天气预报等信息