使用静态秘密验证 Twitter 机器人?

Authenticate twitter bot with static secrets?

我的计划:

我正在写一个机器人,它会不时地使用库 tweetinvi (https://github.com/linvi/tweetinvi) 发送一些推文。

该机器人当前正在使用我在开发者控制台中生成的访问令牌和密码。

问题:

机器人现在将使用我的个人帐户发送推文。这就是为什么我创建了一个新的辅助帐户,将来应该用于推文。

但我现在如何验证机器人?

  1. 新帐户不是开发者帐户,我在帐户设置中没有看到任何生成访问令牌和密码的选项。

  2. 此外,我不认为通常的 oauth“点击 twitter 图标并登录到 twitter”登录是我的机器人的正确选择,因为我没有网站或浏览器会话,只是一个随处运行的程序。

我不能为我的辅助帐户创建某种静态类型的访问令牌和密码吗?

如果那不可能,你会建议我做什么?

是的,您可以为您的辅助帐户创建访问令牌和密码。执行此操作的标准方法是在应用程序中使用 Twitter 实现 sign-in,这需要 Web 后端。

有几个备选方案:

  1. 您可以使用 twurl,这是一个 Twitter-provided 命令行工具。您需要安装 Ruby,然后安装 twurl。使用 twurl 你可以 运行

twurl authorize --consumer-key [your API token] --consumer-secret [your API secret]

这将提供一个 URL 您应该在浏览器中打开。将此验证到您的辅助帐户,然后将 PIN 码输入您的终端。帐户令牌和密码将放置在您主目录中名为 .twurlrc 的隐藏文件中,您可以像当前使用主帐户令牌一样将它们用于您的机器人。

  1. 您可以使用 another utility called tw-oob-oauth-cli 来做同样的事情。这更容易一些,因为您不需要安装 Ruby,只需下载 Windows 二进制文件即可。您需要使用 .exe 扩展名重命名二进制文件。

tw-oob-oauth.exe --key [your API token] --secret [your API secret]

这将在您完成网络流程后在终端上输出帐户令牌和密码。

要通过 Tweetinvi 进行身份验证,您可以按照此处的指南进行操作:https://linvi.github.io/tweetinvi/dist/authentication/authentication.html

var appClient = new TwitterClient("CONSUMER_KEY", "CONSUMER_SECRET");

// Start the authentication process
var authenticationRequest = await appClient.Auth.RequestAuthenticationUrlAsync();

// Go to the URL so that Twitter authenticates the user and gives him a PIN code.
Process.Start(new ProcessStartInfo(authenticationRequest.AuthorizationURL)
{
    UseShellExecute = true
});

// Ask the user to enter the pin code given by Twitter
Console.WriteLine("Please enter the code and press enter.");
var pinCode = Console.ReadLine();

// With this pin code it is now possible to get the credentials back from Twitter
var userCredentials = await appClient.Auth.RequestCredentialsFromVerifierCodeAsync(pinCode, authenticationRequest);

// You can now save those credentials or use them as followed
var userClient = new TwitterClient(userCredentials);
var user = await userClient.Users.GetAuthenticatedUserAsync();

Console.WriteLine("Congratulation you have authenticated the user: " + user);