我有一段代码:
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状态。不幸的是,它不起作用。当我最初登录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);我收到一条错误消息:“无效/过期令牌”。
发布于 2010-12-11 22:03:52
您正在存储错误的值。需要使用authToken (.)将authToken和验证器值快速交换为访问令牌。从该方法返回的访问令牌应该存储并提供给Twitterizer。
-Ricky
Twitterizer作者
发布于 2010-12-21 22:39:26
我希望能够从C#/.NET中进行简单的状态更新,但不想嵌入一个大型库。
所以我写了一个小的OAuth.Manager类来做这件事。
这里描述的是:
更新状态的示例代码:
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步是告诉用户**访问https://api.twitter.com/oauth/authorize?oauth_token=XXXX,其中xxxx被替换为实际接收的令牌,在本例中,xxxx由oauth["token"]访问。第三步是告诉用户从网页抓取(Ctrl) PIN并将其粘贴到应用程序中,在应用程序中使用pin来获取另一种类型的令牌。
一个更好的方法是通过使用带有嵌入式WebBrowser控件的Windows来实现web UI序列的自动化。当您将该控件的Url属性设置为适当的值时,它将在您自己的应用程序的主窗体中为您显示该网页。您还可以将检索PIN的部分自动化。这减少了您的用户的上下文切换,并使事情更容易理解。
不管怎么说,用你做的针,第四步:
oauth.AcquireAccessToken("https://api.twitter.com/oauth/access_token",
"POST",
pin); ...which发送另一个HTTP请求,当它返回时,您将有一个访问令牌和秘密,可以在oauth["token"]和oauth["token_secret"]中使用。
这种与web有关的授权只需要发生一次;在您获得访问令牌和秘密一次之后,您可以存储它们并重用它们。Twitter说,它们永远不会过期。
然后继续发送状态更新..。
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
......as以上。
发布于 2012-12-06 15:09:01
我知道我已经迟到了,但我创建了一个端到端的视频教程,展示了如何做到这一点:我在dev.twitter.com上创建了一个应用程序,使用nuget安装了twitter程序,编写了处理oauth的代码,最后编写了代码来使用从twitter接收的访问令牌来生成一条tweet。
视频: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.");
}
}
}
}
}https://stackoverflow.com/questions/4401260
复制相似问题