• 最新公告
  • 联系我们
  • 地址:湖北武汉三环科技园
  • 电话:159116031100
  • 传真:027-68834628
  • 邮箱:mmheng@foxmail.com
  • 当前所在位置:首页 - 当地天气
  • 根据IP获取当地天气预报的实现
  •   访问,首页的栏目里有当地的天气预报。可以猜想,这里的天气预报,应该是根据来访者的ip判断其所在地给出当地的天气情况。问了一些朋友,也了这一点。项目里也需要天气预报这个小栏目,同事做过一个(从其他站点抓取的),不过实现不了根据IP显示当地的天气情况,需要用户自行选择,而且抓取的站点属于小站….其可靠性值得怀疑。。所以就萌生了抓取网易的天气预报的想法。。。对页面进行分析。。发现显示天气预报的区域是一个IFrame,IFrame里嵌入了如下链接, 对这个地址访问直接跳转到另外一个链接,此链接显示了天气情况,如图:

      由此可以推测是在根据来访者的IP判断所属区域,然后返回一个该地区所对应的区位码,如: 56294代表成都。如何让网易来帮我们的站点来访者判断所属区域,并给出天气情况,并显示在自己的站点页面上呢?还得继续分析。。因为此链接一访问就转向到天气情况的链接,而无法查看源码。便猜想。。此页面肯定有些东西。。无奈之下。。WebRequest一下,出现了如下代码:

      2varcity=newArray(安徽,,山东,,湖北,山西,福建,湖南,陕西,甘肃,,上海,广东,江苏,四川,广西,江西,天津,贵州,辽宁,,海南,,新疆,,,云南,河南,青海,浙江,重庆);

      的这段js实现了对来访者IP判断并给出了天气预报结果的链接。Js里的此链接: ,起到的是判断用户所在地的作用,返回的是来访者所在地省份。分析到此,想要的结果差不多就出来了…

      在客户端调用这段js获得天气预报结果的链接地址,然后交给服务端来处理。(为什么要交给后台处理,而不是直接显示呢?)因为直接得出的链接页面上,有多余的链接,还应用了样式(如图一),不便为自己所用,所以得处理掉。客户端调用服务端的方法很多,最初使用了Ajax框架Anthem,实现了过后,觉得有点杀鸡用牛刀的感觉。。无聊之余。。就又用CallBack实现了一次。。感觉恰到好处。。后来又发现。。__doPostBack也可以实现客户端调用服务端方法。。看来实现这么一个功能还真是简单。。。

      7varcity=newArray(安徽,,山东,,湖北,山西,福建,湖南,陕西,甘肃,,上海,广东,江苏,四川,广西,江西,天津,贵州,辽宁,,海南,,新疆,,,云南,河南,青海,浙江,重庆);

      78//客户端调用服务端方法实现对天气预报结果链接的页面内容进行解析,_doPostBack实现方式

      84//客户端调用服务端方法实现对天气预报结果链接的页面内容进行解析,CallBack实现方式