2017-09-12 11 views
1

트위터에서 일부 서비스 상태 업데이트를 게시하려고합니다. Tweetinvi는 그런 일을하기에 좋은 라이브러리처럼 보입니다.하지만이 문제를 조사하기 시작했습니다. 그것을 사용하는 것은 돌로 설정되지 않습니다.Tweetinvi 또는 이와 유사한 방법을 사용하여 C# Windows 서비스에서 트윗을 게시

그러나 내 연구가 아직 내놓지 않은 한 가지 점은 본질적으로 헤드리스 서비스 인 트위터 인증을 처리하는 분명한 방법입니다. Twitter로 앱을 만들었으므로 소비자 키와 비밀이 있습니다. 사용자 정보를 요청하고 팔로어를 얻는 등의 "앱 전용"인증을 할 수는 있지만 물론 트윗을 게시 할 권한이 없습니다.

그래서 내 트위터는 적절한 트위터 계정을 만들고, 어떻게 든 그 계정을 향해 서비스를 인증 한 다음 정의 된 간격으로 일반 서비스의 상태 업데이트를 게시합니다. 그것은 아주 간단한 생각입니다. 물론

, 나는 여기에 언급 된 PIN 기반 인증 같은 것을 수행 할 수 있습니다

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

나는 수동으로 실행 PIN 코드를 취득하고, 워크 플로우를 진행할 수 있습니다. 그러나 정기적 인 재 인증이 필요합니까, 아니면 기본적으로 "영원히"유효할까요? 가능한 한 자동으로 만들 수있는 방법을 찾고 있는데, 매 x 시간마다 인증을 다시해야하는 것은이 꿈에 막대한 손실을 안겨줍니다.

물론 상태를 게시하는 데 사용 된 트위터 계정의 비밀번호가 있지만 수동 사용자 개입 없이는 잘 구식 로그인을 할 수있는 방법이 없습니다. 어떤 옵션이 있습니까?

답변

1

피드백 보내기 현재 상태 현재 상태 이것은 의도적으로 설계된 동작입니다. Twitter는 사용자가 애플리케이션을 인증 할 수 있도록하는 프로토콜 인 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"); 
     } 
    } 
} 

는, 트위터는 다시 CompleteAsync 방법을 리디렉션합니다. auth.CredentialStore에서 값을 추출하는 방법에 대한 의견을 확인하십시오. DB에 저장 한 다음 서비스에서 검색하여 사용자를 대신하여 전화를 겁니다.

이러한 자격 증명은 변경되지 않지만 나중에 사용자가 해당 응용 프로그램의 권한을 취소 할 수 있습니다. 그러면 나중에 해당 응용 프로그램을 다시 인증 받아야합니다. 전체 샘플 코드를 LINQ to ASP.NET Samples 페이지로 가져올 수 있습니다.

+1

감사합니다. Joe. 나는 그것이 옳은 길에 나를 놓았던 것에 따라 당신의 대답을 받아 들였다! –