解析来访IP获取163天气显示当地天气预报的实现(源码)

www.163.com,首页的栏目里有当地的天气预报。可以猜想,这里的天气预报,应该是根据来访者的ip判断其所在地给出当地的天气情况。问了一些朋友,也证实了这一点。项目里也需要天气预报这个小栏目,同事做过一个(从其他站点抓取的),不过实现不了根据IP显示当地的天气情况,需要用户自行选择,而且抓取的站点属于小站….其可靠性值得怀疑。。所以就萌生了抓取网易的天气预报的想法。。。对页面进行分析。。发现显示天气预报的区域是一个IFrameIFrame里嵌入了如下链接http://news.163.com/util/position1.html对这个地址访问直接跳转到另外一个链接http://news.163.com/weather/news/qx1/56294.html此链接显示了天气情况,如图1.JPG
 

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

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

好了到此就实现了,自己想要的结果:(感觉有点遗憾的是只给出了省会城市的天气预报)

2.JPG
前台页面代码Defaul.aspx:

1 <% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " Default.aspx.cs "  Inherits = " _Default "   ResponseEncoding = " GB2312 "   %>
  
2 <! DOCTYPE html PUBLIC  " -//W3C//DTD XHTML 1.0 Transitional//EN "   " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
  
3 < html xmlns = " http://www.w3.org/1999/xhtml " >
  
4 < head runat = " server " >
  
5 < title ></ title >
  
6 < script >
  7var city 
=   new  Array( " 安徽 " , " 黑龙江 " , " 山东 " , " 北京 " , " 湖北 " , " 山西 " , " 福建 " , " 湖南 " , " 陕西 " , " 甘肃 " , " 吉林 " , " 上海 " , " 广东 " , " 江苏 " , " 四川 " , " 广西 " , " 江西 " , " 天津 " , " 贵州 " , " 辽宁 " , " 西藏 " , " 海南 " , " 内蒙古 " , " 新疆 " , " 河北 " , " 宁夏 " , " 云南 " , " 河南 " , " 青海 " , " 浙江 " , " 重庆 " );
  8var weaths 
=   new  Array( ' 58321 ' , ' 50953 ' , ' 54823 ' , ' 54511 ' , ' 57494 ' , ' 53772 ' , ' 59134 ' , ' 57679 ' , ' 57036 ' , ' 52889 ' , ' 54172 ' , ' 58367 ' , ' 59287 ' , ' 58238 ' , ' 56294 ' , ' 59431 ' , ' 58606 ' , ' 54527 ' , ' 57816 ' , ' 54342 ' , ' 55591 ' , ' 52856 ' , ' 53463 ' , ' 51463 ' , ' 53698 ' , ' 53614 ' , ' 56778 ' , ' 57083 ' , ' 52866 ' , ' 58457 ' , ' 57516 ' );
  
9
 10var NTES_WeatherAddr 
=  GetCookie( " NTES_WeatherAddr " );
 11
if  ( ! NTES_WeatherAddr) {
 
12    var loc = GetCookie("theaddr");
 
13    if(!loc){
 
14        document.write("<script type='text/javascript' src='http://202.108.39.152/ipquery'><" + "/script>");
 
15    }

 
16}
 
 
17
 18function getCookieVal (offset) 
{
 
19  var endstr = document.cookie.indexOf (";", offset);
 
20  if (endstr == -1)
 
21  endstr = document.cookie.length;
 
22  return unescape(document.cookie.substring(offset, endstr));
 
23}

 
24
 25function GetCookie (name) 
{
 
26  var arg = name + 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值