<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java學(xué)習(xí)

    java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問(wèn)或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂(lè)園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

     

    根據(jù)IP獲取當(dāng)?shù)靥鞖忸A(yù)報(bào)的實(shí)現(xiàn)

    (zhuan)http://bbs.99081.com/viewthread.php?tid=346101根據(jù)IP獲取當(dāng)?shù)靥鞖忸A(yù)報(bào)的實(shí)現(xiàn)



    訪問(wèn)www.163.com, 首頁(yè)的欄目里有當(dāng)?shù)氐奶鞖忸A(yù)報(bào)。可以猜想,這里的天氣預(yù)報(bào),應(yīng)該是根據(jù)來(lái)訪者的ip判斷其所在地給出當(dāng)?shù)氐奶鞖馇闆r。問(wèn)了一些朋友,也證實(shí)了這一點(diǎn)。項(xiàng)目 里也需要天氣預(yù)報(bào)這個(gè)小欄目,同事做過(guò)一個(gè)(從其他站點(diǎn)抓取的),不過(guò)實(shí)現(xiàn)不了根據(jù)IP顯示當(dāng)?shù)氐奶鞖馇闆r,需要用戶自行選擇,而且抓取的站點(diǎn)屬于小 站….其可靠性值得懷疑。。所以就萌生了抓取網(wǎng)易的天氣預(yù)報(bào)的想法。。。對(duì)頁(yè)面進(jìn)行分析。。發(fā)現(xiàn)顯示天氣預(yù)報(bào)的區(qū)域是一個(gè)IFrame,IFrame里嵌 入了如下鏈接http: //news.163.com/util/position1.html,對(duì)這個(gè)地址訪問(wèn)直接跳轉(zhuǎn)到另外一個(gè)鏈接http://news.163.com/weather/news/qx1/56294.html,此鏈接顯示了天氣情況,如圖:



    由此可以推測(cè)http://news.163.com/util/position1.html, 是在根據(jù)來(lái)訪者的IP判斷所屬區(qū)域,然后返回一個(gè)該地區(qū)所對(duì)應(yīng)的區(qū)位碼,如: 56294代表成都。如何讓網(wǎng)易來(lái)幫我們的站點(diǎn)來(lái)訪者判斷所屬區(qū)域,并給出天氣情況,并顯示在自己的站點(diǎn)頁(yè)面上呢?還得繼續(xù)分析。。因?yàn)閔ttp: //news.163.com/util/position1.html,此鏈接一訪問(wèn)就轉(zhuǎn)向到天氣情況的鏈接,而無(wú)法查看源碼。便猜想。。此頁(yè)面肯定有 些東西。。無(wú)奈之下。。WebRequest一下,出現(xiàn)了如下代碼:


    以下是引用片段:
    1<script language="Javascript">  
    2var city = new Array("安徽","黑龍江","山東","北京","湖北","山西","福建","湖南","陜西","甘肅","吉林","上海","廣 東","江蘇","四川","廣西","江西","天津","貴州","遼寧","西藏","海南","內(nèi)蒙古","新疆","河北","寧夏","云 南","河南","青海","浙江","重慶";  
    3var 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');  
    4  
    5function getCookieVal (offset) {  
    6  var endstr = document.cookie.indexOf (";", offset);  
    7  if (endstr == -1)  
    8  endstr = document.cookie.length;  
    9  return unescape(document.cookie.substring(offset, endstr));  
    10}  
    11function GetCookie (name) {  
    12  var arg = name + "=";  
    13  var alen = arg.length;  
    14  var clen = document.cookie.length;  
    15  var i = 0;  
    16  while (i < clen) {  
    17    var j = i + alen;  
    18    if (document.cookie.substring(i, j) == arg)  
    19      return getCookieVal (j);  
    20    i = document.cookie.indexOf(" ", i) + 1;  
    21    if (i == 0)  
    22       break;  
    23  }  
    24  return "";  
    25}  
    26function SetCookie(cookieName,cookieValue,nDays) {  
    27 var today = new Date();  
    28 var expire = new Date();  
    29 if (nDays==null || nDays==0) nDays=1;  
    30 expire.setTime(today.getTime() + 3600000*24*nDays);  
    31 document.cookie = cookieName+"="+escape(cookieValue) + ";path=/;domain=.163.com;expires="+expire.toGMTString();  
    32}  
    33function getCityWeatherID(cityname){  
    34    for(i=0;i<city.length;i++){  
    35    if(city==cityname){  
    36        return weaths;  
    37        }  
    38    }  
    39    return "54511";  
    40}  
    41  
    42var NTES_WeatherAddr = GetCookie("NTES_WeatherAddr";  
    43if (!NTES_WeatherAddr){  
    44    var loc = GetCookie("theaddr";  
    45    if(!loc){  
    46        document.write("<script type='text/javascript' src='http://202.108.39.152/ipquery'><" + "/script>");  
    47    }  
    48}  
    49</script>  
    50<script>  
    51if (!NTES_WeatherAddr){  
    52    NTES_WeatherAddr=getCityWeatherID(loc);  
    53}  
    54window.location.;  
    55</script>  
    56  
    57

    上面的這段js實(shí)現(xiàn)了對(duì)來(lái)訪者IP判斷并給出了天氣預(yù)報(bào)結(jié)果的鏈接。Js里的此鏈接: http://202.108.39.152/ipquery,起到的是判斷用戶所在地的作用,返回的是來(lái)訪者所在地省份。分析到此,想要的結(jié)果差不多就出來(lái)了…

    在客戶端調(diào)用這段js獲得天氣預(yù)報(bào)結(jié)果的鏈接地址,然后交給服務(wù)端來(lái)處理。(為什么要交給后臺(tái)處理,而不是直接顯示呢?)因?yàn)橹苯拥贸龅逆溄禹?yè)面上, 有多余的鏈接,還應(yīng)用了樣式(如圖一),不便為自己所用,所以得處理掉。客戶端調(diào)用服務(wù)端的方法很多,最初使用了Ajax框架Anthem,實(shí)現(xiàn)了過(guò)后, 覺(jué)得有點(diǎn)殺雞用牛刀的感覺(jué)。。無(wú)聊之余。。就又用CallBack實(shí)現(xiàn)了一次。。感覺(jué)恰到好處。。后來(lái)又發(fā)現(xiàn)。。__doPostBack也可以實(shí)現(xiàn)客戶 端調(diào)用服務(wù)端方法。。看來(lái)實(shí)現(xiàn)這么一個(gè)功能還真是簡(jiǎn)單。。。

    前臺(tái)頁(yè)面代碼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("安徽","黑龍江","山東","北京","湖北","山西","福建","湖南","陜西","甘肅","吉林","上海","廣 東","江蘇","四川","廣西","江西","天津","貴州","遼寧","西藏","海南","內(nèi)蒙古","新疆","河北","寧夏","云 南","河南","青海","浙江","重慶");
      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");
    11if (!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 + "=";
    27  var alen = arg.length;
    28  var clen = document.cookie.length;
    29  var i = 0;
    30  while (i < clen) {
    31    var j = i + alen;
    32    if (document.cookie.substring(i, j) == arg)
    33      return getCookieVal (j);
    34    i = document.cookie.indexOf(" ", i) + 1;
    35    if (i == 0)
    36       break;
    37  }
    38  return "";
    39}
    40
    41function SetCookie(cookieName,cookieValue,nDays) {
    42 var today = new Date();
    43 var expire = new Date();
    44 if (nDays==null || nDays==0) nDays=1;
    45 expire.setTime(today.getTime() + 3600000*24*nDays);
    46 document.cookie = cookieName+"="+escape(cookieValue) + ";path=/;domain=.163.com;expires="+expire.toGMTString();
    47}
    48
    49//根據(jù)Ip服務(wù)器返回的省份名稱獲取對(duì)應(yīng)的編號(hào)
    50function getCityWeatherID(cityname){
    51    for(i=0;i<city.length;i++){
    52    if(city==cityname){
    53        return weaths;
    54        }
    55    }
    56    return "57816";
    57}
    58
    59//獲取所在地天氣預(yù)報(bào)結(jié)果的鏈接
    60function getWeatherUrl(){
    61if (!NTES_WeatherAddr){
    62    NTES_WeatherAddr=getCityWeatherID(loc);
    63     
    64}
    65var addr="http://news.163.com/weather/news/qx1/"+NTES_WeatherAddr+".html";
    66document.form1.Text1.value=addr;
    67}
    68
    69//客戶端調(diào)用服務(wù)端方法實(shí)現(xiàn)對(duì)天氣預(yù)報(bào)結(jié)果鏈接的頁(yè)面內(nèi)容進(jìn)行解析,Anthem實(shí)現(xiàn)方式
    70function showWeatherByAnthem() {
    71    Anthem_InvokePageMethod("ShowWeatherByAnthem", [], getServerResult);
    72}
    73
    74function getServerResult(result) {
    75    document.getElementById("result").innerHTML = result.value;
    76}
    77
    78//客戶端調(diào)用服務(wù)端方法實(shí)現(xiàn)對(duì)天氣預(yù)報(bào)結(jié)果鏈接的頁(yè)面內(nèi)容進(jìn)行解析,_doPostBack實(shí)現(xiàn)方式
    79function showWeatherBylink()
    80{
    81    __doPostBack('LinkButton1','');
    82}
    83
    84//客戶端調(diào)用服務(wù)端方法實(shí)現(xiàn)對(duì)天氣預(yù)報(bào)結(jié)果鏈接的頁(yè)面內(nèi)容進(jìn)行解析,CallBack實(shí)現(xiàn)方式
    85function showWeatherByCallBack()
    86{
    87    var context=document.getElementById("result");
    88    var weatherUrl=document.getElementById("Text1");
    89    var arg="ShowWeatherByCall|" + weatherUrl.value;
    90    <%= ClientScript.GetCallbackEventReference(this,"arg","outPutResult","context")%>;
    91}
    92function outPutResult(result)
    93{      
    94   document.getElementById("result").innerHTML = result;
    95         
    96}
    97</script>
    98</head>
    99<body onload="getWeatherUrl(),showWeatherByCallBack()">
    100    <form id="form1" runat="server">
    101        <span id="result"></span>
    102        <input id="Text1" type="hidden" runat="server" />
    103    </form>
    104</body>
    105</html>
    106


    后臺(tái)代碼Default.cs:

    以下是引用片段:
    1using System;
    2using System.Data;
    3using System.Configuration;
    4using System.Web;
    5using System.Web.Security;
    6using System.Web.UI;
    7using System.Web.UI.WebControls;
    8using System.IO;
    9using System.Net;
    10using Anthem;
    11
    12public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
    13{
    14    protected void Page_Load(object sender, EventArgs e)
    15    {
    16        Anthem.Manager.Register(this);
    17
    18    }
    19
    20    回調(diào)的固定格式#region 回調(diào)的固定格式
    21    public string str_content;
    22   
    23    public void RaiseCallbackEvent(string the_string)
    24    {
    25        str_content = the_string;
    26    }
    27
    28    /**//// <summary>
    29    /// 回調(diào),解析客戶端的參數(shù)
    30    /// </summary>
    31    /// <returns></returns>
    32    public string GetCallbackResult()
    33    {
    34         
    35        string[] parts = str_content.Split('|');
    36        object[] theArgList = new object[parts.Length - 1];
    37        for (int int_index = 1; int_index < parts.Length; int_index++)
    38            theArgList[int_index - 1] = parts[int_index];
    39        return (string)GetType().GetMethod(parts[0]).Invoke(this, theArgList);
    40    }
    41    #endregion
    42
    43    解析url的頁(yè)面內(nèi)容的方法體#region 解析url的頁(yè)面內(nèi)容的方法體
    44    /**//// <summary>
    45    /// Anthem方式,解析獲取的url的頁(yè)面內(nèi)容
    46    /// </summary>
    47    /// <param name="url">url</param>
    48    /// <returns>解析結(jié)果</returns>
    49    [Anthem.Method]
    50    public string ShowWeatherByAnthem()
    51    {
    52
    53        WebRequest request = WebRequest.Create(Text1.Value);
    54        request.Credentials = CredentialCache.DefaultCredentials;
    55        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    56        Stream dataStream = response.GetResponseStream();
    57        StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.Default);
    58        string str = reader.ReadToEnd();
    59        return str.Substring(220);
    60
    61    }
    62     //<summary>
    63     //回調(diào)方式,解析獲取的url的頁(yè)面內(nèi)容
    64     //</summary>
    65     //<param name="url"></param>
    66     //<returns></returns>
    67    public string ShowWeatherByCall(string url)
    68    {
    69        WebRequest request = WebRequest.Create(url);
    70        request.Credentials = CredentialCache.DefaultCredentials;
    71        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    72        Stream dataStream = response.GetResponseStream();
    73        StreamReader reader = new StreamReader(dataStream, System.Text.Encoding.Default);
    74        string str = reader.ReadToEnd();
    75        return str.Substring(220);
    76
    77    }
    78    #endregion
    79}
    80

    posted on 2009-03-27 17:04 找個(gè)美女做老婆 閱讀(1212) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲人成网亚洲欧洲无码| 国产va精品免费观看| 黄页免费在线观看| 国产成人精品免费视频大| 国产精品美女自在线观看免费| 国产精品亚洲综合久久| 亚洲福利一区二区三区| 亚洲GV天堂无码男同在线观看 | 亚洲乱码一区二区三区国产精品| 亚洲av片在线观看| 91久久青青草原线免费| 啊灬啊灬别停啊灬用力啊免费看| 欧美男同gv免费网站观看| 亚洲视频在线一区| 曰批免费视频播放免费| 久久国产亚洲电影天堂| 亚洲精品高清国产麻豆专区| 国产成人精品日本亚洲网站| 国产精品亚洲成在人线| 男男gay做爽爽免费视频| 老色鬼久久亚洲AV综合| 色五月五月丁香亚洲综合网| 亚州免费一级毛片| 亚洲av中文无码乱人伦在线r▽| 亚洲AV无码一区二区三区性色| 99re免费视频| 亚洲高清在线视频| 免费看黄的成人APP| 最近免费中文字幕中文高清 | 国产成人福利免费视频| 欧美大尺寸SUV免费| 亚洲国产日韩在线成人蜜芽 | 免费国产小视频在线观看| 亚洲最大成人网色| 91免费福利精品国产| 一区二区三区亚洲| 91麻豆最新在线人成免费观看| 亚洲人成电影在线观看青青| 日本黄网站动漫视频免费| 亚洲sss综合天堂久久久| 毛片免费观看网址|