Windows Phone 72010. 6. 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 동동(이재동)