Опубликовать обновление Twitter с помощью Twitterizer - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть этот кусок кода:

    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);

Все, что мне нужно, это обновить статус в Твиттере. К сожалению, это не работает. Это работало только один раз, когда я впервые зашел в твиттер, чтобы предоставить доступ к приложению. Затем я сохранил 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);

и я получаю сообщение об ошибке: «Неверный / просроченный токен» .

Ответы [ 3 ]

3 голосов
/ 12 декабря 2010

Вы храните неправильные значения. Необходимо автоматически обменять значения authToken и верификатора на токен доступа с помощью OAuthUtility.GetAccessToken (...). Токен доступа, возвращаемый этим методом, должен храниться и передаваться в Twitterizer.

-Ricky
Автор Twitterizer

1 голос
/ 06 декабря 2012

Я знаю, что опаздываю к игре, но я создал подробное видеоурок, показывающий, как именно это сделать: я создаю приложение на dev.twitter.com, устанавливаю twitterizer с помощью nuget, пишу код для обработайте oauth и, наконец, напишите код, чтобы использовать токены доступа, полученные из твиттера, для создания твита.

Видео: 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.");
                }
            }
        }
    }
}
1 голос
/ 22 декабря 2010

Я хотел иметь возможность сделать простое обновление статуса из 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 - сообщить пользователю ** о посещении https://api.twitter.com/oauth/authorize?oauth_token=XXXX, где xxxx заменяется фактическим полученным токеном, доступным в этом случае oauth["token"]. Шаг 3 - сказать пользователю, чтобы он взял (ctrl-c) PIN-код с веб-страницы и вставил его в свое приложение, где вы используете пин-код для получения токена другого типа.

Лучший способ - автоматизировать эту последовательность веб-интерфейса с помощью формы Windows со встроенным элементом управления WebBrowser. Когда вы установите для свойства Url этого элемента управления соответствующее значение, эта веб-страница будет отображаться для вас в основной форме вашего собственного приложения. Вы также можете автоматизировать часть, где вы получаете PIN-код. Это уменьшает переключение контекста для вашего пользователя и делает вещи проще для понимания.

В любом случае, с помощью булавки, которую вы делаете, шаг 4:

oauth.AcquireAccessToken("https://api.twitter.com/oauth/access_token",
    "POST",
    pin); 

... который отправляет еще один HTTP-запрос REST, а когда он возвращается, у вас будет токен доступа и секрет, доступные в oauth["token"] и oauth["token_secret"].

Эта авторизация с веб-интерфейсом должна происходить только один раз; после того, как вы получите токен доступа и секретный ключ один раз , вы можете сохранить их и использовать повторно. Они никогда не истекают, говорит Твиттер.

Затем можно приступить к отправке обновления статуса ...

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

... как указано выше.

...