【问题标题】:Sending a tweet from a C# Application (unattended)从 C# 应用程序发送推文(无人值守)
【发布时间】:2014-05-17 07:47:02
【问题描述】:

如何从无人参与的 C# 应用程序发送推文?到目前为止,我已经尝试过 TweetSharp,但这对我不起作用(没有错误,但也没有成功)。这是背景信息... 我已经设置了两个 Twitter 帐户来测试这一点(我们称它们为 TwitterSender 和 TwitterReceiver)。 TwitterReceiver 正在“关注” TwitterSender。我去了 dev.twitter.com 并以 TwitterSender 身份登录并单击“创建新应用程序”按钮。从这里,我能够找到名为“API Key”、“API Secret”、“Consumer Key”、“Consumer Secret”、“Access Token”和“Access Token Secret”的东西。当我以 TwitterSender 身份登录时,我可以看到我已授予读/写/直接消息访问权限。我如何将所有这些联系在一起,以便我可以简单地运行 C# 控制台应用程序并让它从 TwitterSender 发送一条推文(“Hello World!”),以便任何关注者(例如 TwitterReceiver)都能收到它?我可以用纯文本硬编码用户/密码。在下面的代码中,我根本没有收到任何错误,但最终 TwitterStatus 最终为空,并且没有迹象表明从 TwitterSender 或 TwitterReceiver 的角度发送了一条推文。

TwitterClientInfo twitterClientInfo = new TwitterClientInfo();
twitterClientInfo.ConsumerKey = ConsumerKey; //Read ConsumerKey out of the app.config
twitterClientInfo.ConsumerSecret = ConsumerSecret; //Read the ConsumerSecret out the app.config
TwitterService twitterService = new TwitterService(twitterClientInfo);
twitterService.AuthenticateWith(AccessToken, AccessTokenSecret);
Console.WriteLine("Enter a Tweet");
string tweetMessage;
tweetMessage = Console.ReadLine();
TwitterStatus twitterStatus = twitterService.SendTweet(tweetMessage);

【问题讨论】:

  • 根据你的文字墙,我很难理解你的代码是如何行为不端的......
  • 如果不首先显示浏览器窗口供用户进行身份验证,您可能无法从控制台应用程序完成此操作。一旦您拥有访问令牌(如果 Twitter 提供选项,则刷新令牌)您将能够在没有浏览器的情况下管理访问。如果你有令牌,TweetSharp 就可以正常工作 - 代码中是否有特定部分不适合你?
  • 是的,您应该认真阅读 OAuth 2.0 协议以了解这些东西的工作原理。
  • 谢谢鹅 - 我添加了我正在尝试的代码的重要部分......没有错误,但不幸的是也没有推文。最后一行代码的 twitterStatus 为空。我真的必须让人类用户以某种方式与代码交互是否正确?我会认为这就是“秘密”的全部意义,不是吗?
  • 一些平台提供了一种无浏览器访问的方法,但我相当肯定 Twitter 不是其中之一。 OAuth 的重点是用户使用 Twitter 进行身份验证,Twitter 为您的第三方应用程序提供有限时间的访问令牌来检索/发送数据。这样,用户就可以访问您的第三方应用,而无需与您分享他或她的凭据。

标签: c# twitter twitter-oauth tweetsharp


【解决方案1】:

我终于搞定了!简而言之,要从 Windows 窗体发送推文而不要求用户登录,您需要执行以下操作:

  1. 转到 dev.twitter.com,以您要从中发送推文的帐户登录,然后创建一个“应用程序”。从这个意义上说,推特“应用程序”实际上只是一种授权机制,根本不是用户与之交互的东西。
  2. 在创建应用程序的过程中会要求您提供一个网站...在观看了有关如何完成此操作的土耳其视频教程后,我输入了http://www.google.com/tr,但很可能是乌兹别克斯坦(我相信是“uz”)会同样好用)。不,我不知道你为什么需要这个。
  3. 将“回调 URL”留空并取消选中“允许此应用程序使用 Twitter 登录”。
  4. 将应用程序的权限设置为读/写
  5. 生成您的 OAuth 密钥 - 应该有四个密钥:“API 密钥”(AKA Consumer Key)、“API Secret”(AKA ConsumerSecret)、“Token Key”和“Token Secret”。
  6. 现在,访问 twitter.com 并登录您的帐户(不同于 dev.twitter.com)。在“设置”下(我认为隐藏在齿轮图标下),应该有一个“应用程序”选项卡,您应该可以在其中看到刚刚创建的应用程序。您可能需要从此处授予它权限(或者它可能已经设置)。您也可以在此处撤销权限。
  7. 使用 Visual Studio 2012 和 .NET framework 4.5(不是 VS2010),从 NuGet 获取 TweetSharp。该项目不再由原始开发人员维护或支持,因此如果出现问题,请不要期望太多文档或指导。
  8. 编写您的代码。例如,在按钮单击事件中...

    var service = new TweetSharp.TwitterService("ConsumerKey","ConsumerSecret","TokenKey","TokenSecretKey"); //Replace keys with values from step #5
    var twitterStatus = service.SendTweet(new SendTweetOptions() { Status ="Hello World" });
    if (twitterStatus != null)
    {
    MessageBox.Show("It worked");
    }
    

注意 - 您不能在每个 ___ (一些未记录的时间量)多次发送完全相同的推文。当出现身份验证问题时,twitterStatus 将返回 null - 如果发生这种情况,请检查您的密钥,也许重新授权并重新生成它们。

【讨论】:

    猜你喜欢
    • 2011-09-27
    • 2011-12-22
    • 2011-06-05
    • 1970-01-01
    • 2012-10-24
    • 2019-09-11
    • 2015-05-09
    相关资源
    最近更新 更多