让论坛轻松拥有天气预报功能

技术与开发

很多网站都有这个功能,访问者登录时可以看到自己所在城市未来几天的天气预报,这个功能我觉得特别实用,我想在自己的论坛(ASP论坛)中提供这样的功能,在没有气象局提供天气预报信息的情况下,怎么实现呢?

我们可以设计一个天气预报插件(下载地址:http://www.cpcw.com/bzsoft),安装后即可实现这个功能了。设计插件时,先采集有天气预报信息的网页(我们采集的是雅虎中国的天气频道),并通过分析网页内容,提取我们需要的天气预报信息,再获取访问者的IP地址并判断出该IP地址所在城市是什么,最后将天气预报信息与城市匹配即可实现根据访问者所在城市显示当地的天气预报的功能了。如果改变采集的内容,还可以制作出不同的插件。

小知识:什么是采集?

采集就是将网络上自己需要的资源收集起来,如将某个网站的新闻内容、图片、软件等自动下载到自己网站中。

第一步 采集天气预报信息

要设计天气预报插件,天气预报信息是必不可少的,怎么获取这个信息呢?我们可以利用网站的天气预报频道,采集其中的天气预报信息来解决这个问题。新建一个ASP文件,在文件中输入采集代码,其中关键代码如下所示(完整代码下载地址:http://www.cpcw.com/bzsoft):

'getContent函数的作用是利用XMLHTTP对象,创建一个HTTP请求,并接收服务器发送回来的相关数据;函数参数URL为请求的页面网址。

Function getContent(url)

on error resume next

Set xmlhttp = CreateObject("Microsoft.XMLHTTP")

With xmlhttp

.Open "Get", url, False, "", ""

.Send

getContent = .ResponseBody

End With

Set xmlhttp = Nothing

End Function

'BytesToBstr函数的作用是读取取回来的页面的文字信息,参数body为取回的页面内容;参数bm为取回的页面编码

Function BytesToBstr(body,bm)

dim objstream

set objstream = Server.CreateObject("Adodb"&"."&"Stream")

with objstream

.Type = 1

.Mode =3

.Open

.Write body

.Position = 0

.Type = 2

.Charset = bm

BytesToBstr = .ReadText

.Close

end with

第二步 分析采集内容,提取天气预报信息

要从采集的内容中提取我们需要的天气预报信息,就必须分析采集的页面内容。在文件中输入分析代码,其中关键代码如下所示(完整代码下载地址:http://www.cpcw.com/bzsoft):

'selectContent函数的作用是分析输入的内容,并提取相关有用信息;参数str为需要提取的内容。

Sub selectContent(str)

set reg=new Regexp

reg.Multiline=True

reg.Global=True

reg.IgnoreCase=True

reg.Pattern="<p class=""l"" style=""margin-top:18px;""><span class=""f14""><strong>((.|\n)*?)

Set matches = reg.execute(str)

tq=""

For Each match1 in matches

tq=tq&"|||"&match1.Value

第三步 通过IP地址判断访问者所在城市

天气预报信息有了,但是怎样判断出访问者的城市呢?我们可以通过ASP提供的Request的IP属性获取访问者IP地址,然后再通过IP数据库查询相关IP地址所属城市(IP数据库下载地址:http://www.cpcw.com/bzsoft)。在文件中输入相关代码即可。

第四步 显示访问者城市的天气预报信息

最后,还要将访问者的城市和该城市的天气预报匹配起来。输入如下代码就可以完成天气预报插件的开发,将插件放入ASP论坛中即可得到想要的效果了。

city=getCity()

response.write ""&city&"最近三天天气预报:</strong><br />"

if city="本机测试,城市默认为重庆" then

city="重庆"

end if

url="http://weather.cn.yahoo.com/weather.html?city="&server.urlencode(city)

selectContent(getPage(url,"UTF-8"))

总结

我们设计的天气预报插件程序使用的是ASP动态网页技术,如果大家有兴趣的话,还可以使用JS+XMLHTTP模式来开发出无刷新的天气预报插件。此外,改变采集内容,还可以打造出mp3插件、新闻插件、图片插件等。