首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在twitter上发布twitter更新

在twitter上发布twitter更新
EN

Stack Overflow用户
提问于 2010-12-09 17:31:39
回答 3查看 6.5K关注 0票数 2

我有一段代码:

代码语言:javascript
复制
    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,以便在以后的更新中重用它们。

知道是怎么回事吗?

更新:--我刚刚将代码更改为:

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

我收到一条错误消息:“无效/过期令牌”

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-11 22:03:52

您正在存储错误的值。需要使用authToken (.)将authToken和验证器值快速交换为访问令牌。从该方法返回的访问令牌应该存储并提供给Twitterizer。

-Ricky

Twitterizer作者

票数 3
EN

Stack Overflow用户

发布于 2010-12-21 22:39:26

我希望能够从C#/.NET中进行简单的状态更新,但不想嵌入一个大型库。

所以我写了一个小的OAuth.Manager类来做这件事。

这里描述的是:

OAuth与.NET中的验证

更新状态的示例代码:

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

这是第一次,您需要获得一个访问令牌和秘密。这是在一个多步骤的过程中完成的,从以下代码开始:

代码语言:javascript
复制
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的部分自动化。这减少了您的用户的上下文切换,并使事情更容易理解。

不管怎么说,用你做的针,第四步:

代码语言:javascript
复制
oauth.AcquireAccessToken("https://api.twitter.com/oauth/access_token",
    "POST",
    pin); 

...which发送另一个HTTP请求,当它返回时,您将有一个访问令牌和秘密,可以在oauth["token"]oauth["token_secret"]中使用。

这种与web有关的授权只需要发生一次;在您获得访问令牌和秘密一次之后,您可以存储它们并重用它们。Twitter说,它们永远不会过期。

然后继续发送状态更新..。

代码语言:javascript
复制
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST"); 
...

...as以上。

票数 1
EN

Stack Overflow用户

发布于 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

代码(以防您不想离开此页面):

代码语言:javascript
复制
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.");
                }
            }
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4401260

复制
相关文章

相似问题

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