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

아....근데 다른 언어를 이용해서 업로더를 구현해보신 분 계신가요? 플렉스에서는 이상하게 제목을 한글로 입력해서 업로드를 해버리면 업로드가 안되더군요.
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 머드초보

댓글을 달아 주세요

  1. 안녕하세요 2008.01.29 03:22  댓글주소  수정/삭제  댓글쓰기

    flickr 매쉬업 해보려다가 여기까지 오게 되었는데요 flickr 라이브러리에서 Upload 부분을 수정하셨다고 하셨는데 죄송하지만 그 수정본좀 받아 볼 수 있을까요? 올려주신 swc 를 사용하면 upload 가 잘 되긴하는데 한글문제가 있어 md5 부분을 수정하려고 하는데요 코드.구글 에 있는 as3.0flickr 라이브러리 소스를 직접 수정하니 invalid signature 오류가 계속 뜨네요 ... md5 해쉬를 어도비 core lib 에 있는걸 써도 마찬가지로요 ... as3.0 라이브러리 그룹에 patch 내용분이 있어 거기에 맞춰 수정해도 똑같네요 ㅠㅠ 당췌 무슨 문제인지 가능하시다면 swc 만들기전 src 파일좀 부탁드리겠습니다 .

    제 메일은 neth2000@lycos.co.kr 입니다

    꼭좀 부탁드립니다~!

    • BlogIcon 머드초보 2008.01.29 08:25  댓글주소  수정/삭제

      맨 위에다가 써놨어요 ^^ 저도 한글이 안돼서요 ^^
      그리고 메일 드렸어요 ^^ 반갑네요.
      저처럼 flex로 flickr 매쉬업을 삽질하시는 분이 계시다니 ㅠ

  2. 안녕하세요 2008.01.29 11:16  댓글주소  수정/삭제  댓글쓰기

    머드초보님 답장 감사합니다~!!
    일단 정말 감사드리구요 ~! 한글 문제를 해결했습니다.~!
    정말 몇일을 이것땜에 삽질했는지 모르겠네요 ...
    문제는 메일로 말씀 드린것 처럼 MD5 가 utf-8 을 지원하지 않는 것이어서 그렇습니다 .
    core.lib 의 MD5 대신에 utf-8을 지원하는 MD5를 사용하시면 될 것 같습니다. 방금 테스트 해봤는데 잘 돼네요
    파일은 Class 로 정리 해서 나중에 메일로 보내드릴게요 ~ ^^
    .. file name 이거 하나 땜에 그 고생을 했다니 ㅠㅜ 진작에 물어볼걸 그랬나봐여 ㅋ

    • BlogIcon 머드초보 2008.01.29 13:13  댓글주소  수정/삭제

      우와! 안녕하세요님 최고에요 ^^
      게다가 알려주신다니 너무 감사하네요 ^^
      core.lib에 있는 MD5메소드가 UTF-8을 지원안하는것이었군요 ^^

  3. BlogIcon eirene 2008.05.08 09:44  댓글주소  수정/삭제  댓글쓰기

    헉.. MD5 클래스가 UTF-8 지원하게 하려면 어떻게 해야 하나요..;;; 털썩...+_+

    • 머드초보 2008.05.08 13:16  댓글주소  수정/삭제

      앗~ 에이레네님 반갑습니다^^
      저 위에 안녕하세요님이 MD5클래스를 다시 만들어주셨어요^^
      UTF-8을 지원하는 걸루 ^^
      고걸로 쓰면 되는데...제가 MD5를 이해를 잘 못해서-_-;

  4. BlogIcon eirene 2008.05.08 13:15  댓글주소  수정/삭제  댓글쓰기

    헉.. http://pajhome.org.uk/crypt/md5/ 여기서 해결했습니다 ㅋㅋㅋ ^^

    • 머드초보 2008.05.08 13:17  댓글주소  수정/삭제

      오....자바스크립트네요 ^^
      근데 실시간으로 아래 댓글이 달리네요 ^^

  5. BlogIcon eirene 2008.05.08 13:34  댓글주소  수정/삭제  댓글쓰기

    아 네 그러게요.. ㅋㅋ 자바스크립트 버전은 어차피 액션스크립트 버전과 내용상 차이가 없어서;; 함수 하나 추가하는 걸로 해결했습니다.. 저도 MD5 알고리즘을 잘 몰라서 ㅠㅠ 찾느라 욕 봤네요 ㅎㅎ ㅠ

  6. BlogIcon eirene 2008.05.08 13:38  댓글주소  수정/삭제  댓글쓰기

    테스트해 본 결과.. 인증은 어플리케이션당 한번만 필요하므로 어플리케이션을 실행할 때마다 인증받기 보다는 처음에 최초 실행할 때만 인증받고 나중에는 로컬 디비에서 토큰을 가져오는 방식이 좋을 거 같네요 ^^ me2day 매쉬업 만든다고 자료 찾아보다가 여기까지 왔네여 ㅎㅎ

    • 머드초보 2008.05.08 21:32  댓글주소  수정/삭제

      me2day도 md5로 하나보네요.
      게다가 flickr와 같이 한글과 md5문제가 있었나보군요^^
      우와 어떤 것을 만드시는지 기대되는데요? ^^

  7. BlogIcon eirene 2008.05.08 22:41  댓글주소  수정/삭제  댓글쓰기

    me2day 매쉬업을 만들면서 동시에 flickr 오픈 api랑 유튜브와도 연동하는;;; 잡스러운 걸 만들고 있어요... 언제 다 만들게 되면;; 알려드릴께요... 함수추가하는 거는 위에 링크 보시면 일반 스트링을 UTF-8로 바꾸는 함수가 하나 있어요... 그걸 액션스크립트 버전 MD5.as 에 추가하신 담에;;; (데이터 타입은 알아서;;; ) hash() 메소드인가에서 파라미터로 넘겨받은 스트링을 그 함수를 한번 걸쳐서 컨버팅하면 됩니다 ㅋㅋㅋ
    me2day도 md5를 쓰고 있기는 한데 아이디/비번이 다 영문 내지 숫자라 한글 문제는 없었습니다;;; 플리커가 문제였습죠 ㅠㅠ

    • 머드초보 2008.05.09 18:04  댓글주소  수정/삭제

      오 그렇군요 ^^
      어떤 매쉬업이 나올지 궁금하네요 ^^
      플리커API는 언제쯤 업데이트가 될지 궁금하군요 ^^
      신경 안쓰는 것 같아요 ^^

  8. BlogIcon eirene 2008.05.12 00:42  댓글주소  수정/삭제  댓글쓰기

    http://joshy21.just4fun.co.kr/Me2Wiz.air 에 지금까지 개발된 걸 배포하고 있습니다 ㅋㅋ 간단히 me2day에서 바로 로컬 이미지 플리커로 업로드해서 url 받아서 드래그 선택된 글자와 맵핑시키는 기능까지 구현돼 있습니다.. (이미지 링크시킬 글자를 마우스 드래그로 먼저 선택후 이미지 삽입 버튼 눌러서 이미지 고르면 상황 종료!) ㅋㅋ 로그인할 때 아이디는 me2day 아이디, 비번은 사용자 키;;;를 입력하면 됩니다... 플리커 인증은 최초 한번만 받고 그 다음부터는 로컬 디비에서 토큰을 가져오도록 하는 방식을 썼습니다 ^^

    플리커 api는 farm도 제공 안하고 utf-8 md5도 제공 안하고 upload도 제공 안하는 등 그 자체로는 제대로 쓸 수 없는 부분이 많더군여.. 그래서 이번에 이것들을 제가 모두 수정했습니다 ㅠㅠ 필요하신 부분 있으면 말씀하세요 ^^

    • 머드초보 2008.05.12 23:28  댓글주소  수정/삭제

      미투데이 로그인 하라고 나오는데요-_-;
      아이디하고 암호에 뭐라고 쳐야하는거죠?-_-;
      로그인이 안돼요 ㅠㅠ

  9. BlogIcon eirene 2008.05.12 23:30  댓글주소  수정/삭제  댓글쓰기

    암호에는 사용자 키ㅠㅠ를 넣어야 돼요 ^^ 로그인하고 환경설정에 보시면;;; 사용자 키가 있어요 ㅠㅠ

    • 머드초보 2008.05.14 08:23  댓글주소  수정/삭제

      아 그렇군요! 미투데이를 제가 안써봐서 그런데 그냥 댓글로 글을 쓰는건가요? ^^ 신기하네 ^^

  10. inee82 2009.11.10 17:40  댓글주소  수정/삭제  댓글쓰기

    작성하신 포스트 잘보았습니다.

    저도 요즘 플리커 업로드를 활용해보려고 하고 있는데, 한가지 문제가 자꾸 걸려서 질문 합니다.

    인증토큰까지는 잘 받아집니다. 문제는 받아둔 인증토큰을 이용하여, 사진을 올릴려고 할때, api_sig가 자꾸 문제가 생깁니다.

    invalid signature라고 뜹니다. 해당 서명을 얻기위해 MD5조합한 문장을 보여 드리겠습니다. 한줄로 나열되다 보니 복잡할지도 모르겠네요.

    비밀키 : 4d4263a0de88f921
    api_key : 239df1a5f435719c37d43c03c1860c7e
    auth_token : 72157622641849993-baab3b3caa50f1e7
    content_type = 1
    description = ccc
    hidden = 1
    is_family = 0
    is_friend = 0
    is_public = 1
    safety_level = 1
    tags = bbb
    title = aaa

    위 문장을 MD5하기위해 정리한경우엔

    4d4263a0de88f921api_key239df1a5f435719c37d43c03c1860c7eauth_token72157622641849993-baab3b3caa50f1e7content_type1descriptionccchidden1is_public1safety_level1tagsbbbtitleaaa

    와 같은 문장입니다. 이것을 MD5하여 api_sig에 넣어줬었는데...에러가....조언좀 구해볼수 있을까요?

    • 머드초보 2009.11.15 19:19  댓글주소  수정/삭제

      안녕하세요~
      오래전에 삽질한거라 기억이.....잘 안납니다만....
      죄송합니다 ㅠㅠ

 

오....삽질 끝에 해냈습니다--;
라이브러리 다 제공하는데 삽질했습니다-_-;
제목, 내용, 태그, 등등 입력하는 것 따윈 없습니다--;
오로지 이미만 선택해서 업로드해줍니다 ^^
테스트환경은 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되면서 업로드가 되는 것 같습니다.
업로드부분을 조금 수정했습니다.

flickr.swc

한글파일명도 돼요 ^^



이거하고 어도비에서 만든거 하나 더 필요합니다.
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 머드초보

댓글을 달아 주세요