[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[VBS]天气预报 v2.0

鉴于此贴http://www.bathome.net/viewthread.php?tid=64&page=1#pid138,由于时间较久,获取天气的网址估计已失效。今天我也献丑写一个。
开始时我写了个功能比较强大的VBS,但是后来发现网址是用shtml格式的,顿时,我崩溃了。。。
因为Microsoft.XMLHTTP组件不支持获取shtml格式网页信息(希望不要有人跟我一样悲剧)。     T_T
没办法,实在没时间和勇气再写一个比较强大的VBS了。
就简单写了一个。T_T
本人菜鸟,献丑。
                                    —— Broly    2010.12.22

--------------------------------------------------------------

[VBS]天气预报 v2.0    2010.12.26
[VBS]天气预报 v1.0    2010.12.22
  1. '//VBS获取天气预报 @CODE BY Broly
  2. '//我的博客:http://blog.sina.com.cn/brolyblog
  3. '//声明:此VBS由Broly制作,部分数据来自互联网,代码仅作学习研究之用。使用前请三思而行,产生不良后果均与本人无关!
  4. Dim re , colMa , fso , f
  5. Dim url,txt
  6. '下面的这个地址是广州的。如果其他城市,可以去weather.news.qq.com找对应城市的url修改即可
  7. url="http://weather.news.qq.com/inc/07_dc292.htm"
  8. txt=getHTTPPage(url)
  9. Set re=New RegExp
  10. re.Global=True
  11. re.IgnoreCase=True
  12. re.Pattern="[\u4e00-\u9fa5]+</strong>"
  13. Set colMa=re.Execute(txt)
  14. title="天气预报[广州] v2.0 @BY Broly"
  15. city=Left(colMa.Item(0),Len(colMa.Item(0))-9)
  16. content="城市:"&city&Space(8)&"今天是"&Date&vbCrLf&vbCrLf
  17. For i=0 To 2
  18.   Select Case i
  19.     Case 0:content=content & "今天: "
  20.     Case 1:content=content & "明天: "
  21.     Case 2:content=content & "后天: "
  22.   End Select
  23.   re.Pattern=">([\u4e00-\u9fa5]*)<br>(.*)\r*\n*<br>"
  24.   content=content & re.Replace(re.Execute(txt).Item(i),"$1") & Space(8)
  25.   content=content & re.Replace(re.Execute(txt).Item(i),"$2") & Space(8)
  26.   re.Pattern="<br>([\u4e00-\u9fa5]+.*)</td>"
  27.   content=content & re.Replace(re.Execute(txt).Item(i),"$1") & vbCrLf
  28. Next
  29. MsgBox content,vbOKonly,title
  30. WScript.Quit
  31. Function getHTTPPage(url)
  32. Dim Http
  33. Set Http=CreateObject("MSXML2.XMLHTTP")
  34. Http.open "GET",url,false
  35. Http.send()
  36. If Http.readystate<>4 then
  37. Exit Function
  38. End If
  39. getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
  40. Set http=nothing
  41. If err.number<>0 then err.Clear
  42. End Function
  43. Function BytesToBstr(body,Cset)
  44. Dim objstream
  45. Set objstream =CreateObject("adodb.stream")
  46. With objstream
  47.   .Type = 1
  48.   .Mode = 3
  49.   .Open
  50.   .Write body
  51.   .Position = 0
  52.   .Type = 2
  53.   .Charset = Cset
  54.   BytesToBstr = .ReadText
  55.   .Close
  56. End with
  57. Set objstream = nothing
  58. End Function
复制代码

[ 本帖最后由 broly 于 2011-1-2 12:26 编辑 ]
---学无止境---

支持LZ尝试将 XMLHTTP 组件连接写成类,呵呵

TOP

回复2楼

首先感谢2楼的支持。
最近时间比较少。待有空了,就会试试2楼的提议,写成一个类

TOP

怎么获得其他城市的网页呀。

TOP

>因为Microsoft.XMLHTTP组件不支持获取shtml格式网页信息

这可不要乱说!小心Bill Gates控告你造谣~

不管扩展名是什么,如php,jsp,asp,aspx等等甚至任意扩展名,客户端浏览器打开后看到的都是HTML。这些东西对服务器端才是有用的。比如一个about.php文件,在服务器上内容可能只有<?php phpinfo() ?>一行,但在浏览器看可能上是一个有几十KB、丰富内容的网页,但文件名还是about.php

TOP

回复 5楼 的帖子

你小子玩一语双关啊~
Bill Gates开始以为你指4楼的同学。

使用Microsoft.XMLHTTP组件获取shtml格式网页信息时是提示错误的,难道权限不够?
你的看法是什么?
---学无止境---

TOP

试过这个完全没问题
http://tech.sina.com.cn/s/2006-04-24/1654915865.shtml

那个提示错误的网址是什么?提示信息是什么?

TOP

回复 4楼 的帖子

1.进入http://weather.news.qq.com/preend.htm选择城市
2.待网页跳转好了,你看看URL地址,一般是http://weather.news.qq.com/preend.htm这个后面有个问号?和一个名称,比如广州的是dc292
3.提取这个字符串,把VBS中的dc292改为提取到的字符串就可以了
^_^
---学无止境---

TOP

回复 7楼 的帖子

那奇怪了。你提取一下http://www.weather.com.cn/weather/101280101.shtml这个网址,看什么情况
---学无止境---

TOP

因为那个网页是用UTF-8编码的。

TOP

我就说你1月2号会上线嘛!
顺便说说,用 Http.responseText 岂不是跟简洁?
1

评分人数

    • broly: 春哥果然无所不能。信春哥,得永生!!技术 + 1

TOP

responseText只识别UTF-8编码的网页,GB2312就会出乱码。

其实进一步的原因是那些代码都是copy的,估计楼主对Microsoft.XMLHTTP组件并没有完全掌握(这种东西完全得靠自己去资料了)。
1

评分人数

TOP

回复 12楼 的帖子

你说的很对,那些代码是从网上摘取的。
Microsoft.XMLHTTP我只是掌握了一部分,并没有很深层的了解。还有adodb.stream这个也是,都是只是学到一点。我找过相关的资料,都是些比较零散的,只有些概念(比较抽象),没有实例可以看看。
也曾在msdn找过相关的信息,奈何没找到什么有用的。(搜索方式不对?)
不知道powerbat能不能分享你的学习资料,或者推荐下学习的方法呢?3Q
---学无止境---

TOP

回复 13楼 的帖子

抱歉我手上也没有,网上的确只有一些零散的东西,但对VBS应用来说,复制的那些代码基本上算主要内容了。
关于ADO这个网站有讲解:
http://www.w3school.com.cn/ado/index.asp

TOP

谢谢楼主回答。嘿嘿,正想做个这个。

TOP

返回列表