我正在考虑使用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的方法的示例。当用户访问您的页面时,您可以使用一个按钮将它们重新引向下面的OAuthController
到BeginAsync
操作。
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样本页面。