回 帖 发 新 帖 刷新版面

主题:获取天气信息的代码

获取天气信息的代码


2019年1月6日,我发了个利用新浪的天气API获取气象预报的代码,但现在新浪的这个API取不到数据了,不知
其原因,所以下面另外发个获取气象预报的代码。
新建一个工程,在窗体上添加2个按纽,Command1的标题为“天气预报”,Command2的标题为“城市
代码”;再添加2个文本框,Text1用于输入城市名或者省名,Text2用于显示获取到的信息。再添加1个
计时器,用于获取实时天气数据,其Interval=60000(1分钟)。
代码如下:


Dim MyHTTP As Object, t As Integer


Private Sub Form_Load()
Set MyHTTP = CreateObject("Microsoft.XMLHTTP")
weather
End Sub


Private Sub Command1_Click()
weather
End Sub


Private Sub weather() '由城市名查天气
Dim arry(22) As String, st As String, i As Integer, j As Integer, k As Integer

With MyHTTP
  .open "POST", "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName", False
  .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  .send ("theCityName=" & Text1) 'Text1是城市名,中国城市用中文(不要输入“市”字),外国城市用英文
End With

st = MyHTTP.responseText
i = 1

Do
  i = InStr(i, st, "<string>") + 8: If i = 8 Then Exit Do
  j = InStr(i, st, "</string>") - i
  If j > 0 Then arry(k) = Mid(st, i, j) & vbCrLf
  k = k + 1
Loop Until k > 22
Text2 = Join(arry)

st = Replace(Mid(arry(6), InStr(arry(6), " ") + 1), vbCrLf, "") & ";"
i = InStr(arry(10), "气温") + 3
j = InStr(i, arry(10), ";") - i + 1
st = st & Mid(arry(10), i, j)
i = InStr(j, arry(10), "风力") + 3
j = InStr(i, arry(10), ";") - i
st = st & Mid(arry(10), i, j)
Me.Caption = st
End Sub


Private Sub Command2_Click() '由省名查各城市代码
Dim arry() As String, st As String, i As Integer, j As Integer, k As Integer

With MyHTTP
  .open "POST", "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity", False
  .setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
  .send ("byProvinceName=" & Text1) 'Text1是省名,但不要“省”字,如“江苏省”输入“江苏”即可
End With

st = MyHTTP.responseText
i = 1

Do
  i = InStr(i, st, "<string>") + 8: If i = 8 Then Exit Do
  j = InStr(i, st, "</string>") - i
  ReDim Preserve arry(k)
  arry(k) = Mid(st, i, j) & vbCrLf
  k = k + 1
Loop

Text2 = Join(arry)
End Sub


Private Sub Timer1_Timer() '每30分钟获取一次天气数据
t = t + 1: If t = 30 Then t = 0: weather
End Sub


Private Sub Form_Unload(Cancel As Integer)
Set MyHTTP = Nothing
End Sub


简要说明:

一、由城市名查天气
weather()过程根据输入的城市名(国外城市可用英文)或城市代码(不输入默认为上海)可查询当
天的天气实况和生活指数,以及明、后天的天气概况。
输入参数:theCityName=城市名,如城市名有重复,则使用城市代码。如:“上海”或“58367”。
返回数据:其中有23个String,各String的意义如下:
String(0):省份
String(1):城市
String(2):城市代码
String(3):城市图片
String(4):最后更新时间
String(5):当天的最低和最高气温
String(6):当天的天气状况
String(7):当天的风向和风级
String(8):当天的天气趋势图
String(9):当天的天气趋势图
String(10):当前天气实况,包括:气温、风向/风级、湿度、紫外线强度
String(11):当前的各种指数,包括:感冒指数、运动指数、过敏指数、穿衣指数、洗车指数、紫外线指数
String(12):第二天的最低和最高气温
String(13):第二天的天气状况
String(14):第二天的风向和风级
String(15):第二天的天气趋势图
String(16):第二天的天气趋势图
String(17):第三天的最低和最高气温
String(18):第三天的天气状况
String(19):第三天的风向和风级
String(20):第三天的天气趋势图
String(21):第三天的天气趋势图
String(22):被查询的城市或地区的介绍
一维数组arry包含了这23个字符串,你应该根据需要舍取,并在其它的控件上显示出来,请自行设
计。
weather()过程中,最后一小节的代码是为了当窗体最小化时,在系统的任务栏上显示当时天气的3
项主要数据:天气状况、气温、风向和风级。你还可以使窗体的WindowState=1,并将本程序设置为自
启动,这样,只要一开机,就可以在任务栏上看到当时的天气状况。


二、由省名查各城市代码
Command2_Click()过程,根据输入的省名(不要输入“省”字,如“江苏省”输入“江苏”即可)
可查询该省所有城市的城市代码。有的省的县级市也列出了城市代码,有的省则没有列出县级市,不明
白其原因。
输入参数:byProvinceName=省名
返回数据:其中String的个数每个省都不相同。String的前半部分为城市名,后半部分(括号内)
为城市代码。


三、实时天气数据
Timer1_Timer()过程设置为每30分钟获取一次实时天气数据,你可以根据需要更改,但数值改小意
义不大,因为气象台不会很频繁地发布天气数据。并且,这个天气API对于免费用户有访问次数的限制,
24小时之内不得超过50次。


以上代码在Win7旗舰版上通过,未在其它版本验证。

回复列表 (共3个回复)

沙发

424 要求对象,什么意思啊?

板凳

@KingFook 你没有做界面,或者界面的控件不够,或者控件名称与代码不一致,或者一边是控件数组一边是独立控件

3 楼

生活小秘方是指那些簡單實用、能夠改善生活品質的小技巧和方法。這些小秘方通常是通過日常生活實踐中發現和累積起來的,可以涉及各種生活領域,如家居、烹飪、衣著、美容、健康等。生活小秘方的特點是簡單易行,不需要太多專業知識或工具,可以在家裡或辦公室等常見場所實踐。此外,生活小秘方通常能夠幫助人們節省時間和金錢,提高生活效率和品質,因此深受人們的喜愛和追捧。生活小秘方可以通過網站、雜誌、書籍和社交媒體等渠道獲得,也可以從親友之間分享和傳授。

我来回复

您尚未登录,请登录后再回复。点此登录或注册