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

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

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

    隨筆-31  評論-257  文章-0  trackbacks-0
        這幾天無聊著,打開163郵箱,看到右上角的天氣信息,突然心血來潮,自已也做個天氣信息的小模塊放在Blog上,就是左邊側欄的那個,其實之前都做過,只不過是用Java來解析,Flex來顯示,而已之前的那個是解析www.weathercn.com的信息的,但現在該站的天氣頁面改版了,所以不得不重新做,既然如此,就拿163的來做吧。原理都是一樣,用PHP讀取163的天氣信息網頁,再用正則表達式解析網頁的內容,提取有用的天氣信息,組織好成XML格式,之后Flex用WebService來讀取該PHP,得到XML數據,再相應的顯示。
        其實這并不難,打開的我163郵箱,查看它的網頁源碼,經過一番的查找分析,找到它獲取天氣信息的網頁:http://mimg.163.com/tianqi/city/59287.html  呵呵,還是Html的哦,網易的將動態的天氣生成靜態的頁面,我們訪問起來,也不太占服務器資源吧,因為天氣也是經常訪問的。看看源代碼,就幾行Html代碼,正合我的需求,免得我的PHP分析大量的代碼占點資源。不過有點要注意,網易把每個城市的代號生成一個頁面,即是一個城市,一個天氣頁面,上面那個URL是廣州的,就是說 59287 就是廣州的城市代碼,在PHP里訪問時,要跟據用戶選的是哪個城市,相對應的修改那個號碼就行了,如:
    $url = "http://mimg.163.com/tianqi/city/".$_GET['city'].".html";
    這樣,你訪問PHP時,要傳一個城市代碼參數,至于網易定義的城市代碼,我這里就不列出來了,太多太長了,也找了我不少時間。我放在Flex的源碼里,可以下載我的源碼看看。
    以下是PHP頁面的代碼:
     1 <?php
     2     include("class.Chinese.php");        #導入字符集轉換的類
     3     $codeTableDir = "./config/";        #指定字符碼表的路徑
     4 
     5     $url = "http://mimg.163.com/tianqi/city/".$_GET['city'].".html";        #獲取城市代碼,組成完整的URL
     6    
     7     $fh = fopen($url,'r');                #讀取該URL獲取內容
     8     while(!feof($fh)){
     9         $content .= fread($fh,128);        #讀取全部內容
    10     }
    11     $content = new Chinese("GB2312","UTF8",$content,$codeTableDir);            #轉換字符碼,GB轉UTF8
    12     $content = $content->ConvertIT();                                        #轉換
    13     eregi('(<span class="wetCityName">)([^/]*)(</span>)',$content,$arr);    #找出表示城市的內容
    14     $city = $arr[2];
    15    
    16     eregi('(<span class="wetDate">)(.*)(</span></div>)',$content,$arr);        #找出表示日期的內容
    17     $date = $arr[2];
    18    
    19     $wea = split('txtAlgCen fRig handle',$content);                            #分開今天與明天
    20    
    21     eregi('(<div class="wetSts">)([^<]*)(</div>)',$wea[0],$arr);            #找出表示今日天氣的內容
    22     $info1 = $arr[2];
    23     eregi('(<div class="wetSts">)([^<]*)(</div>)',$wea[1],$arr);            #找出表示明日天氣的內容   下同
    24     $info2 = $arr[2];
    25    
    26     eregi('(</b>)([^<]*)(</div>)',$wea[0],$arr);
    27     $temp1 = $arr[2];
    28     eregi('(</b>)([^<]*)(</div>)',$wea[1],$arr);
    29     $temp2 = $arr[2];
    30    
    31     eregi('(class="wetDico )(.*)("></div>)',$wea[0],$arr);
    32     $pic1 = $arr[2];
    33     eregi('(class="wetDico )(.*)("></div>)',$wea[1],$arr);
    34     $pic2 = $arr[2];
    35    
    36     echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
    37     echo "\n";
    38 ?>
    39 <weather>
    40     <city><?= $city ?></city>
    41     <date><?= $date ?></date>
    42     <today>
    43         <wea><?= $info1 ?></wea>
    44         <temp><?= $temp1 ?></temp>
    45         <pic><?= $pic1 ?></pic>
    46     </today>
    47     <tomorrow>
    48         <wea><?= $info2 ?></wea>
    49         <temp><?= $temp2 ?></temp>
    50         <pic><?= $pic2 ?></pic>
    51     </tomorrow>
    52 </weather>

    以上有幾點要注意:
        1。由于網易里的網頁是用GB2312編碼的,而Flex里接收的XML要UTF-8編碼才會正確讀出,所以要將獲取的網易里的數據進行轉碼,這問題剛開始時,老是亂碼,搞到心煩,后來發現網易的Html的頭信息里 發現是GB2312的編碼,郁悶了半天,之后上網找了個中文轉碼的類,下載來直接套用。
        2。獲取回來的天氣信息的Html是分今天與明天的天氣信息,而里面的格式也是一樣的,所以,用正則查找時,只找到最先的那個,所以要先找個今天與明天的分界點,將其分離開來再各自解析里面的內容,得出今天的天氣與明天的天氣。
        3。寫輸出XML時,格式要正確,不然Flex里讀取會有麻煩,還有,encoding一定要是UTF-8,還要將該PHP文件保存成UTF-8格式,我用DW寫該PHP時,因為我的DW新建文件時,默認是ISO8859-1的,所以要將其文檔編碼格式改為UTF-8來保存。

    PHP完工之后,來到Flex這邊,畫好界面,添加代碼如下:
    先加一個HttpService標簽 :
    <mx:HTTPService id="hs" showBusyCursor="true" method="GET" result="{hsResult(event);}" fault="{hsFault(event);}" />
    (事件響應方法我就不在這里貼出來了,可下載源碼看)
    當下拉選框選中城市之后,判斷用戶選中的是哪個城市,再對照該城市的代號,組合成URL
    hs.url = "http://www.jiangzone.com.cn/jiang/weather/weather.php?city=" + cityvalues[i];
    hs.send();
    結果返回時,再相應的賦值:
    lblCity.text = event.result.weather.city;
    lblDate.text = event.result.weather.date;
    lblWea.text = event.result.weather.today.wea;
    weather對應XML里的<weather>根標簽,city對應XML里的<city>標簽。

    OK,修改一下,大功告成!
    以下是源碼:

    [down=attachments/month_0709/t2007916122822.rar]點擊下載此文件[/down]


    posted on 2008-07-29 14:07 姜大叔 閱讀(1221) 評論(1)  編輯  收藏 所屬分類: Flash/Flex

    評論:
    # re: Flex + PHP 的天氣預報[未登錄] 2013-12-21 15:27 | gg
    lj;kljl  回復  更多評論
      
    主站蜘蛛池模板: 久久免费国产视频| 一级一片免费视频播放| 91在线免费观看| 久久精品国产精品亚洲下载| 国产成人免费AV在线播放| 亚洲AV无码乱码在线观看性色扶 | 亚洲日本国产乱码va在线观看| a毛片在线免费观看| 亚洲成AV人在线播放无码| 精品成人免费自拍视频| 亚洲αv在线精品糸列| 在线看片免费人成视频播| 亚洲国产精品久久久久久| 最近免费mv在线电影| 亚洲激情黄色小说| 中文字幕影片免费在线观看 | 久久99久久成人免费播放| 相泽亚洲一区中文字幕| 三级黄色免费观看| 久久久久亚洲精品美女| 亚洲黄色免费观看| 亚洲中文字幕无码久久2020 | 永久免费A∨片在线观看| 亚洲卡一卡2卡三卡4卡无卡三| 亚洲午夜免费视频| 国产成人精品日本亚洲11| 免费黄色小视频网站| 一级做a爰片久久毛片免费看| 亚洲香蕉成人AV网站在线观看| 日本xxxx色视频在线观看免费| 亚洲成a人片在线观看中文!!!| 成人毛片18女人毛片免费视频未 | 亚洲高清一区二区三区电影| 亚洲AⅤ永久无码精品AA| 一级做a爱片特黄在线观看免费看 一级做a爱过程免费视 | 亚洲精品偷拍视频免费观看 | 亚洲av综合av一区| 国内一级一级毛片a免费| 一级毛片一级毛片免费毛片| 亚洲视频免费播放| 亚洲成av人在片观看|