david's daily developer note

[TwiterAPI] 1. 권한 인증. 본문

Develop (kids)

[TwiterAPI] 1. 권한 인증.

mouse-david 2010. 10. 7. 15:47
728x90
Twitter API를 사용한 어플리케이션을 만들려면,, Twitter 계정이 있어야 하고, 어플리케이션을 등록 시켜야 한다. 
등록 후 받는 ConsumerKey와 ConsumerSecret로 AccessToken를 요청 할 수 잇고, AccessToken으로 Twitter 리소스에 접근할 수 있다.

그 과정은 아래 링크에 자세히 나와 있다. 
http://smok95.tistory.com/213

Twitter API는 많은 언어를 지원하고, API를 컨트롤 하는 다양한 오픈 소스가 존재한다.
개발 환경에 맞게 선택하거나, 자신이 손에 익은 언어를 선택하면 되겠다. 그래서~나는 C#과 오픈소스인 twitterizer를 이용한다.

twitterizer에 대한 정보는 아래 사이트에 있다. Documentation와 소스, 예제를 사용할 수 있다. 아래 소스도 인증 과정의 예제이다. 


Twitterizer2.dll을 다운 받고, 프로젝트에 추가 하고, 인증을 위한 폼과 .config파일을 프로젝트에 추가하자. 
config파일은  ConsumerKey와 ConsumerSecret를 저장하고, 추후 인증시에 중복 시도를 방지하기 위해서 사용한다. 생략.

인증을 위해서 인증 폼을 로드하면,  ConsumerKey와 ConsumerSecret값으로 AccessToken값을 요청한다.

private string requestToken;   

OAuthTokenResponse requestAccessTokens = OAuthUtility.GetRequestToken(
ConfigurationManager.AppSettings["Twitterizer.Desktop.ConsumerKey"],
            ConfigurationManager.AppSettings["Twitterizer.Desktop.ConsumerSecret"]);

            this.requestToken = requestAccessTokens.Token;

            this.RequestLinkText.Text = @"It appears to be your first time running our sample application. 
                            To authenticate yourself, please click here. When prompted, come back here and enter your PIN.";
            this.RequestLinkText.LinkArea = new LinkArea(this.RequestLinkText.Text.IndexOf("click here"), "click here".Length);
            this.RequestLinkText.Tag = OAuthUtility.BuildAuthorizationUri(requestAccessTokens.Token).AbsoluteUri;

위의 소스가 AccessToken를 요청하고, 아래와 같이 Pin값을 얻어오는 링크를 호출한다. Pin값은 인증을 증명하는 정수값이다.

System.Diagnostics.Process.Start((string)this.RequestLinkText.Tag);

이제, ConsumerKey ,  ConsumerSecret , requestToken, Pin값을 얻었다. 이 값들로 최종 AccessToken를 받는다.
아래와 같이 이 값을 .config파일에 저장하고, 이 파일 정보를 이용해서, twitter API를 이용하자.

try
{
      OAuthTokenResponse accessTokens = OAuthUtility.GetAccessToken(
              ConfigurationManager.AppSettings["Twitterizer.Desktop.ConsumerKey"],
              ConfigurationManager.AppSettings["Twitterizer.Desktop.ConsumerSecret"],
              this.requestToken,
              this.PinTextBox.Text);

              Configuration appConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
              appConfig.AppSettings.Settings.Add("Twitterizer.Desktop.AccessToken", accessTokens.Token);
              appConfig.AppSettings.Settings.Add("Twitterizer.Desktop.AccessTokenSecret", accessTokens.TokenSecret);                                   appConfig.AppSettings.Settings.Add("Twitterizer.Desktop.UserId",accessTokens.UserId.ToString(CultureInfo.CurrentCulture));
              appConfig.AppSettings.Settings.Add("Twitterizer.Desktop.ScreenName", accessTokens.ScreenName);
              appConfig.Save();

              ConfigurationManager.RefreshSection("appSettings");

              MessageBox.Show(
                  string.Format("Thanks for authenticating, {0}.", accessTokens.ScreenName));
}
catch (TwitterizerException tex)
{
              MessageBox.Show(
                  string.Format("You could not be authenticated: {0}", tex.ErrorDetails.ErrorMessage));
}

728x90