이제 소스를 보도록 합시다.

아....근데 다른 언어를 이용해서 업로더를 구현해보신 분 계신가요? 플렉스에서는 이상하게 제목을 한글로 입력해서 업로드를 해버리면 업로드가 안되더군요.
MD5함수를 수정하면 가능합니다. ^^
이 부분은 좀 더 삽질을 해봐야할 부분인 것 같군요.
우선 영어는 뭐 잘 되니까-_-;

[code]
<mx:Script>
  <![CDATA[
   import com.adobe.webapis.flickr.methodgroups.Upload;
   import mx.controls.Alert;
   import flash.net.navigateToURL;
   import com.adobe.webapis.flickr.AuthPerm;
   import com.adobe.webapis.flickr.events.FlickrResultEvent;
   import com.adobe.webapis.flickr.methodgroups.Auth;
   import com.adobe.webapis.flickr.FlickrService;
 
   public var apikey:String = "해당API키";
   public var secretkey:String = "해당비밀키";
   public var flickrService:FlickrService;
   public var frobResult:FlickrResultEvent;
   public var frob:String = new String();
   public var token:String = new String();
   public var fileRef:FileReference;
   
   public function Authentication():void {
    flickrService = new FlickrService(apikey);
    flickrService.secret = secretkey;
    flickrService.addEventListener(
        FlickrResultEvent.AUTH_GET_FROB, getFrobResponse);
    flickrService.auth.getFrob();
   }
   
   public function getFrobResponse(event:FlickrResultEvent):void {
    if (event.success) {
     frob = String(event.data.frob);
     var auth_url:String = flickrService.getLoginURL(frob, AuthPerm.WRITE);
     navigateToURL(new URLRequest(auth_url), "_blank");
     Alert.show( "인증하기위한 브라우저가 뜰꺼에요."
        + "로그인한다음에 OK버튼을 누르세요^^",
        "인증",
        Alert.OK | Alert.CANCEL,
        null,
        onCloseAuthWindow );
    }
   }
   
   private function onCloseAuthWindow( event:* ):void {
    if ( event.detail == Alert.OK ) {
     flickrService.addEventListener(
        FlickrResultEvent.AUTH_GET_TOKEN, getTokenResponse );
     flickrService.auth.getToken( frob );
    }
   }

   private function getTokenResponse( event:FlickrResultEvent ):void {
    if ( event.success ) {
     token = event.data.auth.token;
     flickrService.token = token;
    } else {
     Alert.show("인증에 실패했습니다.");
    }
   }
   
   public function findFile():void {
    if (token == "") {
     Alert.show("인증부터 하세요!");
     return;
    }
    fileRef = new FileReference();
   
    try {
        fileRef.addEventListener(Event.SELECT, selectHandler);
        fileRef.addEventListener(Event.COMPLETE, completeHandler);
        fileRef.addEventListener(
           DataEvent.UPLOAD_COMPLETE_DATA, onUploadCompleteData);
        var success:Boolean = fileRef.browse();
       } catch (error:Error) {
           trace("Unable to browse for files.");
       }
   }
   
   public function selectHandler(event:Event):void {
    var uploader:Upload = new Upload(flickrService);
    uploader.upload(fileRef);
   }
   
   public function checkTokenResponse(event:FlickrResultEvent):void {
    Alert.show(event.data.auth.token);
   }
   
   public function completeHandler(event:Event):void {
    trace("업로드 완료");
   }
   
   public function  onUploadCompleteData(event:DataEvent):void {
    Alert.show(event.data);
   }
  ]]>
 </mx:Script>
 
 <mx:Button label="인증" click="Authentication();"/>
 <mx:Button label="파일업로드" click="findFile();" />
[/code]

