기존에 Flex3에서 HTTPService는 직접 xml을 확인하여 valueobject를 만들던지 자동으로 파싱해주는 객체를 그냥 쓰던지 그런식으로 했었는데요. Flex4에서는 쉽게 Service객체를 만들어주고, ValueObject를 만들어줍니다.

근데, 그냥 기존방식을 쓰는 게 나을 것 같아요-_- 뭔놈의 클래스를 뭐이리 만들지-_-
그래도 제공하는 기능이니까 한번 사용해서 만들어봅시다-_-

다운로드는 여기서....-_-

1. 프로젝트 생성

New -> Flex Project -> Application type은 Desktop(구글의 httpservice를 가져올 것이어서 데탑으로-_-) -> Finish.

2. 서비스생성
구글에서 날씨를 가져오는 Service를 추가해봅시다.
아래 Data/Services탭에서 Connect to Data/Service..클릭.
HTTP선택 -> Opearation 첫번째 항목에 getWeather로 변경. url은 http://www.google.co.kr/ig/api?weather=seoul 입력.
url만 입력하면 ?붙은 파라메터는 자동으로 Parameters탭에 들어갑니다. weather가 들어가는데, 캐쉬문제 때무넹 캐쉬파라메터도 하나 추가합니다.
Add누르고, cache입력하고, DataType은 Number.
Service name은 WeatherService로 하죠. Finish.

여기서 이름 네이밍룰에 주의해야하는데, Service name이랑 parameter name이랑 같은 게 있으면 안됩니다. 에러나더군요.

3. 서비스에 대한 리턴타입 지정
이제 리턴타입을 지정해줘야하는데요.
그전에 데이터를 잘 가져오는지 테스트를 해볼 수 있습니다.
방금 생성한 WeatherService의 getWeather를 선택하고 오른쪽버튼 누르면 Configure Return Type이 있습니다.
이거 선택하기전에 Test Opearation이라고 해서 테스트를 해볼 수 있는 게 있네요.
테스트를 쉽게 해볼 수 있어서 참 좋네요. Test를 누르면 데이터를 가져와서 Tree View 또는 Raw View로 볼 수 있습니다.
사용자 삽입 이미지
근데, 이상한 점을 발견했는데, 네이버오픈API나 몇몇 XML은 이걸로 하면 잘 안돼요. 왜그런지 모르겠네요. 이런 에러메세지를 뿜습니다.
InvocationTargetException:The response is not a valid XML or a JSON string
이거 왜그런지 아시는 분은 답변좀....굽신굽신....-_-

암튼, 날씨API는 되니까 해봅시다-_-
Configure Return Type선택 후, Auto-detect the return type from sample data선택. 뭐 그냥 object로 받아도 되는데, 필요한 데이터만 가져온다고 하면 쉽게 valueobject를 만들 수 있는 장점이 있어요.
파라메터 방식을 선택하고, seoul을 입력합니다.
그러면 결과값이 나오는데, 여기서 필요한 건 현재 날씨이기 때문에 select root에서 current_conditions를 선택합니다. 그리고, Finish를 누르면 valueObject가 만들어지는데, 한개의 node마다 클래스가 2개씩 생겨요-_-

4. UI생성
UI를 만들어봅시다.
[code]<s:Button id="btnClose" label="X"  width="29" x="67" y="1" click="btnClose_clickHandler(event)"/>
<mx:Image x="6" y="32" width="40" height="40" id="imgIcon"/>
<s:Label x="0" y="80" width="100" textAlign="center"  id="labelCondition" />
<s:Label x="59" y="45" text="30º" fontSize="20" id="labelTemp"/>[/code]
초간단 UI...UI라고 불리지도 못하는 UI.

5. 데이터 바인딩
이제 데이터를 불러와야해요.
Design모드로 가서 아무라벨이나 붙잡고, 오른쪽버튼 눌러서 Bind To Data를 선택. 그리고 방금 만든 서비스를 바인딩해요. 전 labelCondition을 선택했는데, 그러면 WeatherService, getWeather의 condition을 선택합니다.
그러면 service태그도 알아서 들어가고 해당 라벨에는 creationComplete이벤트핸들러가 추가되었네요.
getWeather파라메터는 "seoul"과 cache는 랜덤값을 넣어줍니다.
그리고 실제 태그에는 condition.@data에 값이 있기 때문에, label의 text부분에 getWeatherResult.lastResult.condition.data로 변경해주시면 됩니다.
[code]protected function labelCondition_creationCompleteHandler(event:FlexEvent):void
{
    getWeatherResult.token = weatherService.getWeather("seoul", Math.random());
}[/code]

