Autentica y solicita la línea de tiempo de un usuario con Twitter API 1.1 oAuth

Esta mañana he recibido el temido ‘The Twitter REST API v1 ya no está activo. Migre a la API v1.1. ‘ error en algunos de mis sitios web.

Anteriormente, he estado usando javascript / json para hacer estas llamadas a http://api.twitter.com/1/statuses/user_timeline.json ? para mostrar una línea de tiempo

Como esto ya no está disponible, necesito adoptar el nuevo proceso 1.1 API.

Necesito hacer lo siguiente utilizando objetos HttpWebRequest, no una aplicación de terceros:

  1. Autenticar usando la clave oauth y el secreto
  2. Realice una llamada autenticada para retroceder y mostrar la línea de tiempo de los usuarios

Esto es lo que hice para que esto funcione en un simple ejemplo.

Tuve que generar una clave de consumidor oAuth y un secreto de Twitter en:

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

Deserialicé el objeto de autenticación primero para obtener el token y escribir nuevamente para autenticar la llamada de línea de tiempo.

La llamada de línea de tiempo simplemente lee el json, ya que es todo lo que necesito hacer, es posible que desee deserializarlo usted mismo en un objeto.

He creado un proyecto para esto en: https://github.com/andyhutch77/oAuthTwitterWrapper

Actualización : he actualizado el proyecto github para incluir demostraciones de ejemplo de la aplicación web asp.net y mvc y la instalación de nuget.

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

Creó una solución JS única para obtener publicaciones de Twitter en su sitio sin utilizar una nueva API; ahora también puede especificar la cantidad de tweets: http://goo.gl/JinwJ