it-swarm.com.de

Authentifizieren und fordern Sie die Zeitleiste eines Benutzers mit der Twitter-API 1.1 an oAuth

Ich habe heute Morgen den gefürchteten Fehler "Die Twitter REST API v1 ist nicht mehr aktiv. Bitte migrieren Sie zu API v1.1." Auf einigen meiner Websites erhalten.

Bisher habe ich Javascript/json verwendet, um diese Anrufe zu tätigen http://api.Twitter.com/1/statuses/user_timeline.json ? um eine Zeitleiste anzuzeigen.

Da dies nicht mehr verfügbar ist, muss ich den neuen 1.1 API-Prozess übernehmen.

Ich muss Folgendes mit HttpWebRequest-Objekten ausführen, die keine Drittanbieteranwendung sind:

  1. Authentifizieren Sie sich mit oauth key und secret
  2. Tätigen Sie einen authentifizierten Anruf, um die Zeitachse des Benutzers anzuzeigen
48
hutchonoid

Hier ist, was ich getan habe, um dies in einem einfachen Beispiel zum Laufen zu bringen.

Ich musste einen oAuth Consumer Key und ein Geheimnis von Twitter generieren:

https://dev.Twitter.com/apps/new

Ich habe das Authentifizierungsobjekt zuerst deserialisiert, um das Token abzurufen und erneut einzugeben, um den Timeline-Aufruf zu authentifizieren.

Der Timeline-Aufruf liest einfach den json, da dies alles ist, was ich tun muss. Vielleicht möchten Sie ihn selbst in ein Objekt deserialisieren.

Ich habe dazu ein Projekt erstellt unter: https://github.com/andyhutch77/oAuthTwitterWrapper

Update - Ich habe das Github-Projekt so aktualisiert, dass es Beispiele für ASP.NET-Webanwendungen und MVC-Anwendungen sowie eine Nuget-Installation enthält.

// You need to set your own keys and screen name
var oAuthConsumerKey = "superSecretKey";
var oAuthConsumerSecret = "superSecretSecret";
var oAuthUrl = "https://api.Twitter.com/oauth2/token";
var screenname = "aScreenName";

// Do the Authenticate
var authHeaderFormat = "Basic {0}";

var authHeader = string.Format(authHeaderFormat,
    Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(oAuthConsumerKey) + ":" +
    Uri.EscapeDataString((oAuthConsumerSecret)))
));

var postBody = "grant_type=client_credentials";

HttpWebRequest authRequest = (HttpWebRequest)WebRequest.Create(oAuthUrl);
authRequest.Headers.Add("Authorization", authHeader);
authRequest.Method = "POST";
authRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
authRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

using (Stream stream = authRequest.GetRequestStream())
{
    byte[] content = ASCIIEncoding.ASCII.GetBytes(postBody);
    stream.Write(content, 0, content.Length);
}

authRequest.Headers.Add("Accept-Encoding", "gzip");

WebResponse authResponse = authRequest.GetResponse();
// deserialize into an object
TwitAuthenticateResponse twitAuthResponse;
using (authResponse)
{
    using (var reader = new StreamReader(authResponse.GetResponseStream())) {
        JavaScriptSerializer js = new JavaScriptSerializer();
        var objectText = reader.ReadToEnd();
        twitAuthResponse = JsonConvert.DeserializeObject<TwitAuthenticateResponse>(objectText);
    }
}

// Do the timeline
var timelineFormat = "https://api.Twitter.com/1.1/statuses/user_timeline.json?screen_name={0}&include_rts=1&exclude_replies=1&count=5";
var timelineUrl = string.Format(timelineFormat, screenname);
HttpWebRequest timeLineRequest = (HttpWebRequest)WebRequest.Create(timelineUrl);
var timelineHeaderFormat = "{0} {1}";
timeLineRequest.Headers.Add("Authorization", string.Format(timelineHeaderFormat, twitAuthResponse.token_type, twitAuthResponse.access_token));
timeLineRequest.Method = "Get";
WebResponse timeLineResponse = timeLineRequest.GetResponse();
var timeLineJson = string.Empty;
using (timeLineResponse)
{
    using (var reader = new StreamReader(timeLineResponse.GetResponseStream()))
    {
         timeLineJson = reader.ReadToEnd();
    }
}


public class TwitAuthenticateResponse {
    public string token_type { get; set; }
    public string access_token { get; set; }
}
102
hutchonoid

Erstellt eine Nur-JS-Lösung, um Twitter-Posts auf Ihrer Website zu erhalten, ohne die neue API zu verwenden - kann jetzt auch die Anzahl der Tweets angeben: http://goo.gl/JinwJ

2
Jason