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

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

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

    Java學習

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

     

    根據IP獲取當地天氣預報的實現

    (zhuan)http://bbs.99081.com/viewthread.php?tid=346101根據IP獲取當地天氣預報的實現



    訪問www.163.com, 首頁的欄目里有當地的天氣預報。可以猜想,這里的天氣預報,應該是根據來訪者的ip判斷其所在地給出當地的天氣情況。問了一些朋友,也證實了這一點。項目 里也需要天氣預報這個小欄目,同事做過一個(從其他站點抓取的),不過實現不了根據IP顯示當地的天氣情況,需要用戶自行選擇,而且抓取的站點屬于小 站….其可靠性值得懷疑。。所以就萌生了抓取網易的天氣預報的想法。。。對頁面進行分析。。發現顯示天氣預報的區域是一個IFrame,IFrame里嵌 入了如下鏈接http: //news.163.com/util/position1.html,對這個地址訪問直接跳轉到另外一個鏈接http://news.163.com/weather/news/qx1/56294.html,此鏈接顯示了天氣情況,如圖:



    由此可以推測http://news.163.com/util/position1.html, 是在根據來訪者的IP判斷所屬區域,然后返回一個該地區所對應的區位碼,如: 56294代表成都。如何讓網易來幫我們的站點來訪者判斷所屬區域,并給出天氣情況,并顯示在自己的站點頁面上呢?還得繼續分析。。因為http: //news.163.com/util/position1.html,此鏈接一訪問就轉向到天氣情況的鏈接,而無法查看源碼。便猜想。。此頁面肯定有 些東西。。無奈之下。。WebRequest一下,出現了如下代碼:


    以下是引用片段:
    1<script language="Javascript">  
    2var city = new Array("安徽","黑龍江","山東","北京","湖北","山西","福建","湖南","陜西","甘肅","吉林","上海","廣 東","江蘇","四川","廣西","江西","天津","貴州","遼寧","西藏","海南","內蒙古","新疆","河北","寧夏","云 南","河南","青海","浙江","重慶";  
    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實現了對來訪者IP判斷并給出了天氣預報結果的鏈接。Js里的此鏈接: http://202.108.39.152/ipquery,起到的是判斷用戶所在地的作用,返回的是來訪者所在地省份。分析到此,想要的結果差不多就出來了…

    在客戶端調用這段js獲得天氣預報結果的鏈接地址,然后交給服務端來處理。(為什么要交給后臺處理,而不是直接顯示呢?)因為直接得出的鏈接頁面上, 有多余的鏈接,還應用了樣式(如圖一),不便為自己所用,所以得處理掉。客戶端調用服務端的方法很多,最初使用了Ajax框架Anthem,實現了過后, 覺得有點殺雞用牛刀的感覺。。無聊之余。。就又用CallBack實現了一次。。感覺恰到好處。。后來又發現。。__doPostBack也可以實現客戶 端調用服務端方法。。看來實現這么一個功能還真是簡單。。。

    前臺頁面代碼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");
    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//根據Ip服務器返回的省份名稱獲取對應的編號
    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//獲取所在地天氣預報結果的鏈接
    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//客戶端調用服務端方法實現對天氣預報結果鏈接的頁面內容進行解析,Anthem實現方式
    70function showWeatherByAnthem() {
    71    Anthem_InvokePageMethod("ShowWeatherByAnthem", [], getServerResult);
    72}
    73
    74function getServerResult(result) {
    75    document.getElementById("result").innerHTML = result.value;
    76}
    77
    78//客戶端調用服務端方法實現對天氣預報結果鏈接的頁面內容進行解析,_doPostBack實現方式
    79function showWeatherBylink()
    80{
    81    __doPostBack('LinkButton1','');
    82}
    83
    84//客戶端調用服務端方法實現對天氣預報結果鏈接的頁面內容進行解析,CallBack實現方式
    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


    后臺代碼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    回調的固定格式#region 回調的固定格式
    21    public string str_content;
    22   
    23    public void RaiseCallbackEvent(string the_string)
    24    {
    25        str_content = the_string;
    26    }
    27
    28    /**//// <summary>
    29    /// 回調,解析客戶端的參數
    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的頁面內容的方法體#region 解析url的頁面內容的方法體
    44    /**//// <summary>
    45    /// Anthem方式,解析獲取的url的頁面內容
    46    /// </summary>
    47    /// <param name="url">url</param>
    48    /// <returns>解析結果</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     //回調方式,解析獲取的url的頁面內容
    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 找個美女做老婆 閱讀(1212) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    本blog已經搬到新家了, 新家:www.javaly.cn
     http://www.javaly.cn

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧美日韩中文无线码| 亚洲人成www在线播放| fc2免费人成在线视频| 午夜国产大片免费观看| 久久综合亚洲色hezyo| 国产极品美女高潮抽搐免费网站| 色天使亚洲综合在线观看| 成人毛片免费观看| 亚洲日韩精品无码专区| 在线观看免费成人| 亚洲欧洲无卡二区视頻| 国产高清免费在线| 欧洲乱码伦视频免费国产| 夜夜春亚洲嫩草影院| a毛片免费全部在线播放**| 亚洲av无码片在线播放| 永久免费视频网站在线观看| 亚洲一区在线视频| 日本高清免费不卡视频| 男人和女人高潮免费网站| 亚洲人成在线播放网站| 无码国产精品一区二区免费式芒果| 亚洲精品亚洲人成在线观看麻豆| 国产香蕉免费精品视频| 亚洲免费网站观看视频| 亚洲成人国产精品| 久久国产免费一区| 亚洲精品一卡2卡3卡四卡乱码| 亚洲国产精品尤物YW在线观看| 中文成人久久久久影院免费观看| 久久精品国产亚洲AV无码娇色 | 久久国产乱子伦精品免费强| 亚洲毛片在线观看| 成人免费在线观看网站| 国产免费播放一区二区| 亚洲人成网站18禁止久久影院| 国产精品无码一二区免费| 色www永久免费| 456亚洲人成影院在线观| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲综合精品伊人久久|