6. 완성된 코드
그럼 1분마다 데이터를 가져오는 타이머도 만들고 윈도우틀도 없애서 위젯형태로 만들어버리고, 나머지 label에도 값에 맞게 바인딩 시키면 완성이 됩니다.
[code]<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/halo"
                       xmlns:weatherservice="services.weatherservice.*"
                       width="150" height="150"
                       applicationComplete="windowedapplication_applicationCompleteHandler(event)"
                       showStatusBar="false"
                       backgroundColor="#48FF00">
    <fx:Script>
        <![CDATA[
            import flash.events.MouseEvent;
            import flash.events.TimerEvent;
            import flash.utils.Timer;
           
            import mx.controls.Alert;
            import mx.events.FlexEvent;
           
            import spark.components.mediaClasses.VolumeBar;
           
            private var timer:Timer;
           
            protected function windowedapplication_applicationCompleteHandler(event:FlexEvent):void
            {
                timer = new Timer(1000, 0);
                timer.addEventListener(TimerEvent.TIMER, timerHandler);
                timer.start();
            }
           
            protected function btnClose_clickHandler(event:MouseEvent):void
            {
                nativeWindow.close();
            }

            protected function labelCondition_creationCompleteHandler(event:FlexEvent):void
            {
                requestData();
            }

            protected function labelTitle_mouseDownHandler(event:MouseEvent):void
            {
                nativeWindow.startMove();
            }
           
            protected function timerHandler(event:TimerEvent):void
            {
                requestData();               
            }
           
            private function requestData():void
            {
                getWeatherResult.token = weatherService.getWeather("seoul", Math.random());
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <s:CallResponder id="getWeatherResult"/>
        <weatherservice:WeatherService id="weatherService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)"/>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
   
    <s:Label id="labelTitle" text="서울날씨"  x="0" y="0" height="22" width="121" verticalAlign="middle" mouseDown="labelTitle_mouseDownHandler(event)"/>
    <s:Button id="btnClose" label="X"  width="30" x="120" y="1" click="btnClose_clickHandler(event)"/>
    <mx:Image x="25" y="47" width="40" height="40" id="imgIcon" source="http://www.google.co.kr{getWeatherResult.lastResult.icon.data}"/>
    <s:Label x="2" y="114" width="148" textAlign="center"  id="labelCondition"  creationComplete="labelCondition_creationCompleteHandler(event)" text="{getWeatherResult.lastResult.condition.data}"/>
    <s:Label x="92" y="58" fontSize="20" id="labelTemp" text="{getWeatherResult.lastResult.temp_c.data}ºC"/>
</s:WindowedApplication>
[/code]

7. Network Monitor로 데이터 확인
HTTPService 요청이 제대로 갔는지 확인할 수 있는 Network Monitor 기능이 추가되었습니다. 기존에는 확인하려면 직접 그냥 노가다로 해보거나 와이어샤크나 firebug 등의 http watcher를 이용해서 했었죠. 근데 이제 Flash Builder에 포함되어져있네요. 그냥 모니터링 하는거라 조금만 만져보면 알 수 있네요. row데이터로 볼 수도 있고, hex데이터로도 볼 수 있고 그러네요. 근데 한글이 깨지네-_-
사용자 삽입 이미지
사용자 삽입 이미지


 
Posted by 머드초보
,
 
소리바다에서 뮤직비디오 위젯을 제공을 합니다. 자기 블로그에다가 뮤비위젯을 달려고 하면 소리바다 사이트가서 선택한 후 퍼가기버튼을 누르고 나서 자기 블로그에 붙여넣어야 하는데요.
이게 귀찮아서 플러그인을 만들게 되었습니다
(사실...그냥 플러그인을 한번 만들어보고 싶었습니다-_-)
문제가 된다면 삭제하겠습니다ㅠ




소리바다 뮤비위젯 :  http://podcast.soribada.com/Widget/Widget.html
소리바다 뮤비위젯 공식블로그 : http://sobawg.tistory.com/


사용법입니다.
압축파일을 풀고, 폴더 통채로 plugins폴더에 넣습니다.

텍스트큐브 관리자 화면으로 갑니다.
플러그인 -> 플러그인 목록 -> 목록 중 소리바다 뮤비위젯 플러그인을 클릭하여 활성화 합니다.
그리고, 환경설정을 클릭 합니다.
사용자 삽입 이미지
위와 같은 화면이 뜨는데요.
첫번째 옵션은 자동재생여부를 선택하는 건데요. '네'를 하게 되면, 페이지가 로딩되자마자 뮤비가 재생이 됩니다.
두번째, 세번째, 네번째는 직접입력하는 것이 아닙니다.
아래 뮤직비디오 리스트가 있는데, 원하는 뮤직비디오의 선택버튼을 클릭합니다.
사용자 삽입 이미지
위처럼 자동으로 채워지게 됩니다. 그리고, 저장버튼을 누르면 '사고쳤어요-다비치'의 뮤직비디오가 셋팅이 된 것입니다. 아직 뮤직비디오 제목, 가수명 검색은 안됩니다 ㅠ 차후 버전에 추가를 할 생각입니다(언제가 될까-_-)

그럼 위젯을 달아봅시다.
텍스트큐브 관리자화면에서 꾸미기 -> 위젯 -> 추가가능한 플러그인에서 '소리바다 뮤비 위젯'이 있는데, 오른쪽에 원하는 위치에 올려 놓습니다.
사용자 삽입 이미지
이제 블로그에서 뮤직비디오 위젯이 보일꺼에요.
다른 컴이나 다른 버전에서는 전혀 테스트하지 않았습니다--;
제 텍스트큐브는 1.7.7입니다.

PS. 텍스트큐브 플러그인 올리기가 안되네-_-;
 
Posted by 머드초보
,
 
난데없이 쇼핑몰에서 쇼핑한 적도 없는데 택배아저씨께 전화가 오더니 택배가 있다고 하더군요. 저는 쇼핑몰에서 뭘 산적도 없는데, 누가 보낸거지? 라는 생각에 얼마전에 TV에서 본 택배아저씨로 위장한 강도가 생각났습니다만-_-; 받아보니 위자드웍스에서 보낸 선물이였습니다 ^^

웹 패러다임을 바꾸는 위젯
선물은 웹 패러다임을 바꾸는 위젯이라는 책인데요. 책을 살짝 펼치는 순간 올칼라로군요. 제가 좋아하는 올칼라! 역시 색이 있어야... 최근 위젯을 제작할 일이 생겼는데요. 마침 이렇게 좋은 책이 들어와서 다행입니다. 이 책을 보고 공부를 해서 제대로 된 위젯을 만들어보도록 하겠습니다.

사용자 삽입 이미지
올칼라라서 인지 책이 비싸네요. 이렇게 비싼책을 선물로 주시다니 감사합니다 ^^

노란색 쪽지
더욱 맘에 드는 것은 손으로 직접 쓴 노란색 쪽지입니다.
사용자 삽입 이미지
부.....분명.......냥이님은 어깨에 날개가 있으실겁니다-_-; 직접 손으로 쓰시다니 대단하십니다 ^^ 매우 귀여운 말투와 글씨체로 이렇게 보내주시니 감사합니다. 연애편지라는 것을 많이 못 받아봤는데, 왠지 연애편지 받는 기분이네요-_-; 감사합니다 ^^

위자드웍스 공식홈페이지 오픈
홈페이지가 위젯을 강조한 회사답게 첫화면이 매우 위젯스럽군요. 게다가 매우 깔끔하고 역동적인 표현으로 메뉴나 화면을 표현한 것이 매우 마음에 듭니다 ^^ CEO인사말에는 사장님이 직접 나오셔서 동영상으로 말씀해주시는 센스 ^^ PEOPLE에 인재상부분에는 재미있는 동영상도 있네요 ^^

암튼 결론은 책 잘받았다는 겁니다 ^^ 감사합니다 ^^

 
Posted by 머드초보
,
 
항상 신기한 것으로 다가오는....위자드웍스의 또 다른 서비스를 런칭했네요.

위자드팩토리 주소입니다.
http://www.wzdfactory.com/

예전에 다음에서 런칭한 위젯뱅크와 비슷한데요.
위젯뱅크와 비교를 해서 보면 틀린 점이 있다면 해당 위젯의 크기를 조절할 수 있습니다-_-; 게다가 이동도 할 수 있습니다. 또, 블로그의 달린 모습을 볼 수 있는데.....
블로그를 그 미리보기 바탕화면에 띄워줘서 해당 위젯을 거기다가 그냥 위치 시켜보는겁니다! 참 기발하군요^^

사용자 삽입 이미지

다음 검색기를 선택했는데....음...미리보기를 한 것 같지 않아요-_-; 진짜 미리보기를 했었으면 하는데 ^^

또 해당 위젯마다 태그를 가지고 있어서 특정 역할을 하는 것 끼리 검색을 할 수 있더군요. 관심위젯으로 등록할 수도 있고, 선택을 해서 설치를 하게 되면 코드를 보여주는데, 이건 전에도 말했듯이 매우 쉽게 블로그에 등록할 수 있게 플러그인을 만들었으면 하는 생각이 들었습니다. 하지만-_-; 이렇게 하게 되면 위자드팩토리 사이트가 무의미해질 것 같아서......

그냥 퍼가기만 하고 나의 위젯정보를 보니.....사용하고 있는 위젯에 추가가 되어있네요.

근데...이거 왜 추천블로그를 위젯으로 만들었는지 모르겠네요. 별로 안 쓸 것 같은데-_-;
그리고, 그냥 일반 카테고리에서도 추천블로그가 나오는데, 이거 안나오게 하는 게 더 나을 듯 하네요. 공부/퀴즈 카테고리를 선택했는데, 추천블로그도 몇 개 같이 나옵니다. 추천블로그는 추천블로그 카테고리에만 나와야할 듯한데, 버그인지 모르겠네요 ^^

그리고, 모바일과 연동이 된다고 하네요. 모바일 연동은 아직 안되나봐요. 찾아봐도 없네요 ^^

다음위젯뱅크에는 게임도 있는데, 여기에는 없네요^^ 미술작품 감상 위젯도 있던데-_-;
둘 다 아직 초기 단계인데 얼른 빨리 성장했으면 좋겠네요. 블로그에 달고 싶을 만한 좋은 위젯을 만들었으면 좋겠습니다 ^^ 11월에 오픈하는 위젯만들기(개발자다보니 개발에 관심이 가는군요^^)에 어떤 기능이 제공되는지 궁금하네요^^
 
Posted by 머드초보
,
 
올블로그를 보다가 Daum에서 위젯뱅크를 런칭했다는 글을 보고 한번 가보았습니다.

http://widgetbank.daum.net/

오.....위젯들이 한 곳에 모여있군요 ^^ 설치도 매우 쉽게 클릭하면 설치형 블로그이면, 설치형 블로그에 넣을 수 있는 코드를 리턴해주고, 티스토리는 계정을 등록해야하는군요.

그래서 저도 시계를 하나 가져왔습니다. 시계가 좀 간지나서-_-; 언제 내릴지 모르겠지만 ^^
제 블로그에는 위젯이 3개나 있는데요.
문자보내주는 엄지위젯, 랭킹을 보여주는 야후블로그검색 순위 뱃지, 그리고 방금 가져온 시계 위젯.

위젯이 블로그에 많아지면 블로그 로딩 속도도 느려지고, 여기저기 덕지덕지 붙어있는게 참 보기 안 좋을 수 있습니다. 그래서 자신의 블로그 스킨에 맞는 위젯을 가져와야하고, 꼭 필요한 위젯을 가져와야하죠 ^^

이 다음 위젯뱅크에서 좋은 점은 위젯을 미리 체험할 수 있군요(원래 다 그런가-_-)

더욱 재미있는 것은 게임도 있습니다-_-; 방금 퀴즈하고 볼링을 해봤는데, 우와 재미있네요 ^^
이 볼링은 공이 왜 랜덤으로 막 가는 것 같네-_-;

아직 위젯을 제작하는 회사는 얼마 되지 않아서 거의다 다음이 제작한 것 같습니다.

widget


아직 위젯을 가져오는 방법을 좀 더 쉽게 해주었으면 합니다만, 보안상 그건 좀 어려울지도 모르겠네요.
그 위젯 쉽게 가져오는 플러그인을 설치한 블로그에서는 여기서 위젯 가져오기 클릭하면 자동으로 위젯이 추가가 되어있어서 위젯 위치만 바꾸면 되는 뭐그런-_-; 할 수 있을까-_-;

암튼 여러분도 위젯을 달아보세요~ 블로그가 간지납니다~
 
Posted by 머드초보
,