c# - desarrollador - twitter developers documentation
Autentica y solicita la línea de tiempo de un usuario con Twitter API 1.1 oAuth (2)
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:
- Autenticar usando la clave oauth y el secreto
- Realice una llamada autenticada para retroceder y mostrar la línea de tiempo de los usuarios
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
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<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; }
}