2016-09-02 11 views
2

を送信していないしかし、それは私が私のアプリの設定をチェックして、それがいっぱい持っている悪い認証データC#TweetSharpは、私は、ユーザー(現在はそれをテスト)にツイートを送信するためにTweetSharpを使用していますツイート

{"errors":[{"code":215,"message":"Bad Authentication data."}]}

に戻ってくる続けます読み書きアクセス。私はコンシューマーキーを再生成しようとしましたが、まだ運がありません。ここ

は私のコードは

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

ツイートを消費者として送ることはできませんが、ツイートはユーザーアカウントで「所有」する必要があります。 Twitterアカウントを登録し、アクセストークン(コンシューマートークンに加えて)を取得するために完全なoauth認証プロセスを行い、次に両方のトークンを使用してTweetSharpサービスを再認証する必要があります。

あなたのコードはほぼそこに届きます(私は思います)。 Process.startコールの後に、認証プロセスを完了してそのユーザーとして動作するために、ブラウザで返された検証子(ユーザーがログインした後に表示される番号)を使用するロジックが必要です。現時点では、あなたのコードはそのプロセスの半分を取得しますが、完了しませんので、TweetSharpサービスをツイートしようとすると、ユーザーではなくアプリとしてのみ表示されます。

originalTweetSharp readme.mdには、欠落しているコードが含まれています。ステップ3ログイン後、ブラウザに返された実際の検証を必要とします:

//ステップ3 -

アクセストークンのためのリクエストトークンを交換した文字列の検証=「123456」; // < - これはあなたのアプリケーションによってアプリケーションに入力されます。

OAuthAccessTokenアクセス= service.GetAccessToken(requestToken、verifier);

//ステップ4 - ユーザーがアクセストークン service.AuthenticateWith(access.Token、access.TokenSecret)を使用して認証します。

//ここであなたのツイートコールが機能します。

また、サーバー上のWebアプリケーションでこれを行うように見えますか?あなたは完全に間違ったoauthの流れを使用しています(私は信じています)。これはデスクトップアプリケーション用に設計されているため、ユーザーがログインするための新しいブラウザプロセスを開始する呼び出しがあります。私はそれを使ったことがないので、ウェブフローがどのように動作するかは完全にはわかりませんが、受信した認証URLにリダイレクトする必要があり、Twitterに登録されたコールバックがあなたのサイトに戻ってくるはずです。私はoauthの流れを通って戻ることができるいくつかの種類の状態パラメータがあると思うので、セッションIDなどに基づいて中断した場所でピックアップする独自のロジックを実装することができます。

+0

ありがとうございます。私はTweetSharpが私の要件を実装する最良の方法ではないと信じています。私はoAuth技術を試してみましたが、多くの試みの後でさえrequestTokenを取得するのに失敗しました。それは私の元の解決策に戻り、そこにいるようだ。ありがとうございました – Kevin

+0

明らかにtweetsharpを使用する必要はありません(おそらくサポートされていないはずはありません)が、ここではクライアントでoauthを理解して実装することが問題です。私が知る限り、Twitterはoauth1.0a authを現在サポートしているだけなので、あなたが選択したライブラリでこれを把握しなければなりません。私はドキュメントが他のライブラリにとっては良いかもしれないと思うが、基本的な認証フローは変わらない。おそらく、dev.twitter.comやoauth1.0のドキュメントでTwitterを読んでみてください。がんばろう! – Yort

+2

TweetSharpを使用して作業しています.Webアプリケーションをサポートしています。私のソリューションを投稿します。 – Kevin

関連する問題