1 // ActionScript file
2 import flash.events.Event;
3 import flash.events.SecurityErrorEvent;
4
5 import mx.collections.ArrayCollection;
6 import mx.controls.Alert;
7 import mx.utils.Base64Encoder;
8
9 private var loader:URLStream;
10 private var htmldata:String;
11 private var ifloaded:Boolean=false;
12 private var dataUrl:String="http://weather.qq.com/inc/ss*.htm";
13
14 public function initApp():void{
15 var t:Date=new Date();
16 lbToday.text=t.fullYear+"-"+(t.month+1)+"-"+t.date+" "+t.hours+":"+t.minutes+":"+t.seconds;
17 loadUrl("125",parseCityInfo);
18 }
19 private function loadUrl(cityno:String,callback:Function):void{
20 loader= new URLStream();
21 loader.addEventListener(Event.COMPLETE, callback);
22 loader.addEventListener("securityError",onSecurityError );
23 var addr:String=dataUrl.replace(/\*/,cityno);
24 trace("Loading",addr);
25 var request:URLRequest = new URLRequest(addr);
26 //var enc:Base64Encoder=new Base64Encoder();
27 //enc.encodeUTFBytes(addr);
28 //var request:URLRequest = new URLRequest("http://localhost/httpproxy/webservlet?data="+enc.toString());
29 try {
30 loader.load(request);
31 } catch (error:Error) {
32 Alert.show("不能连接服务器:"+addr,"Tips");
33 }
34 }
35 private function onSecurityError(event:SecurityErrorEvent):void{
36 Alert.show("安全错误:"+event.text,"Tips");
37 }
38 private function parseCityInfo(event:Event):void {
39 var sm:URLStream=event.target as URLStream;
40 htmldata= sm.readMultiByte(sm.bytesAvailable, "gb2312");
41 trace("completeHandler: " + htmldata );
42 if(!ifloaded){
43 var pattern:RegExp =new RegExp("value=\"(\\d{1,3})\">([^<]*)</option>","g");
44 var result:Object = pattern.exec(htmldata);
45 var data:ArrayCollection = new ArrayCollection();
46 var item:Object;
47 while (result != null) {
48 trace(result[1],result[2]);
49 item=new Object();
50 item.label=result[2];
51 item.data=result[1];
52 data.addItem(item);
53 result = pattern.exec(htmldata);
54 }
55 cmbCity.dataProvider=data;
56 ifloaded=true;
57 }
58 parseWeather();
59 }
60 private function parseWeather():void{
61 //分析天气信息
62 var item:Object=cmbCity.selectedItem;
63 var pattern:RegExp =new RegExp("align=\"center\">([^<]*)</td>","g");
64 var result:Object = pattern.exec(htmldata);
65 var data:Array=new Array();
66 while (result != null) {
67 data.push(trimString(result[1]));
68 trace(result[1]);
69 result = pattern.exec(htmldata);
70 }
71 t0.text=item.label+": "+data[0];
72 t1.text=data[1];
73 t2.text=data[2];
74 t3.text=data[3];
75 t4.text=data[4];
76 }
77 private function changeHandler(event:Event):void{
78 var item:Object=ComboBox(event.target).selectedItem;
79 trace(item.data);
80 loadUrl(item.data,parseCityInfo);
81 }
82 private function trimString(s:String):String{
83 return s.replace(/(^\s*)|(\s*$)/g, "");
84 }