두번째글입니다.
프로그램 설치 및 체험(?)은 아래의 INSTALL NOW을 클릭해주세요 ^^
Alternative content
이제 air프로젝트를 하나 생성합니다.
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical" width="300" height="300"
horizontalAlign="center" verticalAlign="middle"
verticalScrollPolicy="off" horizontalScrollPolicy="off">
<mx:Script>
<![CDATA[
import flash.net.navigateToURL;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import com.mudchobo.MudchoboOAuth;
private var mudchoboOAuth:MudchoboOAuth;
private var consumerToken:String = "자신의 Consumer Token";
private var consumerSecret:String = "자신의 Consumer Secret";
private var requestTokenURL:String = "http://www.storyq.net/oauth/request_token";
private var accesstokenURL:String = "http://www.storyq.net/oauth/access_token";
private var authorizeURL:String = "http://www.storyq.net/oauth/authorize";
private function login():void
{
// RequestToken 요청
mudchoboOAuth = new MudchoboOAuth(consumerToken, consumerSecret);
mudchoboOAuth.requestOAuth(new Object(), requestTokenURL, "POST",
requestTokenResultHandler, requestTokenFaultHandler);
currentState = "stateRequestToken";
}
private function logout():void
{
mudchoboOAuth = null;
currentState = "";
}
private function loginConfirm():void
{
// AccessToken요청
mudchoboOAuth.requestOAuth(new Object(), accesstokenURL, "POST",
accessTokenResultHandler, accessTokenFaultHandler);
}
private function loginCancel():void
{
Alert.show("로그인에 실패했습니다.");
currentState = "stateStart";
}
// RequestToken 요청 성공 시
private function requestTokenResultHandler(event:ResultEvent):void
{
currentState = "stateLogin";
mudchoboOAuth.parseData(event.result.toString());
authorizeHTML.location = mudchoboOAuth.authorizeSite(authorizeURL);
}
// RequestToken 요청 실패 시
private function requestTokenFaultHandler(event:FaultEvent):void
{
Alert.show(event.fault.toString() + "요청이 잘못 되었습니다.");
currentState = "stateStart";
}
// AccessToken 요청 성공 시
private function accessTokenResultHandler(event:ResultEvent):void
{
currentState = "stateShowMyQ";
mudchoboOAuth.parseData(event.result.toString());
// 스토리큐에서 자신의 큐리스트를 가져온다.
mudchoboOAuth.requestOAuth(new Object(), "http://www.storyq.net/boxes/mine.xml", "GET",
getQResultHandler, getQFaultHandler);
}
// AccessToken 요청 실패 시
private function accessTokenFaultHandler(event:FaultEvent):void
{
Alert.show(event.fault.toString() + "요청이 잘못 되었습니다.");
currentState = "stateStart";
}
// 자신의 큐리스트 가져오기 요청 성공 시
private function getQResultHandler(event:ResultEvent):void
{
dgQ.dataProvider = event.result.boxes.box;
}
// 자신의 큐리스트 가져오기 요청 실패 시
private function getQFaultHandler(event:FaultEvent):void
{
Alert.show(event.fault.toString() + "가져오는 도중 실패했습니다.");
}
// 버튼으로 다시 요청하기
private function clickReplyHandler():void
{
mudchoboOAuth.requestOAuth(new Object(), "http://www.storyq.net/boxes/mine.xml", "GET",
getQResultHandler, getQFaultHandler);
}
// 더블클릭 시 해당 큐로 이동
private function doubleClickDgQ():void
{
if (dgQ.selectedItem.uri != null)
{
navigateToURL(new URLRequest(dgQ.selectedItem.uri), "_blank");
}
}
]]>
</mx:Script>
<mx:states>
<mx:State name="stateStart">
<mx:SetProperty name="width" value="300"/>
<mx:SetProperty name="height" value="300"/>
</mx:State>
<mx:State name="stateRequestToken">
<mx:AddChild position="lastChild">
<mx:Label text="잠시만 기다려주세요..."/>
</mx:AddChild>
<mx:SetProperty target="{btnLogin}" name="enabled" value="false"/>
</mx:State>
<mx:State name="stateLogin">
<mx:SetProperty name="width" value="1024"/>
<mx:SetProperty name="height" value="768"/>
<mx:AddChild position="lastChild">
<mx:HTML width="1024" height="642" id="authorizeHTML"/>
</mx:AddChild>
<mx:RemoveChild target="{btnLogin}"/>
<mx:AddChild relativeTo="{authorizeHTML}" position="before">
<mx:HBox id="hbox1">
<mx:Button label="확인" click="loginConfirm()"/>
<mx:Button label="취소" click="loginCancel()"/>
</mx:HBox>
</mx:AddChild>
<mx:AddChild relativeTo="{hbox1}" position="before">
<mx:Text text="아래 창에서 StoryQ사이트 로그인페이지로 이동합니다. 
로그인 완료 후, 확인 버튼을 클릭하주세요." height="40"/>
</mx:AddChild>
</mx:State>
<mx:State name="stateShowMyQ">
<mx:RemoveChild target="{btnLogin}"/>
<mx:AddChild position="lastChild">
<mx:Button label="로그아웃" id="btnLogout" click="logout()"/>
<mx:Button label="다시 가져오기" id="btnReply" click="clickReplyHandler()"/>
</mx:AddChild>
<mx:SetProperty name="width" value="550"/>
<mx:SetProperty name="height" value="422"/>
<mx:AddChild position="lastChild">
<mx:DataGrid width="522" height="328" id="dgQ"
doubleClickEnabled="true" doubleClick="doubleClickDgQ()">
<mx:columns>
<mx:DataGridColumn headerText="제목" dataField="title"/>
<mx:DataGridColumn headerText="주소" dataField="uri"/>
</mx:columns>
</mx:DataGrid>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Button label="스토리큐에 로그인" id="btnLogin" click="login()"/>
</mx:WindowedApplication>
[/code]
대충만들어서 코드가 지저분합니다만-_-;
아마 알아보실 수 있을듯(응?-_-)합니다.
프로그램을 실행하면, 로그인버튼이 있는데, 로그인 버튼을 클릭하면, 위에서 말한 RequestToken절차가 실행됩니다. RequestToken을 얻어오게 되면, AIR프로그램은 자신의 브라우저를 하나 열어서 로그인 RequestToken을 파라미터로 한 Authorize사이트로 이동합니다.
여기서 사용자는 자신의 아이디로 로그인을 합니다. 로그인이 완료되면, 서버쪽에서 AccessToken을 만들어놓습니다.
로그인 후 위에 확인버튼을 클릭하게 되면, 클라이언트에서는 AccessToken절차가 시작됩니다. AccessToken을 가져온 뒤 그 해당 AccessToken을 이용해 보호된 자원에 접근하는 과정입니다.
접근해서 가져온 데이터는 자신의 큐리스트를 보여주는 겁니다.
자신의 큐들을 데이터그리드에 넣었으며, 그 데이터그리드의 해당 칼럼을 더블클릭하게 되면 해당 큐로 이동하게 됩니다. 정말 별거없네-_-;
위에 코드는 위와 같은 절차로 되어있습니다.
혹시...Oauth로 삽질하시는 분은 이 글로 도움이 되었으면 하네요 ^^
이전 글 링크 -
http://mudchobo.tomeii.com/tt/323PS. 이 짓으로 추석을 날렸습니다-_-;