使用Tweetinvi或类似的推文从C#Windows服务发布推文



我正在考虑使用Tweetinvi在Twitter上发布一些服务状态,这似乎是一个很好的库,但是我只是开始研究此服务不是用石头设定的。

但是,我的研究尚未产生的一件事,是处理Twitter身份验证的一种明显方法。我已经创建了一个带有Twitter的应用程序,因此我有我的消费者密钥和秘密,并且可以执行"仅应用程序"验证来请求用户信息,获取他们的关注者等,但是我当然无权发布推文。<<<<<<<<<<<<<<<</p>

所以我的野心是(一旦这是一个不超过beta)创建一个适当的Twitter帐户,以某种方式对该帐户进行服务,然后按定义的间隔从一般服务中发布状态更新。这是一个相当简单的想法。

当然,我可以做类似此处提到的基于PIN的身份验证的事情:

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

我可以手动运行该操作,获取PIN代码并继续进行工作流程。但是,这是否需要定期重新验证,还是基本上是有效的"永远"?我正在寻找一种使其尽可能自动的方法,并且必须每X小时重做验证是一个巨大的凹痕,即使不是展示器。

当然,我将拥有用于发布状态的Twitter帐户的密码,但是我看不到没有手动用户干预的好老式登录的方法 - 我有哪些选项?

此行为是设计的。Twitter使用OAuth,这是一个协议,目的是允许用户授权应用程序。这对用户有好处,因为否则,您或其他任何人都可以代表他们执行动作而不知道。

考虑到这一点,唯一的方法是让用户明确授权您的应用程序。这是我使用ASP.NET MVC编写的Linq到Twitter的方法的示例。当用户访问您的页面时,您可以使用一个按钮将它们重新引向下面的OAuthControllerBeginAsync操作。

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提取值的评论。将这些保存在您的数据库中,然后在您的服务中检索它们,以代表用户拨打电话。

这些凭据不会改变,但是用户可能会在将来的某个时候代授权您的应用程序 - 在此期间,您需要让他们再次授权。您可以在LINQ上获取整个示例代码到Twitter ASP.NET样本页面。

相关内容

  • 没有找到相关文章

最新更新