<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  回復  更多評論
      
    主站蜘蛛池模板: 永久免费观看的毛片的网站| 无人在线观看完整免费版视频| 免费国产不卡午夜福在线| 亚洲国产精品yw在线观看| 免费一级黄色毛片| 亚洲人成人77777网站不卡 | 亚洲精品色在线网站| 久久精品女人天堂AV免费观看| 亚洲午夜电影在线观看| 久久精品免费一区二区| 亚洲一区二区三区91| 成人毛片免费网站| 亚洲一久久久久久久久| 国产自产拍精品视频免费看| 亚洲国产成人手机在线观看| 四虎永久免费影院| 国产久爱免费精品视频| 亚洲AV无码成人专区片在线观看| 日韩免费观看一区| 国产成人精品日本亚洲11| 日韩成人免费在线| 丁香花在线观看免费观看图片| 久久久青草青青亚洲国产免观| 色欲色香天天天综合网站免费| 亚洲短视频在线观看| 免费高清小黄站在线观看 | 国产精品美女自在线观看免费| 国产成人亚洲精品91专区高清| 国产亚洲情侣一区二区无码AV| baoyu122.永久免费视频| 久久久久亚洲AV成人片| 午夜影视在线免费观看| 日韩精品无码永久免费网站| 亚洲成色999久久网站| 成人免费看吃奶视频网站| 人人鲁免费播放视频人人香蕉| 亚洲第一极品精品无码久久 | 免费人成在线观看播放国产| 中文字幕不卡免费高清视频| 亚洲av无码一区二区三区观看| 国产乱子影视频上线免费观看|