Hatena::ブログ(Diary)

@camelmasaの開発日記 このページをアンテナに追加 RSSフィード

Githubで活動しています。

2008-06-28

AIRのHTTPServiceで、複数のサイトの情報をDataGridに反映しても直ぐに反映されない…。

| 16:09

恐らく自分の方法が駄目なんだと思うのですが、どの部分がダメなのか特定出来ません…。

人力検索してみました。

http://q.hatena.ne.jp/1214637139

下記のソースがサンプルになります。

ソースが雑だと思います。すみません。

<?xml version="1.0" encoding="utf-8"?>
  <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
    layout="absolute"
    verticalAlign="middle" width="582" height="334">

    <mx:Script>
      <![CDATA[ 
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        import mx.controls.Alert;

        //google検索
        public function SearchGoogle():void
        {
          var uv:URLVariables = new URLVariables();
          
          if(!q.text){
            Alert.show("キーワードを入力して下さい。");
          	return;
          }
          
          uv.q = q.text;//検索文字
          uv.num = "50";//検索結果数
          
          googlesearch.request = uv;
          googlesearch.send();
        }

        //yahoo検索
        public function SearchYahoo():void
        {
          var uv:URLVariables = new URLVariables();
          
          uv.p = q.text;//検索文字
          uv.n = "100";//検索結果数
          
          yahoosearch.request = uv;
          yahoosearch.send();
        }
        
        //googleへの通信成功
        public function GoogleResponce(event:ResultEvent):void
        {
          var str:String = event.result.toString();//レスポンス
          var grid:Array = new Array();
          
          var pattern:RegExp = /<h2\sclass=r><a\shref="((https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)"/g;
          var URLpattern:RegExp = /(https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+/;
          
          var hit:RegExp = /<b>([0-9,]+)<\/b>/;
          
          var matchStr:Array = str.match(pattern);//google検索結果からURLを抽出
          
          //Objectを埋める
          for(var i:int=0; i<50; i++){
               var obj:Object = new Object();
               obj.id = "";
               obj.googleurl = "";
               grid[i] = obj;
          }
          
          datagrid.dataProvider = grid;
          
          for(var j:int=0; j<matchStr.length; j++){
            var word:Array;
            
            word = matchStr[j].match(URLpattern);
            if(!word[0].match(/^http:\/\/news.google.co.jp/)){
              datagrid.dataProvider[j].id = j+1;
              datagrid.dataProvider[j].googleurl = word[0];
            }
          }
          
          SearchYahoo();
        }
        
        //yahooへの通信成功
        public function YahooResponce(event:ResultEvent):void
        {
          var str:String = event.result.toString();//レスポンス
          
          var pattern:RegExp = /<em\sclass="yschurl">[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#<>]+<\/em>/g;
          
          var matchStr:Array = str.match(pattern);//yahoo検索結果からURLを抽出
          
          for(var j:int=0; j<50; j++){
            var word:Array;
            var url:String = matchStr[j];
            datagrid.dataProvider[j].yahoourl = url;
          }
        }

        //HTTP通信失敗
        public function Fault(event:FaultEvent):void
        {
          Alert.show(event.fault.faultString, "Error");
        }
		]]> 
    </mx:Script>
    <mx:HTTPService
      id="googlesearch"
      method="GET"
      result="GoogleResponce(event)" 
      fault="Fault(event)"
      url="http://www.google.co.jp/search"
      resultFormat="text" />
      
    <mx:HTTPService
      id="yahoosearch"
      method="GET"
      result="YahooResponce(event)" 
      fault="Fault(event)"
      url="http://search.yahoo.co.jp/search"
      resultFormat="text" />
	
    <mx:ApplicationControlBar x="10" y="10" width="560" height="312" cornerRadius="4">
    </mx:ApplicationControlBar>
    
    <mx:TextInput id="q" 
      x="22" y="37" 
      width="334" height="22" />
    <mx:Button x="364" y="37" 
      label="検索" 
      click="SearchGoogle()" 
      width="74" height="22" />
      
    <mx:DataGrid id="datagrid" width="539" height="229" y="67" x="22">
      <mx:columns>
        <mx:DataGridColumn headerText="順位" dataField="id" width="40"/>
        <mx:DataGridColumn headerText="google検索結果URL" dataField="googleurl" width="130" />
        <mx:DataGridColumn headerText="yahoo検索結果URL" dataField="yahoourl" width="130" />
      </mx:columns>
    </mx:DataGrid>
    
  </mx:WindowedApplication>

宜しくお願いします!



[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。

このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。

http://spreecommerce.jp/

2008-06-07

MXMLでHTTPServiceを実行してみました。

| 21:59

構築してみたいプログラムがあるのですが、実現する為にデスクトップアプリケーション構築が必須です。

最近actionscriptに興味があるので、その流れでAIRを使いデスクトップアプリケーションを構築することにしました。

まず練習として、MXMLでHTTPServiceというのを実行してみました。

サンプルソースgoogleへhttp通信し、レスポンスをhtml表示するサンプルです。

<?xml version="1.0" encoding="utf-8"?>
  <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
      <![CDATA[ 
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        import mx.controls.Alert;

        public function Search(event:Event):void
        {
          var uv:URLVariables = new URLVariables();

          uv.q = q.text;//検索文字
			    
          search.request = uv;
          search.send();
        }

        public function handlePlain(event:ResultEvent):void
        {
          result.data = event.result.toString();
        }
	
        public function handleFault(event:FaultEvent):void
        {
          Alert.show(event.fault.faultString, "Error");
        }
		]]> 
    </mx:Script>
    <mx:HTTPService
      id="search"
      url="http://www.google.co.jp/search"
      method="GET"
      result="handlePlain(event)" 
      fault="handleFault(event)"
      resultFormat="text" />
	
    <mx:TextInput id="q" 
      x="130" y="32" 
      width="160" height="22" />
    <mx:Button x="130" y="95" 
      label="検索" 
      click="Search(event)" 
      width="160" height="22" />
    <mx:HTML id="result" />
  </mx:WindowedApplication>

f:id:camelmasa:20080607215101j:image




[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。

このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。

http://spreecommerce.jp/