Tweetinvi Auth类的并发使用



我们正在ASP.NET(C#-Framework 4.0(中开发一个社交媒体监控应用程序,并将Tweetinvi库用于Twitter。

我们必须同时发送推文和搜索不同的推特用户。为了发布推文,我们必须首先在Auth类中设置访问令牌。但是,那里的所有函数都是静态的。如果我们设置任何用户的令牌,所有其他用户都会使用此帐户发布他的推文。

我该如何防止这个问题?

我是Tweetinvi的主要开发者。

请完整阅读这篇文章,以便你对这个主题有一个很好的理解。

Tweetinvi Auth类将凭据存储为每个线程的静态变量。

这意味着,对于应用程序存储其自己的凭据集的每个线程。在ASP.NET中,这意味着ThreadPool中的每个线程都将使用自己的一组凭据。

这也意味着,每次创建新线程时,最好使用Auth.SetUserCredentials 手动设置该线程的凭据

要回答您的问题,您有不同的解决方案:

在同一线程中发送推文

您只需要在每次想要切换用户时调用Auth.SetUserCredentials

// creds for user 1
Auth.SetUserCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var tweetPublishedByUser1 = Tweet.PublishTweet("user 1 tweet");
// creds for user 2
Auth.SetUserCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var tweetPublishedByUser2 = Tweet.PublishTweet("user 2 tweet");

创建凭据并使用它执行操作

您可以要求Tweetinvi使用Auth.ExecuteOperationWithCredentials使用一组特定的凭据运行任何操作。

// creds for user 1
var cred1 = Auth.CreateCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var tweetPublishedByUser1 = Auth.ExecuteOperationWithCredentials(cred1, () =>
{
    return Tweet.PublishTweet("user 1 tweet");
});
// creds for user 2
var cred2 = Auth.CreateCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var tweetPublishedByUser2 = Auth.ExecuteOperationWithCredentials(cred2, () =>
{
    return Tweet.PublishTweet("user 2 tweet");
});

已验证用户

AuthenticatedUser通过ExecuteAuthenticatedUserOperation方法简化您的生活。此解决方案非常有用,因为它允许您创建AuthenticatedUser的集合,并在需要时使用所需的集合。

// creds for user 1
Auth.SetUserCredentials("CONSUMER_KEY_1", "CONSUMER_SECRET_1", "ACCESS_TOKEN_1", "ACCESS_TOKEN_SECRET_1");
var authenticatedUser1 = User.GetAuthenticatedUser();
// creds for user 2
Auth.SetUserCredentials("CONSUMER_KEY_2", "CONSUMER_SECRET_2", "ACCESS_TOKEN_2", "ACCESS_TOKEN_SECRET_2");
var authenticatedUser2 = User.GetAuthenticatedUser();

var tweetPublishedByUser1 = authenticatedUser1.ExecuteAuthenticatedUserOperation(() =>
{
    return Tweet.PublishTweet("user 1 tweet");
});
var tweetPublishedByUser2 = authenticatedUser2.ExecuteAuthenticatedUserOperation(() =>
{
    return Tweet.PublishTweet("user 2 tweet");
});

参考文献

您可以在这里找到如何在Tweetinvin中使用凭据的文档:https://github.com/linvi/tweetinvi/wiki/Credentials

相关内容

  • 没有找到相关文章

最新更新