首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发使用Tweetinvi Auth类

并发使用Tweetinvi Auth类
EN

Stack Overflow用户
提问于 2016-10-06 15:19:19
回答 1查看 568关注 0票数 2

我们正在用ASP.NET (C# -Framework4.0)开发一个社交媒体监控应用程序,并使用Twitter的Tweetinvi库。

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

如何防止此问题?

EN

回答 1

Stack Overflow用户

发布于 2016-10-06 18:28:44

我是Tweetinvi的主要开发者。

请完整地阅读这篇文章,这样你就能更好地理解这个主题。

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

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

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

为了回答你的问题,你有不同的解决方案:

在同一主题中发送推文

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

代码语言:javascript
复制
// 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使用一组特定的凭据来运行任何操作。

代码语言:javascript
复制
// 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简化了您的生活。这个解决方案非常有用,因为它允许您创建一个AuthenticatedUser集合,并在需要时使用它。

代码语言:javascript
复制
// 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39889850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档