2016-09-02 4 views
2

읽기 및 쓰기 액세스. 나는 또한 나의 소비자 열쇠를 재생성하는 것을 시도하고 그러나 아직도 운이 없다. 여기C# TweetSharp 전송하지 트윗

내 코드 내가 잘못 아무것도

public ActionResult AccessToken() 
{ 

    string oauth_consumer_key = "<consumer key>"; 
    string oauth_consumer_secret = "<consumer secret>"; 

    var service = new TwitterService(oauth_consumer_key, oauth_consumer_secret); 

    // Now we need the Token and TokenSecret 
    OAuthRequestToken requestToken = service.GetRequestToken("http://localhost:37808/"); 
    string authURL = service.GetAuthorizationUri(requestToken).ToString(); 

    Process.Start(authURL); 

    SendTweetOptions options = new SendTweetOptions(); 
    options.Status = "Hello there Twitter"; 

    service.SendTweet(options); 

    var re = service.Response.Response; 

    return View();    
    } 

암이다?

+0

Tweetsharp는 사용되지 않습니다. Tweetinvi와 같은 다른 라이브러리를 사용해 보았습니까? – Linvi

답변

3

마지막으로 문제가 해결되어 잘 작동합니다. Yort의 의견을 기반으로합니다.

public ActionResult AccessToken() 
{ 
     // Step 1 - Retrieve an OAuth Request Token 
     TwitterService service = new TwitterService(ConfigurationManager.AppSettings["TwitterConsumerKey"], ConfigurationManager.AppSettings["TwitterConsumerSecret"]); 

     // This is the registered callback URL 
     OAuthRequestToken requestToken = service.GetRequestToken("http://localhost:37808/Twitter/OToken"); 

     // Step 2 - Redirect to the OAuth Authorization URL 
     Uri uri = service.GetAuthorizationUri(requestToken); 
     return new RedirectResult(uri.ToString(), false /*permanent*/); 
     //return View(); 
} 

public ActionResult OToken() 
{ 
     return View(); 
} 

public ActionResult UserInfo(string oauth_token, string oauth_verifier) 
{ 

     var requestToken = new OAuthRequestToken { Token = oauth_token }; 

     // Step 3 - Exchange the Request Token for an Access Token 
     TwitterService service = new TwitterService(ConfigurationManager.AppSettings["TwitterConsumerKey"], 
                ConfigurationManager.AppSettings["TwitterConsumerSecret"]); 
     OAuthAccessToken accessToken = service.GetAccessToken(requestToken, oauth_verifier); 

     // Step 4 - User authenticates using the Access Token 
     service.AuthenticateWith(accessToken.Token, accessToken.TokenSecret); 
     TwitterUser user = service.VerifyCredentials(new VerifyCredentialsOptions()); 
     ViewBag.Message = string.Format("{0}", user.ScreenName); 

     // Step 5 - Send Tweet to User TimeLine 
     SendTweetOptions options = new SendTweetOptions(); 

     string URL = "file:\\C:\\Users\\<User>\\Desktop\\test.jpg"; 
     string path = new Uri(URL).LocalPath;   

     // Sending with Media 
     using (var stream = new FileStream(path, FileMode.Open)) 
     { 
      service.SendTweetWithMedia(new SendTweetWithMediaOptions 
      { 
       Status = "<status>", 
       Images = new Dictionary<string, Stream> { { path, stream } } 
      }); 
     } 

     var responseText = service.Response.StatusCode; 

     if (responseText.ToString() == "OK") 
     { 
      ViewBag.Message = "Tweet Successful"; 
     } 
     else 
     { 
      ViewBag.Message = "Tweet Unsuccessful"; 
     }    
     return View(); 
    }          
} 
1

트위터를 그냥 소비자로 보낼 수 있다고 생각지 않지만, 트윗은 사용자 계정에 의해 "소유"되어야합니다. 트위터 계정을 등록한 다음 액세스 토큰 (소비자 토큰 외에)을 얻으려면 전체 oauth 인증 프로세스를 수행 한 다음 두 토큰을 사용하여 TweetSharp 서비스를 다시 인증해야합니다.

위 코드가 거의 도착합니다 (제 생각 엔). Process.start 호출 후 인증 프로세스를 완료하고 해당 사용자 역할을 수행하려면 브라우저에서 반환 된 확인 자 (사용자가 로그인 한 후 표시된 숫자)를 사용하는 논리가 필요합니다. 현재 코드는 프로세스의 절반을 차지하지만 완료되지는 않습니다. 따라서 TweetSharp 서비스를 트윗하려는 경우 사용자가 아니라 앱으로 만 표시됩니다.

originalTweetSharp readme.md에는 누락 된 코드가 포함되어 있습니다. 3 단계 로그인 후 브라우저에 반환 된 실제 검증이 필요 :

// 3 단계 - 액세스 토큰

문자열 검증에 대한 요청 토큰을 교환 = "123456"을; // < - 사용자가 응용 프로그램에 입력합니다.

OAuthAccessToken access = service.GetAccessToken (requestToken, verifier);

// 단계 4 - 사용자가 액세스 토큰 서비스를 사용하여 인증합니다 .AuthenticateWith (access.Token, access.TokenSecret);

// 이제 트위터 통화가 작동합니다.

서버의 웹 앱에서도이 작업을 수행 한 것으로 보입니까? 어떤 경우에는 당신은 완전히 잘못된 oauth 흐름을 사용하고 있습니다 (나는 믿습니다). 이 응용 프로그램은 데스크톱 응용 프로그램 용으로 설계되었으므로 사용자가 로그인 할 수 있도록 새 브라우저 프로세스를 시작하는 호출입니다. 나는 웹 플로우가 어떻게 작동하는지 전혀 모르지만, 사용자가 수신 한 승인 URL로 사용자를 리디렉션해야한다고 생각합니다. 트위터에 등록 된 콜백은 귀하의 사이트를 다시 가리켜 야합니다. oauth 흐름을 통해 다시 전달할 수있는 일종의 상태 매개 변수가 있다고 생각하여 세션 ID 나 그와 비슷한 것을 기반으로 중단 한 곳에서 직접 논리를 구현할 수 있습니다.

+0

감사합니다. 답변 해 주셔서 감사합니다. TweetSharp가 내 요구 사항을 구현하는 가장 좋은 방법이 아닐지도 모른다. 나는 많은 시도 후에도 requestToken을 얻지 못했지만 oAuth 기법을 시도했다. 나는 원래의 해결책으로 되돌아 가야한다.고맙습니다. – Kevin

+0

분명히 tweetsharp를 사용할 필요는 없습니다. (더 이상 지원되지 않을 수도 있습니다.)하지만 문제는 클라이언트에서 oauth를 이해하고 구현하는 것입니다. 내가 아는 한 트위터는 oauth1.0a 인증을 현재 지원하므로 어떤 라이브러리를 선택하든이 사실을 알아 내야 할 것입니다. 다른 라이브러리에서는 문서가 더 좋을 수도 있지만 기본적인 인증 흐름은 동일하게 유지됩니다. 어쩌면 dev.twitter.com 또는 oauth1.0 문서의 문서로 Twitter를 읽으십시오. 행운을 빕니다! – Yort

+2

TweetSharp를 사용하여 작업하고 웹 응용 프로그램을 잘 지원합니다. 내 솔루션을 게시합니다. – Kevin