为什么Twitter令牌过期了?

时间:2018-06-14 16:40:49

标签: twitter twitter-oauth linq-to-twitter sttwitterapi

我有一个使用LinqtoTwitter的Twitter机器人,它运行得很好但是当我在其他用户推文上几乎20个回复(评论)后启动它时,令牌过期而没有任何警告。我将间隔时间从每5分钟更改为每10分钟,令牌仍然消失,我需要生成新的令牌!!

此应用根据用户的推文向用户发送产品链接并运行后台线程,因此一旦运行,即使关闭网页,它也会在后台运行 我该如何解决这个问题?!现在该应用程序被暂停:(不是用户tho! 这是授权码:

    private static string consumer_Key = ConfigurationManager.AppSettings["consumerkey"];
    private static string consumer_Key_Secret = ConfigurationManager.AppSettings["consumersecret"];
    private static string access_Token = ConfigurationManager.AppSettings["accessToken"];
    private static string access_Token_Secret = ConfigurationManager.AppSettings["accessTokenSecret"];

    static SingleUserAuthorizer auth = new SingleUserAuthorizer
    {
        CredentialStore = new SingleUserInMemoryCredentialStore
        {
            ConsumerKey = consumer_Key,
            ConsumerSecret = consumer_Key_Secret,
            AccessToken = access_Token,
            AccessTokenSecret = access_Token_Secret,
        }
    };

1 个答案:

答案 0 :(得分:0)

Web应用程序的一个常见问题是Web服务器(IIS)偶尔会回收,并且内存中保存的任何凭据都将丢失。您可以做的一件事是使用SessionStateCredentialStore,如下所示:

static SingleUserAuthorizer auth = new SingleUserAuthorizer
{
    CredentialStore = new SessionStateCredentialStore
    {
        ConsumerKey = consumer_Key,
        ConsumerSecret = consumer_Key_Secret,
        OAuthToken = access_Token,
        OAuthTokenSecret = access_Token_Secret,
    }
};

要解决回收问题,请确保您的会话状态设置为StateServiceSqlServer,而不是InProc

另一种选择是在执行操作之前验证您是否仍加载了凭据。 CredentialStore有一个HasAllCredentials方法可以像这样使用。

if (!auth.CredentialStore.HasAllCredentials())
{
    auth = new SingleUserAuthorizer
    {
        CredentialStore = new SingleUserInMemoryCredentialStore
        {
            ConsumerKey = consumer_Key,
            ConsumerSecret = consumer_Key_Secret,
            AccessToken = access_Token,
            AccessTokenSecret = access_Token_Secret,
        }
    };
}

如果您遇到容量问题,而Twitter正在向您发送速率限制错误,请考虑ApplicationOnlyAuthorizer,这会为您提供更大的速率限制。如果您使用ApplicationOnlyAuthorizer,我对上述凭据的评论仍适用。

您可以使用try/catch块来检测超出速率限制的时间,或使用TwitterContext.RateLimitXxx属性监控每个查询以避免超出限制。

如果Twitter撤销您的凭据,您需要与他们解决此问题。这是Twitter API与您的应用程序之间的问题,而不是LINQ to Twitter。