2017-09-12 3 views
1

Tweetinviを使用してTwitterでいくつかのサービスステータスアップデートを公開していますが、それはそのようなことを行う良いライブラリのようですが、それを使用して石で設定されていません。Tweetinviなどを使用してC#Windowsサービスからつぶやきを公開する

しかし、私の研究でまだ得られていないことは、本質的にヘッドレスサービスであるTwitter認証を処理する明白な方法です。私はTwitterでアプリを作ったので、コンシューマーキーと秘密を持っています。ユーザー情報を要求し、フォロワーを獲得するための "アプリのみ"の認証を行うことはできますが、もちろんツイートを公開する権利はありません。

私の野望は、適切なツイッターアカウントを作成し、何らかの形でそのアカウントに対してサービスを認証し、定義された間隔で一般サービスからステータス更新を公開することです。それはかなり簡単な考えです。もちろん

は、私はここに述べたPINベースの認証のような何かを行うことができます:

https://github.com/linvi/tweetinvi/wiki/Authentication

私は、手動でそれを実行してPINコードを取得し、ワークフローを進めることができます。しかし、定期的に再認証が必要か、基本的に「永遠に」有効になるのでしょうか?私は可能な限り自動化する方法を模索しています。x時間ごとに認証をやり直さなければならないのは、この夢の中で大きなショックではありません。

もちろん、ステータスを公開するために使用されたツイッターアカウントのパスワードがありますが、手作業によるユーザーの介入なしに古い旧式のログインを行う方法はありません。

答えて

1

この動作は仕様です。 TwitterはOAuthを使用します.OAuthは、ユーザーがアプリケーションを許可できるようにするためのプロトコルです。これは、そうでなければ、あなたや他の誰かが知らないうちに彼らのために行動を実行することができるため、ユーザーには良いことです。

これを念頭において、これを行う唯一の方法は、ユーザーにあなたのアプリケーションを明示的に許可させることです。これは、ASP.NET MVCを使用して書いたLINQ to Twitterでこれを行う方法の例です。ユーザーがあなたのページにアクセスしたときに、BeginAsyncアクションの下にあるOAuthControllerにリダイレクトするボタンを付けることができます。

using System; 
using System.Configuration; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Web.Mvc; 
using LinqToTwitter; 

namespace MvcDemo.Controllers 
{ 
    public class OAuthController : AsyncController 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public async Task<ActionResult> BeginAsync() 
     { 
      //var auth = new MvcSignInAuthorizer 
      var auth = new MvcAuthorizer 
      { 
       CredentialStore = new SessionStateCredentialStore 
       { 
        ConsumerKey = ConfigurationManager.AppSettings["consumerKey"], 
        ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"] 
       } 
      }; 

      string twitterCallbackUrl = Request.Url.ToString().Replace("Begin", "Complete"); 
      return await auth.BeginAuthorizationAsync(new Uri(twitterCallbackUrl)); 
     } 

     public async Task<ActionResult> CompleteAsync() 
     { 
      var auth = new MvcAuthorizer 
      { 
       CredentialStore = new SessionStateCredentialStore() 
      }; 

      await auth.CompleteAuthorizeAsync(Request.Url); 

      // This is how you access credentials after authorization. 
      // The oauthToken and oauthTokenSecret do not expire. 
      // You can use the userID to associate the credentials with the user. 
      // You can save credentials any way you want - database, 
      // isolated storage, etc. - it's up to you. 
      // You can retrieve and load all 4 credentials on subsequent 
      // queries to avoid the need to re-authorize. 
      // When you've loaded all 4 credentials, LINQ to Twitter will let 
      // you make queries without re-authorizing. 
      // 
      //var credentials = auth.CredentialStore; 
      //string oauthToken = credentials.OAuthToken; 
      //string oauthTokenSecret = credentials.OAuthTokenSecret; 
      //string screenName = credentials.ScreenName; 
      //ulong userID = credentials.UserID; 
      // 

      return RedirectToAction("Index", "Home"); 
     } 
    } 
} 

ユーザーがアプリケーションを承認すると、TwitterはそれらをCompleteAsyncメソッドにリダイレクトします。 auth.CredentialStoreから値を抽出する方法に関するコメントに注目してください。それらをあなたのDBに保存して、あなたのサービスで検索して、ユーザーのために電話をかける。

これらの資格情報は変更されませんが、ユーザーは後でいつでもアプリケーションの認証を解除することができます。その場合、再度承認する必要があります。サンプルコード全体をLINQ to Twitter ASP.NET Samplesページで入手できます。

+1

ありがとう、ジョー。私はあなたの答えを正しい軌道に乗せて受け入れました! –

関連する問題