图:
由此可以推测http://news.163.com/util/position1.html,是在根据来访者的IP判断所属区域,然后返回一个该地区所对应的区位码,如:56294代表成都。如何让网易来帮我们的站点来访者判断所属区域,并给出天气情况,并显示在自己的站点页面上呢?还得继续分析。。因为http://news.163.com/util/position1.html,此链接一访问就转向到天气情况的链接,而无法查看源码。便猜想。。此页面肯定有些东西。。无奈之下。。WebRequest一下,出现了如下代码:
上面的这段js实现了对来访者IP判断并给出了天气预报结果的链接。Js里的此链接: http://202.108.39.152/ipquery,起到的是判断用户所在地的作用,返回的是来访者所在地省份。分析到此,想要的结果差不多就出来了…
在客户端调用这段js获得天气预报结果的链接地址,然后交给服务端来处理。(为什么要交给后台处理,而不是直接显示呢?)因为直接得出的链接页面上,有多余的链接,还应用了样式(如图一),不便为自己所用,所以得处理掉。客户端调用服务端的方法很多,最初使用了Ajax框架Anthem,实现了过后,觉得有点杀鸡用牛刀的感觉。。无聊之余。。就又用CallBack实现了一次。。感觉恰到好处。。后来又发现。。__doPostBack也可以实现客户端调用服务端方法。。看来实现这么一个功能还真是简单。。。
好了到此就实现了,自己想要的结果:(感觉有点遗憾的是只给出了省会城市的天气预报)
前台页面代码Defaul.aspx:
1
>
后台代码Default.cs:
1
using System;
2
using System.Data;
3
using System.Configuration;
4
using System.Web;
5
using System.Web.Security;
6
using System.Web.UI;
7
using System.Web.UI.WebControls;
8
using System.IO;
9
using System.Net;
10
using Anthem;
11
12
public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
13
#endregion
2
3
4
5
6
7
8
9
10
11
12
13
客户端调用服务端的方法,__doPostBack方式,没有实现服务端的方法体,跟其余两种方式大致一样。当前是采用的CallBack方式调用服务端方法,如果想使用Anthem方式 ,更换onload里第二个function就可以了。