Using Twitter OAuth via API 1.1 without 3rd Party Library
我在使用OAuth的GET statuss / user_timeline时遇到麻烦。
我是Twitter和编程的新手。 我在文档中看到的大多数帮助都是关于POST的。
之前我使用的是:http://api.twitter.com/1/statuses/user_timeline.json?screen_name=userid
现在,基于新的API,我尝试使用:https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=userid。
但我收到"远程服务器返回错误:(400)错误的请求"。
我在dev.twitter.com上做了一个应用程序。 我还设法生成了签名。 现在我不知道如何发布签名并获得输出。 我使用C#网络表单.net 3.5。 我不能使用类似twitterizer的第三方库。
我在Get twitter公开时间轴,json + C#,没有第3方库和两个跟进线程中关注了该线程。 出问题了。 我假设这与API 1.1有关。
在这里(更改"更新我"部分):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | // oauth application keys var oauth_token ="update me"; var oauth_token_secret ="update me"; var oauth_consumer_key ="update me"; var oauth_consumer_secret ="update me"; // oauth implementation details var oauth_version ="1.0"; var oauth_signature_method ="HMAC-SHA1"; // unique request details var oauth_nonce = Convert.ToBase64String( new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); var timeSpan = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString(); // message api details var status ="Updating status via REST API if this works"; var resource_url ="https://api.twitter.com/1.1/statuses/user_timeline.json"; var screen_name ="updateme"; // create oauth signature var baseFormat ="oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}"; var baseString = string.Format(baseFormat, oauth_consumer_key, oauth_nonce, oauth_signature_method, oauth_timestamp, oauth_token, oauth_version, Uri.EscapeDataString(screen_name) ); baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url),"&", Uri.EscapeDataString(baseString)); var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret), "&", Uri.EscapeDataString(oauth_token_secret)); string oauth_signature; using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))) { oauth_signature = Convert.ToBase64String( hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString))); } // create the request header var headerFormat ="OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\"," + "oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\"," + "oauth_token=\"{4}\", oauth_signature=\"{5}\"," + "oauth_version=\"{6}\""; var authHeader = string.Format(headerFormat, Uri.EscapeDataString(oauth_nonce), Uri.EscapeDataString(oauth_signature_method), Uri.EscapeDataString(oauth_timestamp), Uri.EscapeDataString(oauth_consumer_key), Uri.EscapeDataString(oauth_token), Uri.EscapeDataString(oauth_signature), Uri.EscapeDataString(oauth_version) ); // make the request ServicePointManager.Expect100Continue = false; var postBody ="screen_name=" + Uri.EscapeDataString(screen_name);// resource_url +="?" + postBody; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); request.Headers.Add("Authorization", authHeader); request.Method ="GET"; request.ContentType ="application/x-www-form-urlencoded"; WebResponse response = request.GetResponse(); string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd(); |
我刚刚面临与此类似的问题,但是以不同的方式解决了
使用Twitter API 1.1 oAuth验证并请求用户时间轴
我在https://github.com/andyhutch77/oAuthTwitterTimeline创建了一个GitHub项目
我创建了一个简单的项目,该项目使用ASP.net Web服务获取JSON数据。 随后使用javascript处理JSON。
https://github.com/bmdeveloper/TweetService