오.....간단합니다.
아... apikey secretkey 에는 각각 발급받은 키를 넣어주세요 ^^
인증이라는 버튼이 있는데 누르게 되면 Authentication이라는 메소드를 호출합니다.
FlickrService라는 클래스가 있는데 apikey를 인자로 받아서 생성합니다.
그러면 이놈으로 인증이 필요없는 API를 다 호출할 수 있습니다 ^^
flickrService.auth.getFrob(); 이런식으로 Frob을 얻어오고!
navigateToURL로 브라우저를 띄워서 인증url로 이동을 시킨 후 로그인을 하게 되면
flickrService.auth.getToken( frob ); 으로 인해 토큰을 가져오게 됩니다.
토큰만 가져오면 다 끝납니다-_-; 이걸로 권한에 관한 건 다할 수 있어요 ^^

이거뭐 플렉스로 해도 될 것 같아요. 안해봤는데 될 것 같아요-_-;

파일업로드 버튼을 클릭하면 파일선택창이 뜨는데 이미지사진 아무거나 선택해서 업로드하면 돼요 ^^
(참고로 이미지파일도 한글이면 안돼요. 영어로 바꿔서 선택하세요 ^^)
FileReference 요놈도 설명해야하는 나중에-_-;
되는 거 증명동영샷~-_-; (실은....좀 심심해서-_-)


 
Posted by 머드초보

댓글을 달아 주세요

 

오....삽질 끝에 해냈습니다--;
라이브러리 다 제공하는데 삽질했습니다-_-;
제목, 내용, 태그, 등등 입력하는 것 따윈 없습니다--;
오로지 이미만 선택해서 업로드해줍니다 ^^
테스트환경은 Flex Builder 3 Beta 3에서 했습니다.

우선 Flickr Open API를 사용하기 위해서는 KEY를 발급받아야 돼요 ^^
http://www.flickr.com/services/api/keys/apply/
여기를 들어가서 로그인 하시고 키를 신청하면 됩니다.
키 하고 비밀 2개를 발급받게 됩니다. 잘 기억해두세요 ^^


http://code.google.com/p/as3flickrlib/
여기가면 as3용 플리커라이브러리가 있습니다.
근데 이거 쓰면 업로드메소드가 주석처리 되어있더군요.
저 라이브러리가 릴리즈되었을 때에는 FlashPlayer가 8.5였던 것 같은데 그때는 업로드가 안되었던 것 같습니다.
9.0되면서 업로드가 되는 것 같습니다.
업로드부분을 조금 수정했습니다.

invalid-file

한글파일명도 돼요 ^^



이거하고 어도비에서 만든거 하나 더 필요합니다.
http://code.google.com/p/as3corelib/
저기가면 여러가지 유용한 함수를 모아둔 lib인 것 같아요. 저게 필요해요!

그럼 프로젝트를 만들어봅시다.
File -> New -> Flex Project 선택 후 Desktop application에 체크하시고,
ProjectName을 FlickrUploader라고 합시다. Finish를 클릭하면 프로젝트가 만들어 집니다.
라이브러리를 추가해야하는데요. lib폴더가 있습니다.
거기다가 2개의 SWC파일을 복사해주세요. flickr.swc, corelib.swc

프로그램에서 인증을 받는 코드가 들어가는데요.
인증권한은 read, write, delete 3가지 권한이 있는 것 같아요.
미친 플리커가 API문서를 번역기 돌렸는지 이상하게 번역해놨어요-_-;
http://www.flickr.com/services/api/auth.howto.desktop.html
AIR는 데스크탑 애플리케이션이니까 데스크탑용 인증방법을 보도록합시다 ^^

인증절차를 아주 간략하게 설명하자면 이렇습니다.
Frob요청 -> Frob과요청권한을 이용해 로그인페이지로 이동 -> 사용자는 로그인 후 애플리케이션으로 돌아옴.
-> 해당애플리케이션은 로그인으로 인해 token을 얻음. -> 이토큰으로 인증이 필요한 OPEN API를 호출할 수 있음 ^^ 끝!

간단합니다. 소스는 다음 시간에!-_-;


 
Posted by 머드초보

댓글을 달아 주세요