Pregunta

Tengo este pedazo de código:

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

Todo lo que necesito es a actualizar mi estado twitter. Por desgracia, no está funcionando. Sólo funcionaba una vez, cuando inicialmente conectado a Twitter para conceder el acceso a las aplicaciones. entonces almacenada la authToken y authVerifier para que pueda volver a utilizarlos para futuras actualizaciones.

¿Alguna idea de lo que está mal?

ACTUALIZACIÓN: Acabo de cambiar el código para:

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

y me da un mensaje de error:. "no es válido / expiró token"

¿Fue útil?

Solución

Se está almacenando los valores incorrectos. Los valores authToken y verificador necesitan ser rápidamente cambiada por un token de acceso usando OAuthUtility.GetAccessToken (...). El token de acceso que se devuelve desde que el método es lo que debe ser almacenada y suministrada a Twitterizer.

-Ricky
El Twitterizer autor

Otros consejos

Yo quería ser capaz de hacer una actualización de estado sencilla desde C # /. NET, pero no quería incrustar una gran biblioteca.

Así que escribió un pequeño clase OAuth.Manager que hace estas cosas.

Es descrito aquí:
OAuth con verificación en .NET

Código de ejemplo para el estado de actualización:

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

Por primera vez a través, que necesita para obtener un token de acceso y secreto. Esto se hace en un proceso de varias etapas, comenzando con este código:

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

Paso 2 es para indicar al usuario la visita ** https://api.twitter.com/oauth/authorize?oauth_token=XXXX donde xxxx se sustituye con el token real recibida, accesible en este caso por oauth["token"]. El paso 3 es para indicar al usuario a agarrar (Ctrl-C) el PIN de la página web y pegarlo en su aplicación, en el que utiliza el pasador para conseguir otro tipo de ficha.

  

Una mejor manera es automatizar esa secuencia interfaz web mediante el uso de un formulario Windows Forms con un control WebBrowser incrustado. Cuando se establece la propiedad url de ese control en el valor adecuado, se mostrará esa página web para que, dentro del formulario principal de la propia aplicación. También puede automatizar la parte donde se recupera el PIN. Esto reduce los cambios de contexto para el usuario y hace las cosas más simples de entender.

De todos modos, con el pasador que haces, paso 4:

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

... que envía otra solicitud HTTP REST, y cuando vuelve usted tendrá un accesss token y secreta, disponible en oauth["token"] y oauth["token_secret"].

Esta materia de autorización con la interfaz de usuario web tiene que ocurrir sólo una vez; después de obtener el token de acceso y secreto una vez , que puede almacenar y volver a utilizarlos. Ellos nunca caducan, dice Twitter.

A continuación, se procederá a enviar la actualización de estado ...

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

... que el anterior.

Yo sé que estoy tarde para el juego, pero he creado un tutorial de vídeo de extremo a extremo que muestra exactamente cómo hacer esto: puedo crear una aplicación en dev.twitter.com, instalo twitterizer usando Nuget, escribir el código para manejar la oauth y finalmente escribir el código para utilizar el acceso fichas recibidas de Twitter para hacer un tweet.

Video: http://www.youtube.com/watch?v=TGEA1sgMMqU

Tutorial: http: // www. markhagan.me/Samples/Grant-Access-And-Tweet-As-Twitter-User-ASPNet

Código (en caso de que no wan a salir de esta página):

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.");
                }
            }
        }
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top