Facebook SDK for .NET 반환 값으로 형식 지정 사용

개요



Facebook SDK for .NET 에서는, GetTaskAsync()등으로 유저의 프로필 정보등을 취득할 수 있습니다만, 형태를 아무것도 지정하지 않으면 dynamic형으로 돌려주어집니다. dynamic 형은 편리합니다만, Visual Studio등의 IDE에서는 인텔리센스를 사용할 수 없습니다.
후속 유닛 테스트나 개발 효율도 생각하면 반환값에 형을 갖게 하는 것이 좋기 때문에, 그렇게 구현하는 방법을 소개합니다.

구현이 끝나면 아래 그림과 같이 인텔리센스가 효과가 있게 됩니다.


구현 방법



Facebook Graph API에서 자신의 프로필(/me)을 가져올 때 형식 지정을 이용해 봅니다.

우선 반환값을 받는 클래스를 정의한다.



우선은 반환값을 포함하는 클래스를 정의합니다.
Facebook Graph API 참조 를 참고로, API 반환값에 어떠한 필드가 있는지를 확인해, 그에 따른 클래스를 정의합니다.
자신의 프로파일(/me)의 경우, Graph API로부터는 User 객체 가 돌려주므로, 거기에 응한 필드를 적절히 정의합니다.
public class AboutMeResult
{
    public string first_name { get; set; }
    public string last_name { get; set; }
    public string gender { get; set; }
    public string id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    public UserPicture picture { get; set; }
    public List<WorkExperience> work { get; set; } = new List<WorkExperience>();
}

public class WorkExperience
{
    public string id { get; set; }
    public string description { get; set; }
    public Page employer { get; set; }
    public Page location { get; set; }
    public string start_date { get; set; }
    public string end_date { get; set; }
    public Page position { get; set; }
}

public class UserPicture
{
    public ProfilePicture data { get; set; }
}

public class ProfilePicture
{
    public int height { get; set; }
    public int width { get; set; }
    public bool is_silhouette { get; set; }
    public string url { get; set; }
}

public class Page
{
    public string id { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public string link { get; set; }
}

API 호출 결과를 정의한 클래스로 채우고 반환



그리고는, FacebookClient에서의 GetTaskAsync() 호출시에 위에서 정의한 AboutMeResult 클래스를 건네줍니다.
그러면 AboutMeResult 클래스의 인스턴스가 반환됩니다.
using Facebook;

var client = new FacebookClient(facebookAccessToken);
var myself = await client.GetTaskAsync<AboutMeResult>(
    "/me"
    , new { fields = "first_name,last_name,gender,id,name,email,work,picture.width(999)", locale = "ja_JP" }
    );

// myselfはAboutMeResultのインスタンス。myself.last_name みたいにアクセス出来るし、インテリセンスも効く

참고 정보


  • Facebook Graph API 참조
  • Get Facebook user's details and big profile picture in one call
  • Facebook SDK for .NET
  • Graph API 요청 변경
  • 좋은 웹페이지 즐겨찾기