使用 Twitterizer 发布 Twitter 更新
-
25-09-2019 - |
题
我有这段代码:
var settings = WebConfigurationManager.AppSettings;
var consumerKey = settings["Twitter.ConsumerKey"];
var consumerSecret = settings["Twitter.ConsumerSecret"];
var authToken = settings["Twitter.OAuthToken"];
var authVerifier = settings["Twitter.OAuthVerifier"];
//var accessToken = GetAccessToken(
// consumerKey, consumerSecret, authToken, string.Empty);
var tokens = new OAuthTokens()
{
AccessToken = authToken,
AccessTokenSecret = authVerifier,
ConsumerKey = consumerKey,
ConsumerSecret = consumerSecret
};
TwitterStatus.Update(tokens, txtComment.Text);
我所需要的只是更新我的推特状态。不幸的是它不起作用。当我最初登录 Twitter 授予应用程序访问权限时,它只起作用一次。然后,我存储了 authToken 和 authVerifier,以便我可以在将来的更新中重用它们。
知道出了什么问题吗?
更新: 我刚刚将代码更改为:
TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, txtComment.Text);
if (tweetResponse.Result == RequestResult.Success)
lblMessage.Text = "Twitter status successfully posted.";
else
lblMessage.Text = string.Format("Twitter status update failed with Error: '{0}'",
tweetResponse.ErrorMessage);
我收到一条错误消息: “令牌无效/过期”.
解决方案
您正在存储了错误的值。在包含authToken和验证值需要为令牌使用OAuthUtility.GetAccessToken(......)的接入快速交换。令牌是从方法返回的访问是什么应该被存储并提供给Twitterizer。
-Ricky结果 所述Twitterizer作者
其他提示
我希望能够实现从C#/。NET一个简单的状态更新,但不想嵌入大库。
所以我写了一个小 OAuth.Manager类,做这东西。
它的描述如下:点击 的OAuth与验证在.NET
示例代码更新状态:
var oauth = new OAuth.Manager();
oauth["consumer_key"] = CONSUMER_KEY;
oauth["consumer_secret"] = CONSUMER_SECRET;
oauth["token"] = your_stored_access_token;
oauth["token_secret"] = your_stored_access_secret;
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
MessageBox.Show("There's been a problem trying to tweet:" +
Environment.NewLine +
response.StatusDescription +
Environment.NewLine +
Environment.NewLine +
"You will have to tweet manually." +
Environment.NewLine);
}
这是第一次通过,你需要得到令牌和秘密的访问。这在一个多步骤的过程完成后,开始与该代码:
var oauth = new OAuth.Manager();
oauth["consumer_key"] = MY_APP_SPECIFIC_KEY;
oauth["consumer_secret"] = MY_APP_SPECIFIC_SECRET;
oauth.AcquireRequestToken("https://api.twitter.com/oauth/request_token", "POST");
步骤2是告诉用户**到其中xxxx被替换为接收到的实际标记,在这种情况下,由访问https://api.twitter.com/oauth/authorize?oauth_token=XXXX
访问oauth["token"]
。第3步是从网页告诉用户抓取(CTRL-C)的PIN码,并贴到您的应用程序,在您使用的针来获得另一种类型的标记。
一个更好的方式是通过使用一个Windows窗体具有嵌入的web浏览器控件来自动卷筒纸UI序列。当您设置控制为适当的值的Url属性,它会显示该网页给你,你自己的应用程序的主窗口中。您还可以自动在您找回密码的一部分。这减少了上下文切换的用户,使事情更容易理解。
总之,用你的销,步骤4:
oauth.AcquireAccessToken("https://api.twitter.com/oauth/access_token",
"POST",
pin);
...这发出另一个HTTP REST请求,当它返回时,你将有一个令牌和accesss秘密,在oauth["token"]
和oauth["token_secret"]
可用。
这与web UI授权东西仅需要发生一次;你得到令牌的访问和秘密后的一次的,你可以存储它们,再利用它们。他们永不过期,微博。
说您可以再继续发送状态更新...
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
...
...如上。
我知道我迟到了,但我创建了一个端到端视频教程,准确展示了如何做到这一点:我在 dev.twitter.com 上创建一个应用程序,使用 nuget 安装 twitterizer,编写代码来处理 oauth,最后编写代码以使用从 twitter 收到的访问令牌来发布推文。
视频: http://www.youtube.com/watch?v=TGEA1sgMMqU
教程: http://www.markhagan.me/Samples/Grant-Access-And-Tweet-As-Twitter-User-ASPNet
代码(如果您不想离开此页面):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Twitterizer;
namespace PostFansTwitter
{
public partial class twconnect : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var oauth_consumer_key = "YOUR_CONSUMER_KEY_HERE";
var oauth_consumer_secret = "YOUR_CONSUMER_SECRET_KEY_HERE";
if (Request["oauth_token"] == null)
{
OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
oauth_consumer_key,
oauth_consumer_secret,
Request.Url.AbsoluteUri);
Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}",
reqToken.Token));
}
else
{
string requestToken = Request["oauth_token"].ToString();
string pin = Request["oauth_verifier"].ToString();
var tokens = OAuthUtility.GetAccessToken(
oauth_consumer_key,
oauth_consumer_secret,
requestToken,
pin);
OAuthTokens accesstoken = new OAuthTokens()
{
AccessToken = tokens.Token,
AccessTokenSecret = tokens.TokenSecret,
ConsumerKey = oauth_consumer_key,
ConsumerSecret = oauth_consumer_secret
};
TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
accesstoken,
"Testing!! It works (hopefully).");
if (response.Result == RequestResult.Success)
{
Response.Write("we did it!");
}
else
{
Response.Write("it's all bad.");
}
}
}
}
}