· 8 years ago · Jan 27, 2017, 11:10 AM
1{"errors":[{"message":"Could not authenticate you","code":32}]}
2
3"(Malmö OR Lund) (Sverige OR Skåne)" // Fails
4"(Malmo OR lund) (Skane OR Sweden)" // Works, returns correct result
5"Malmö" // Works
6
7public async Task SearchTwitter(string query)
8{
9 var oauth_token = "xxxxxxxxxxxx";
10 var oauth_token_secret = "xxxxxxxxxxxx";
11 var oauth_consumer_key = "xxxxxxxxxxxx";
12 var oauth_consumer_secret = "xxxxxxxxxxxx";
13
14 var baseUrl = "https://api.twitter.com/1.1/search/tweets.json";
15
16 var parameters = new Dictionary<string, string>
17 {
18 {"tweet_mode", "extended"},
19 {"result_type", "recent"},
20 {"count", 100.ToString()},
21 {"q", query},
22
23 {"oauth_consumer_key", oauth_consumer_key},
24 {"oauth_timestamp", DateTime.UtcNow.ToUnixStringFromDateTime()},
25 {"oauth_nonce", Guid.NewGuid().ToString("N")},
26 {"oauth_version", "1.0"},
27 {"oauth_signature_method", "HMAC-SHA1"},
28 {"oauth_token", oauth_token}
29 };
30
31 var sortedParameterString =
32 string.Join("&",
33 (from parm in parameters
34 orderby parm.Key
35 select Uri.EscapeDataString(parm.Key) + "=" + Uri.EscapeDataString(parameters[parm.Key]))
36 .ToArray());
37
38 var signatureBaseString = "GET&" + Uri.EscapeDataString(baseUrl) + "&" + Uri.EscapeDataString(sortedParameterString);
39
40 var signingKey = Uri.EscapeDataString(oauth_consumer_secret) + "&" + Uri.EscapeDataString(oauth_token_secret);
41
42 string oauth_signature;
43 using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(signingKey)))
44 {
45 oauth_signature = Convert.ToBase64String(hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(signatureBaseString)));
46 }
47
48 var headerString = "OAuth " + string.Join(", ", parameters.Where(kv => kv.Key.StartsWith("oauth")).Select(kv => kv.Key + "="" + Uri.EscapeDataString(kv.Value) + """)) + ", oauth_signature="" + Uri.EscapeDataString(oauth_signature) + """;
49
50 var uri = new Uri(baseUrl + $"?count={Uri.EscapeDataString(100.ToString())}&q={Uri.EscapeDataString(query)}&result_type={Uri.EscapeDataString("recent")}&tweet_mode={Uri.EscapeDataString("extended")}");
51
52 var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri);
53 httpRequestMessage.Headers.Add("Authorization", headerString);
54 httpRequestMessage.Headers.ExpectContinue = false;
55
56 var httpResponseMessage = await GetHttpClient().SendAsync(httpRequestMessage).ConfigureAwait(false);
57 var resultString = await httpResponseMessage.Content.ReadAsStringAsync().ConfigureAwait(false);
58 if (httpResponseMessage.IsSuccessStatusCode)
59 {
60 // Request succeeded
61 }
62 else {
63 // Request failed
64 }
65}
66
67private static HttpClient GetHttpClient()
68{
69 var handler = new HttpClientHandler();
70 if (handler.SupportsAutomaticDecompression)
71 {
72 handler.AutomaticDecompression = DecompressionMethods.GZip;
73 }
74
75 return new HttpClient(handler);
76}