使用Twitter API 1.1 oAuthvalidation和请求用户的时间表

今天早上我收到了令人恐惧的“Twitter REST API v1不再活跃。 请迁移到API v1.1。 在我的一些网站错误。

以前我一直在使用javascript / json来调用http://api.twitter.com/1/statuses/user_timeline.json ? 显示时间线。

由于这不再可用,我需要采用新的1.1 API过程。

我需要使用HttpWebRequest对象而不是第三方应用程序来执行以下操作:

  1. 使用oauth密钥和秘密进行身份validation
  2. 进行经过身份validation的呼叫以撤回显示用户时间表

这是我做了一个简单的例子来做这个工作。

我必须在Twitter上生成一个oAuth消费者密钥和秘密:

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

我首先反序列化authentication对象,以获取令牌和types以validation时间轴调用。

时间轴调用简单地读取json,因为这是我需要做的,你可能想要将它自己反序列化成一个对象。

我已经为此创build了一个项目: https : //github.com/andyhutch77/oAuthTwitterWrapper

更新 – 我已经更新了github项目,包括asp .net web应用程序和mvc应用程序示例演示和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; } } 

创build一个JS唯一的解决scheme,以获得您的网站上的Twitterpost,而不使用新的API – 现在可以指定的鸣叫数: http : //goo.gl/JinwJ