Frage

Ich habe dieses Stück 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);

Alles was ich brauchte es, um meinen Twitter-Status zu aktualisieren. Leider funktioniert es nicht. Es funktioniert nur einmal, als ich ursprünglich angemeldet, die Anwendung Zugriff gewähren zu setzen. Ich habe dann die authToken und authVerifier gespeichert, damit ich sie für zukünftige Updates wiederverwenden können.

Jede Idee, was falsch ist?

UPDATE: Ich habe gerade den 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);

und ich erhalte eine Fehlermeldung:. "Invalid / abgelaufen Token"

War es hilfreich?

Lösung

Sie speichern die falschen Werte. Die authToken und Verifizierer Werte müssen schnell für einen Zugriff ausgetauscht werden Token OAuthUtility.GetAccessToken (...). Das Zugriffstoken, dass von diesem Verfahren zurückgegeben wird, ist das, was gespeichert und zu Twitterizer zugeführt werden sollte.

-Ricky
Der Twitterizer Autor

Andere Tipps

Ich wollte einen einfachen Status-Update von C # /. NET machen zu können, wollte aber keine große Bibliothek einzubetten.

So schrieb ich eine kleine OAuth.Manager Klasse das tut dieses Zeug.

Es ist hier beschrieben:
OAuth mit Verification in .NET

Beispielcode zum Update-Status:

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

Zum ersten Mal durch, müssen Sie einen Zugriffstoken und Geheimnis zu bekommen. Dies wird in einem mehrstufigen Verfahren durchgeführt, mit diesem Code beginnen:

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

Schritt 2 ist der Benutzer ** zu Besuch https://api.twitter.com/oauth/authorize?oauth_token=XXXX zu sagen, wo xxxx mit dem tatsächlichen Token empfängt, zugänglich in diesem Fall durch oauth["token"] ersetzt wird. Schritt 3 ist, der Benutzer zu greifen (ctrl-c) die PIN von der Webseite zu erzählen und sie in Ihre App einfügen, wo Sie den Stift verwenden, eine andere Art von Token zu erhalten.

  

Eine bessere Möglichkeit ist, dass Web-UI-Sequenz zu automatisieren, indem Sie ein Windows Form mit einer eingebetteten Web-Browser-Steuerung. Wenn Sie die URL-Eigenschaft des Steuerelements auf den entsprechenden Wert gesetzt ist, wird es diese Webseite für Sie zeigen, innerhalb der Hauptform der eigenen App. Sie können auch den Teil automatisieren, wo Sie die PIN abrufen. Dies reduziert Kontextschalter für Ihre Benutzer und macht die Dinge einfacher zu verstehen.

Wie auch immer, mit dem Stift Sie tun, Schritt 4:

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

... das sendet eine weitere HTTP REST Anfrage aus, und wenn er zurückkehrt werden Sie ein accesss Token und Geheimnis, in oauth["token"] und oauth["token_secret"].

Diese Ermächtigung Sachen mit dem Web-UI muss nur einmal geschehen; nachdem Sie die Zugriffstoken und Geheimnis bekommen einmal , können Sie sie speichern und wiederverwenden sie. Sie verfallen nie, sagt Twitter.

Sie können dann fortfahren, um das Senden des Status-Update ...

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

... wie oben.

Ich weiß, ich bin spät, um das Spiel, aber ich erstellt eine End-to-End-Video-Tutorial zeigt, wie genau dies zu tun: Ich habe eine Anwendung erstellen, die auf dev.twitter.com, installieren twitterizer nuget mit, schreiben Sie den Code Griff der oauth und schließlich den Code schreiben, den Zugang zu verwenden Token von twitter empfangen einen Tweet zu machen.

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

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

-Code (falls Sie wan nicht diese Seite verlassen):

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.");
                }
            }
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top