标题: [VBS]天气预报 v2.0 [打印本页]
作者: broly 时间: 2010-12-20 18:14 标题: [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- '//VBS获取天气预报 @CODE BY Broly
- '//我的博客:http://blog.sina.com.cn/brolyblog
- '//声明:此VBS由Broly制作,部分数据来自互联网,代码仅作学习研究之用。使用前请三思而行,产生不良后果均与本人无关!
- Dim re , colMa , fso , f
- Dim url,txt
- '下面的这个地址是广州的。如果其他城市,可以去weather.news.qq.com找对应城市的url修改即可
- url="http://weather.news.qq.com/inc/07_dc292.htm"
- txt=getHTTPPage(url)
- Set re=New RegExp
- re.Global=True
- re.IgnoreCase=True
- re.Pattern="[\u4e00-\u9fa5]+</strong>"
- Set colMa=re.Execute(txt)
- title="天气预报[广州] v2.0 @BY Broly"
- city=Left(colMa.Item(0),Len(colMa.Item(0))-9)
- content="城市:"&city&Space(8)&"今天是"&Date&vbCrLf&vbCrLf
- For i=0 To 2
- Select Case i
- Case 0:content=content & "今天: "
- Case 1:content=content & "明天: "
- Case 2:content=content & "后天: "
- End Select
- re.Pattern=">([\u4e00-\u9fa5]*)<br>(.*)\r*\n*<br>"
- content=content & re.Replace(re.Execute(txt).Item(i),"$1") & Space(8)
- content=content & re.Replace(re.Execute(txt).Item(i),"$2") & Space(8)
- re.Pattern="<br>([\u4e00-\u9fa5]+.*)</td>"
- content=content & re.Replace(re.Execute(txt).Item(i),"$1") & vbCrLf
- Next
- MsgBox content,vbOKonly,title
- WScript.Quit
-
- Function getHTTPPage(url)
- Dim Http
- Set Http=CreateObject("MSXML2.XMLHTTP")
- Http.open "GET",url,false
- Http.send()
- If Http.readystate<>4 then
- Exit Function
- End If
- getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312")
- Set http=nothing
- If err.number<>0 then err.Clear
- End Function
- Function BytesToBstr(body,Cset)
- Dim objstream
- Set objstream =CreateObject("adodb.stream")
- With objstream
- .Type = 1
- .Mode = 3
- .Open
- .Write body
- .Position = 0
- .Type = 2
- .Charset = Cset
- BytesToBstr = .ReadText
- .Close
- End with
- Set objstream = nothing
- End Function
复制代码
[ 本帖最后由 broly 于 2011-1-2 12:26 编辑 ]
作者: youxi01 时间: 2010-12-22 09:05
支持LZ尝试将 XMLHTTP 组件连接写成类,呵呵
作者: broly 时间: 2010-12-22 19:59 标题: 回复2楼
首先感谢2楼的支持。
最近时间比较少。待有空了,就会试试2楼的提议,写成一个类
作者: BillGates 时间: 2011-1-2 19:03
怎么获得其他城市的网页呀。
作者: powerbat 时间: 2011-1-2 21:45
>因为Microsoft.XMLHTTP组件不支持获取shtml格式网页信息
这可不要乱说!小心Bill Gates控告你造谣~
不管扩展名是什么,如php,jsp,asp,aspx等等甚至任意扩展名,客户端浏览器打开后看到的都是HTML。这些东西对服务器端才是有用的。比如一个about.php文件,在服务器上内容可能只有<?php phpinfo() ?>一行,但在浏览器看可能上是一个有几十KB、丰富内容的网页,但文件名还是about.php
作者: broly 时间: 2011-1-2 22:40 标题: 回复 5楼 的帖子
你小子玩一语双关啊~
Bill Gates开始以为你指4楼的同学。
使用Microsoft.XMLHTTP组件获取shtml格式网页信息时是提示错误的,难道权限不够?
你的看法是什么?
作者: powerbat 时间: 2011-1-2 22:52
试过这个完全没问题
http://tech.sina.com.cn/s/2006-04-24/1654915865.shtml
那个提示错误的网址是什么?提示信息是什么?
作者: broly 时间: 2011-1-2 22:54 标题: 回复 4楼 的帖子
1.进入http://weather.news.qq.com/preend.htm选择城市
2.待网页跳转好了,你看看URL地址,一般是http://weather.news.qq.com/preend.htm这个后面有个问号?和一个名称,比如广州的是dc292
3.提取这个字符串,把VBS中的dc292改为提取到的字符串就可以了
^_^
作者: broly 时间: 2011-1-2 22:57 标题: 回复 7楼 的帖子
那奇怪了。你提取一下http://www.weather.com.cn/weather/101280101.shtml这个网址,看什么情况
作者: powerbat 时间: 2011-1-2 23:15
因为那个网页是用UTF-8编码的。
作者: Spring 时间: 2011-1-2 23:55
我就说你1月2号会上线嘛!
顺便说说,用 Http.responseText 岂不是跟简洁?
作者: powerbat 时间: 2011-1-3 00:05
responseText只识别UTF-8编码的网页,GB2312就会出乱码。
其实进一步的原因是那些代码都是copy的,估计楼主对Microsoft.XMLHTTP组件并没有完全掌握(这种东西完全得靠自己去资料了)。
作者: broly 时间: 2011-1-3 08:03 标题: 回复 12楼 的帖子
你说的很对,那些代码是从网上摘取的。
Microsoft.XMLHTTP我只是掌握了一部分,并没有很深层的了解。还有adodb.stream这个也是,都是只是学到一点。我找过相关的资料,都是些比较零散的,只有些概念(比较抽象),没有实例可以看看。
也曾在msdn找过相关的信息,奈何没找到什么有用的。(搜索方式不对?)
不知道powerbat能不能分享你的学习资料,或者推荐下学习的方法呢?3Q
作者: powerbat 时间: 2011-1-3 12:47 标题: 回复 13楼 的帖子
抱歉我手上也没有,网上的确只有一些零散的东西,但对VBS应用来说,复制的那些代码基本上算主要内容了。
关于ADO这个网站有讲解:
http://www.w3school.com.cn/ado/index.asp
作者: BillGates 时间: 2011-1-3 20:11
谢谢楼主回答。嘿嘿,正想做个这个。
作者: LJY4.0 时间: 2022-4-25 19:13
拒绝访问
源:msxml3.dll
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |