48 votes

Authentifiez et demandez la chronologie d'un utilisateur avec Twitter API 1.1 oAuth

Ce matin, j'ai reçu le redoutable 'Twitter API REST v1 n'est plus actif. Merci de migrer vers l'API v1.1. " erreur dans quelques-uns de mes sites web.

Auparavant, j'ai été en utilisant javascript/json pour faire ces appels à http://api.twitter.com/1/statuses/user_timeline.json? pour afficher un calendrier.

Comme ce n'est plus disponible j'ai besoin d'adopter la nouvelle 1.1 de l'API processus.

J'ai besoin d'effectuer les opérations suivantes à l'aide de HttpWebRequest objets pas une application 3ème partie:

  1. S'authentifier en utilisant oauth clé et le secret
  2. Faire un appel authentifié à tirer vers l'arrière pour afficher les utilisateurs de la timeline

102voto

hutchonoid Points 11421

Voici ce que j'ai fait pour obtenir ce travail dans un exemple simple.

J'ai eu pour générer une clé client oAuth et le secret de Twitter à:

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

Je désérialisé l'authentification de l'objet pour obtenir le jeton et le type de retour afin d'authentifier le calendrier appel.

Le scénario d'appel se contente de lire le json comme c'est tout ce que je dois faire, vous pouvez désérialiser vous-même dans un objet.

J'ai créé un projet à : https://github.com/andyhutch77/oAuthTwitterWrapper

Mise à jour - j'ai mis à jour le github du projet pour inclure à la fois asp .net web app & mvc application des démos et nuget installer.

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

2voto

Jason Points 25

Création d'une solution JS uniquement pour obtenir des publications Twitter sur votre site sans utiliser de nouvelle API. Vous pouvez désormais spécifier le nombre de tweets également: http://goo.gl/JinwJ

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X