Windows Phone 72010.06.11 16:47

어이쿠 완전 삽질 많이 했다….

 

첨에는 몰라서 샘플이 있는 오래된 rest api로 하였다… 하지만 역시 오래된거라서 그런지 안되는것도 많았다.. 특히 리스트 받아오는 부분.;;

 

이번에는 Graph API를 이용해서 facebook 정보를 얻고 feed를 던져보자~

 

일단 여기 Facebook API 공식 페이지를 참고하였다…

 

http://developers.facebook.com/docs/api#publishing

 

근데 iphone이나 안드로이드 폰이나 머 다 sdk가 있지만 여긴 없어서 노가다 작업을 할수 밖에 없다…ㅠㅠ

 

일단 제일 중요한… 인증부분 이것만 끝나면 거의 다 끝났다고 보면 된다.

 

일단 메소드를 사용 하기 위해서는 Access_token이 필요한데 또 이것을 얻기 위해서는 나름 험난한 여정(?)을 격어야 한다…

 

Access_token을 얻기위해 파라미터로는 api key(client_id), redirect_url, code 가 필요한데 여기서 또 code를 얻기위해서 페이지를 한번 이동시켜야 한다.

 

그렇기 때문에 webBrower control이 필요하다…

 

일단 code를 얻기 위한 url을 보자…

 

https://graph.facebook.com/oauth/authorize?client_id={Api Key}&redirect_uri=http://www.facebook.com/connect/login_success.html

 

api key는 facebook 어플에서 얻을수 있고 리다이렉션 url은 가장 유명하고 굴러다니는것을 썻다..내껀 웹이 아니기떄문에 (나름 웹 어플^^)

 

여기에 접속을 하게 되면 http://www.facebook.com/connect/login_success.html?code=블라블라블라~

 

라고 url로 준다.. 그러면 저것을 얻어서 이제 본격적으로 AccessToken을 얻자~

 

https://graph.facebook.com/oauth/access_token?client_id={API KEY}&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=3d870d8731e358c16ae6c54530450561&code={아까 받은 코드}

 

이러면 Json으로 Access_Token을 리턴해준다.

 

이걸로 멀할수 있느냐?

 

Friends: https://graph.facebook.com/me/friends
News feed: https://graph.facebook.com/me/home
Profile feed (Wall): https://graph.facebook.com/me/feed
Likes: https://graph.facebook.com/me/likes
Movies: https://graph.facebook.com/me/movies
Books: https://graph.facebook.com/me/books
Notes: https://graph.facebook.com/me/notes
Photo Tags: https://graph.facebook.com/me/photos
Photo Albums: https://graph.facebook.com/me/albums
Videos: https://graph.facebook.com/me/videos
Events: https://graph.facebook.com/me/events
Groups: https://graph.facebook.com/me/groups

 

다양하다… ;;

 

예를들면

나의 news Feed를 받고 싶으면

 

https://graph.facebook.com/me/home?access_token={아까받은거}

 

넣으면 되는것이다..

 

혹시 저 url에 뒤에 일일히 token값을 넣기 귀찮다면 meta data를 이용하면 편하다.

https://graph.facebook.com/me?metadata=1

 

그리고 포스트 글을 쓸떼는

 

https://graph.facebook.com/me/feed?access_token?message=Helloworld(난 프로그래머니깐)

 

근데 중요한건 꼭 post방식으로 보내야 한다..Get은 안된다~

 

그리고 xml로는 안보내준다는거…

 

wp7에서는 이렇게 구현했다..

 

쓰는부분

public void WriteFeed(string accessToken, Action<string, Exception> callback)
       {
           string value = string.Empty;
 
           WebClient webClient = new WebClient();
           webClient.Headers["Content-Type"] = "";
 
           //var tokenUrl = new Uri(GetTokenUrl(code), UriKind.Absolute); //url도 나중에 파라미터로 넣으면 좋을듯            
           var url = GetWrtieFeedUrl(accessToken, "I am posting to my own feed");
           webClient.UploadStringAsync(new Uri(url),"POST",string.Empty);
           
           webClient.UploadStringCompleted += (s, e) =>
           {
               if (e.Error == null)
               {
                   value = e.Result;
               }
               callback(value, null);
           };            
       }
 
       public string GetWrtieFeedUrl(string token,string message)
       {            
           var url= string.Format("https://graph.facebook.com/me/feed?access_token={0}&message={1}",token,HttpUtility.UrlEncode(message));
 
           return url;
       }
 
 


 



인증부분



 
 
        public void  GetFacebookToken(string code, Action<string, Exception> callback)
        {
            string value = string.Empty;
 
            WebClient webClient = new WebClient();            
            var tokenUrl = new Uri(GetTokenUrl(code), UriKind.Absolute); //url도 나중에 파라미터로 넣으면 좋을듯
            
            webClient.DownloadStringAsync(tokenUrl);
            webClient.DownloadStringCompleted += (s, e) =>
                {
                    if (e.Error == null)
                    {
                        value = e.Result;
                    }
                    callback(value, null);
                };            
        }
public string GetTokenUrl(string code)
    {   
        return string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&redirect_uri={1}&client_secret={2}&code={3}",FacebookConfigrationManager.GetData("clientId"),FacebookConfigrationManager.GetData("redirectUrl"),FacebookConfigrationManager.GetData("clientSecret") ,code);            
    }
 
 


 



나중에 소스 첨부해야겠다~ 손이 피곤 ㅠㅠ

Posted by 동동(이재동)

댓글을 달아 주세요

  1. 김우진

    안녕하십니까 저는 최근 Facebook 연동이슈로 골치가 아픈 개발자 김우진이라고 합니다.

    개념을 잡는것부터 상당히 고전을 면치 못하였으나 귀하의 포스트를 보고 정말 큰도움 받았습니다.

    너무 감사드립니다.

    다만 한가지 해결하지 못한 문제가 있어 혹시 알고 계시면 도움 주십사 이렇게 글을 써봅니다.

    도움 주신대로 Access Token을 받아서 사용자로 하여금 권한을 득하여 POST로 사용자 wall에 글을 등록하는 것까지는 성공 하였습니다.

    하지만 제가 현재 진행하고 있는 프로젝트의 요건은 wall에 등록이 아닌 쪽지 발송인데요~

    /대상자 아이디/feed에 포스트하면 wall에 등록이 되는데 어떻게 해야 대상자에게 쪽지를 발송 시킬 수 있는지 아무리 찾아도 확인할 길이 없습니다.

    부디 넓은 아량으로 제가 잠시 도움 주신다면 정말 감사하겠습니다.

    감사합니다.

    김우진(cocobongo@empal.com, 010-9961-4177)

    2010.08.09 13:04 [ ADDR : EDIT/ DEL : REPLY ]
  2. Wang man

    정말 감사합니다. 전 Win Ce에서 facebook 개발에 필요한 API를 공부하고 있었는데 우연히 들리게 되었습니다.

    많은 정보를 얻고 또 많은 도움이 되었습니다.

    감사합니다.

    2014.03.10 20:00 [ ADDR : EDIT/ DEL : REPLY ]