`
gdljg0460
  • 浏览: 42651 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Flex实现QQ网页提取天气信息

    博客分类:
  • flex
阅读更多

1、预备知识

Flex是Adobe提供的基于Flash环境的RIA展现技术,主要采用MXML+Action Script来编写程序、界面,然后通过编译器编译成flash格式的SWF文件发布到网站上。

实现该功能需要安装Flex SDK,可以从Adobe网站上面下载,或者安装Flex Builder plugin+Eclipse来开发。

同时需要具备简单的正则表达式知识。

2、界面布局、代码实现

文件:QQWeather.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="213" height="234"  creationComplete="initApp()" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#F6FBFC, #3FEEDC]">
    <mx:Style>
        .myfont{font-size:12pt;font-family:'宋体';}
    </mx:Style>
    <mx:Script source="QQWeather.as"></mx:Script>
    <mx:Label x="10" y="53" text="选择城市:" styleName="myfont"/>
    <mx:ComboBox id="cmbCity" x="66" y="49" width="133" rowCount="6" change="changeHandler(event);" styleName="myfont"></mx:ComboBox>
    <mx:Image x="10" y="10" source="@Embed('../title.gif')" width="189" />
    <mx:Image x="10" y="106" source="@Embed('../tem1.png')" width="57" height="13"/>
    <mx:Image x="10" y="132" source="@Embed('../tem2.png')" width="57" height="13"/>
    <mx:Image x="10" y="178" source="@Embed('../tem3.png')" width="57" height="13"/>
    <mx:Image x="10" y="154" source="@Embed('../tem5.png')" width="57" height="13"/>
    <mx:Label x="75" y="103.5" text="" width="110" styleName="myfont" id="t1"/>
    <mx:Label x="75" y="129.5" text="" width="110" styleName="myfont" id="t2"/>
    <mx:Label x="75" y="151.5" text="" width="110" styleName="myfont" id="t3"/>
    <mx:Label x="75" y="175.5" text="" width="110" styleName="myfont" id="t4"/>
    <mx:Label x="34" y="202" text="Label" width="169" styleName="myfont" textAlign="right" id="lbToday"/>
    <mx:Label x="10" y="80" width="193" id="t0" styleName="myfont" fontWeight="normal"/>
    
</mx:Application>

 

 

后台脚本:QQWeather.as

 

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 }

 

 

 

3、注意事项

根据flash的sandbox安全模型要求,A域名下的flash文件只能从A域名中获取服务端数据,如果需要从B域名中提取数据,需要B域名配置一个crossdomain.xml的文件,允许A从B

下载数据,但是我们不可能有这样的公关能力要求腾讯在http://weather.qq.com/下面放一个xml文件,允许其他网站访问,因此只能另辟蹊径:

方案1:A域名下自己实现一个代理,从B域名网页下载数据返回,这样就回避了sandbox的安全性错误,Line 26-28注释的代码就是我用java Servlet实现的一个代理。

方案2:建立代理服务器,例如squid或者Apache代理

方案3:采用adobe提供的开源软件bladeDS,该软件采用J2EE War方式发布,可以提供RPC、HTTP Proxy的代理功能

方案4:采用Adobe的企业级解决方案Adobe LiveCycle ES ,这个东西试用版就2.5G,真是庞然大物,受不了了,没见过这样的软件,一个Oracle数据库也就几百M而已,想不通。

  • 大小: 36.4 KB
分享到:
评论

相关推荐

    flex实现QQ面板效果

    flex实现QQ面板效果flex实现QQ面板效果flex实现QQ面板效果flex实现QQ面板效果

    flex 实现QQ界面

    flex实现的qq界面,具体实现通信可以使用消息服务,实现实时和留言比较简单了

    flex 仿qq.

    flex 仿qq

    flexair网页截图工具

    FlexAir网页截图工具是一款专为用户设计的高效网页捕获软件,它允许用户方便快捷地截取并保存网页内容。这款工具集成了多种实用功能,旨在优化网页截图体验,提高工作效率。 在使用FlexAir网页截图工具时,首先需要...

    flexwheel flex实现的图片滚动效果

    总之,"flexwheel flex实现的图片滚动效果"是一种利用CSS3 Flex布局和可能的JavaScript技术创建的交互式组件,旨在提升网页的视觉吸引力和用户体验。通过学习和使用这样的组件,开发者可以提高自己的前端技能,并在...

    flex 实现网页在线拍照,支持ie8浏览器

    在本案例中,我们讨论的主题是如何使用Flex实现一个功能,允许用户在网页上进行在线拍照,并且这个功能需要兼容老旧的Internet Explorer 8(IE8)浏览器,同时支持照片预览。 在Flex中实现在线拍照,首先需要考虑的...

    基于Flex&amp;Bison;的网页可编程计算器

    本项目以“基于Flex&Bison的网页可编程计算器”为主题,通过集成Flex(词法分析器生成器)和Bison(语法分析器生成器)来实现计算器的后端逻辑,并利用Flask框架与HTML、CSS进行前端设计,为用户提供友好的交互界面...

    flex实现边框

    本篇文章将详细解释如何使用Flex来实现边框以及添加标题,并重点关注在标题框中显示文本的实现方法。 首先,我们需要了解Flex中的容器和组件。容器是Flex应用程序的基础,它们可以包含一个或多个组件,如按钮、文本...

    flex实现简单浏览器

    flex实现简单浏览器,flex AIR中HTML控件实现了简单的网页浏览效果

    Flex实现的计算器

    在这个"Flex实现的计算器"项目中,开发者使用了Adobe Flex来设计和开发一个基本的计算器,具备进行基本数学运算如加、减、乘、除的功能。 1. **Flex框架介绍** Flex提供了MXML和ActionScript两种编程语言,其中...

    flex布局实战搭建网页页面

    在网页设计领域,Flex布局(Flexible Box Layout,也称为CSS3 Flexbox)是一种强大的工具,它使得构建响应式、动态调整的布局变得简单易行。本教程将带你深入理解Flex布局,并通过实例演示如何利用HTML和CSS搭建一个...

    Flex实现天气预报服务

    在本项目中,“Flex实现天气预报服务”指的是利用Flex的技术来创建一个应用,该应用能够通过调用外部的Web服务接口获取并显示天气预报信息。 Flex中的WebService组件是用于与SOAP(Simple Object Access Protocol)...

    flex仿qq右边弹出提示消息功能

    通过查看和学习这些文件,你可以深入了解如何在Flex中实现类似QQ的弹出消息功能,包括Flex组件的使用、动画效果的实现以及事件处理机制。通过实践和修改代码,你将能更好地掌握Flex开发技巧,并能够适应不同的项目...

    flex实现的翻书功能的网站漂亮的flex实现swf及源码

    在本案例中,"flex实现的翻书功能的网站漂亮的flex实现swf及源码",显然指的是使用Flex技术创建了一个模拟真实书籍翻页效果的交互式Web应用。这个应用不仅提供了视觉上的吸引力,还具有高度的用户参与度,让浏览者...

    Flex实现的xmpp消息发送接收

    在这个特定的场景中,"Flex实现的xmpp消息发送接收"是指使用Flex技术来实现在Android、iOS等移动设备以及IE浏览器上的即时通讯功能。 XMPP(Extensible Messaging and Presence Protocol)是一种开放标准的协议,...

    flex实现数据表格。

    在本实例中,“flex实现数据表格”指的是使用Flex技术来创建一个数据展示组件,即Datagrid,用于显示结构化的数据。Datagrid是Flex中非常重要的一个组件,它允许用户以表格形式查看和操作大量数据。 Flex Datagrid...

    flex实现计算器功能

    flex基础列子,利用flex技术实现计算器功能

    flex实现旋转效果

    在本文中,我们将深入探讨如何使用Flex来实现一个图片旋转效果,这在产品展示或交互式界面设计中非常常见。Flex是一种强大的、基于XML的框架,用于构建富互联网应用程序(RIA),尤其适用于创建动态、响应式的用户...

    flex整合myeclipse网页

    Flex是Adobe公司开发的一种基于ActionScript的开源框架,主要用于创建富互联网应用程序(RIA),它可以提供交互性强、用户体验良好的Web应用。MyEclipse是一款强大的集成开发环境,尤其在Java Web开发领域有着广泛的...

    flex布局Flex实现常见布局的汇总

    一类是给flex容器设置的,一类是给flex子元素设置的,本文在介绍一些典型场景实现的同时也会顺带讲解部分属性,当然更详细的内容可以阅读MDN上的教程。接下来需要使用到flex-grow属性,这个是flex子元素上的属性,...

Global site tag (gtag.js) - Google Analytics