Question

J'ai ce morceau de code:

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

Tout ce que je dois à jour est à mon statut Twitter. Malheureusement, il ne fonctionne pas. Il ne fonctionnait une fois quand je me suis connecté initialement à Twitter pour accorder l'accès aux applications. Je me suis alors mis en mémoire les authToken et authVerifier afin que je puisse les réutiliser pour les mises à jour futures.

Toute idée de ce qui ne va pas?

Mise à jour: Je viens de modifier le code:

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

et je reçois un message d'erreur: "non valide / expiré jeton"

.
Était-ce utile?

La solution

Vous stockez les mauvaises valeurs. Les valeurs authToken et Verifier doivent être rapidement échangés contre un jeton d'accès en utilisant OAuthUtility.GetAccessToken (...). Le jeton d'accès qui est renvoyée par cette méthode est ce qui doit être stocké et fourni à Twitterizer.

-Ricky
L'auteur Twitterizer

Autres conseils

Je voulais être en mesure de faire une simple mise à jour de l'état de C # /. NET, mais ne voulait pas intégrer une grande bibliothèque.

J'ai donc écrit un petit OAuth.Manager qui fait ce genre de choses.

Il est décrit ici:
OAuth avec vérification dans .NET

Exemple de code pour mettre à jour le statut:

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

Pour la première fois à travers, vous avez besoin d'obtenir un jeton d'accès et secret. Cela se fait dans un processus en plusieurs étapes, en commençant par ce code:

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

Étape 2 est de dire à l'utilisateur ** pour visiter https://api.twitter.com/oauth/authorize?oauth_token=XXXX où xxxx est remplacé par le jeton réel reçu, accessible dans ce cas par oauth["token"]. L'étape 3 est de dire à l'utilisateur de saisir (ctrl-c) le code PIN de la page Web et le coller dans votre application, où vous utilisez la broche pour obtenir un autre type de jeton.

  

Une meilleure façon est d'automatiser cette séquence de l'interface utilisateur Web en utilisant un formulaire Windows avec un contrôle WebBrowser embarqué. Lorsque vous définissez la propriété Url de ce contrôle à la valeur appropriée, il affichera cette page Web pour vous, dans la forme principale de votre propre application. Vous pouvez également automatiser la partie où vous récupérez le code PIN. Cela réduit les changements de contexte pour l'utilisateur et rend les choses plus simples à comprendre.

Quoi qu'il en soit, avec la broche que vous faites, étape 4:

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

... qui envoie une autre requête HTTP REST, et quand il retourne, vous aurez un jeton et secret accesss, disponible en oauth["token"] et oauth["token_secret"].

Ce truc d'autorisation avec le web interface utilisateur doit se produire qu'une seule fois; Une fois que vous obtenez le jeton secret et l'accès une fois , vous pouvez les stocker et de les réutiliser. Ils ne viennent à échéance, dit Twitter.

Vous pouvez ensuite procéder à l'envoi de la mise à jour de l'état ...

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

... comme ci-dessus.

Je sais que je suis en retard au jeu, mais je créé un tutoriel vidéo de bout en bout montrant exactement comment faire: créer une application sur dev.twitter.com, installez twitterizer en utilisant NuGet, écrire le code gérer la OAuth et enfin écrire le code pour utiliser les jetons d'accès reçus de twitter pour faire un tweet.

Vidéo: http://www.youtube.com/watch?v=TGEA1sgMMqU

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

code (dans le cas où vous ne wan quitter cette page):

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.");
                }
            }
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top