无法使用以下代码向Twitter发送更新。没错

时间:2011-04-23 07:09:29

标签: c# twitter

我尝试了以下代码:

 static void PostTweetanother(string username, string password, string tweet)
    {
        try
        {
            // encode the username/password
            string user = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(username + ":" + password));
            // determine what we want to upload as a status
            byte[] bytes = System.Text.Encoding.ASCII.GetBytes("status=" + tweet);
            // connect with the update page
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://twitter.com/statuses/update.xml");
            // set the method to POST
            request.Method = "POST";
            request.ServicePoint.Expect100Continue = false; // thanks to argodev for this recent change!
            // set the authorisation levels
            request.Headers.Add("Authorization", "Basic " + user);
            request.ContentType = "application/x-www-form-urlencoded";
            // set the length of the content
            request.ContentLength = bytes.Length;

            // set up the stream
            Stream reqStream = request.GetRequestStream();
            // write to the stream
            reqStream.Write(bytes, 0, bytes.Length);
            // close the stream
            reqStream.Close();
        }
        catch (Exception ex) { throw ex; }
    }

我也试过这段代码:

 static void PostTweet(string username, string password, string tweet)
    {
        // Create a webclient with the twitter account credentials, which will be used to set the HTTP header for basic authentication
        WebClient client = new WebClient { Credentials = new NetworkCredential { UserName = username, Password = password } };

        // Don't wait to receive a 100 Continue HTTP response from the server before sending out the message body
        ServicePointManager.Expect100Continue = false;

        // Construct the message body
        byte[] messageBody = Encoding.ASCII.GetBytes("status=" + tweet);

        // Send the HTTP headers and message body (a.k.a. Post the data)
        client.UploadData("http://twitter.com/statuses/update.xml", messageBody);
    }

2 个答案:

答案 0 :(得分:2)

这里有一些问题。首先,Twitter REST API不再支持基本身份验证;你现在必须使用OAuth。其次,您引用了错误的端点;你应该像http://api.twitter.com/1/statuses/update.xml一样调用statuses/update(虽然我总是建议在与Twitter API交互时使用JSON而不是XML。)

由于您必须通过身份验证才能发布到Twitter,并且由于您必须使用OAuth,因此我建议最后使用像Twitterizer这样的Twitter库来与Twitter API进行交互。

如今,Twitter访问几乎是一种商品,并且有许多好的库(您无需维护。)您要做的是:发布状态更新,提炼到以下简化代码(示例使用Twitterizer):

//reference Twitterizer2.dll

var tokens = new Twitterizer.OAuthTokens {
    AccessToken = @"myAccessToken",
    AccessTokenSecret = @"myAccessTokenSecret",
    ConsumerKey = @"myConsumerKey",
    ConsumerSecret = @"myConsumerSecret"
};

// Post the update to twitter
var statusResponse = Twitterizer.TwitterStatus.Update(tokens, 
    "I am your status update!");
if (statusResponse.Result != Twitterizer.RequestResult.Success)
    return;

// Fetch the authenticated user's timeline, uses statuses/user_timeline
// under the hood
var timelineResponse = Twitterizer.TwitterTimeline.UserTimeline(tokens);
if (timelineResponse.Result != Twitterizer.RequestResult.Success)
    return;

foreach (var status in timelineResponse.ResponseObject)
{
    Console.WriteLine(status.Text);
}

要获取OAuth凭据,您需要在https://dev.twitter.com/apps/new的帐户下注册您的应用程序。完成后,您可以在新创建的应用程序的主页面上找到您的消费者密钥和密码,您的访问令牌和密码将位于我的访问令牌菜单项下链接的页面上页面的权利。

如果您只有一个用户,使用这一组凭据将正常工作,代码示例所示的内容称为single access token pattern。但是,如果您希望其他人在自己的身份下使用您的应用程序,那么您需要执行所谓的“OAuth舞蹈”,以获取每个用户的访问权限。

http://dev.twitter.com/auth提供了有关完整OAuth流程的更多信息,并专门介绍了令牌交换here

答案 1 :(得分:0)

最近,我在网上看到Twitter已经为第三方客户关闭了他们的Rest API,因此可能因为这个事实你无法发布更新。这是我的意见,所以我认为做你想做的事是不可能的。

见到你!