Skip to content

Instantly share code, notes, and snippets.

@JerryBian
Created October 22, 2015 03:47
Show Gist options
  • Save JerryBian/64b1a49699e4cd4dca87 to your computer and use it in GitHub Desktop.
Save JerryBian/64b1a49699e4cd4dca87 to your computer and use it in GitHub Desktop.
Get Twitter Home Timeline via C#
public class TweetHttpClient : ITwitterHttpClient
{
public TweetHttpClient()
{
_httpClient = new HttpClient
{
BaseAddress = new Uri("https://api.twitter.com/")
};
}
public async Task<List<TweetStatus>> GetUserTimeLineAsync(string screenName, int count)
{
var accessToken = await GetAccessTokenAsync();
_httpClient.DefaultRequestHeaders.Clear();
_httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
var response = await _httpClient.GetAsync($"1.1/statuses/user_timeline.json?screen_name={screenName}&count={count}");
var json = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<List<TweetStatus>>(json);
}
#region Private methods
private async Task<string> GetAccessTokenAsync()
{
var consumerKeyUrlEncode = Uri.EscapeDataString(ConfigurationSetting.TwitterConsumerKey);
var consumerSecretUrlEncode = Uri.EscapeDataString(ConfigurationSetting.TwitterConsumerSecret);
var concatConsumerKeyAndSecret = string.Concat(consumerKeyUrlEncode, ":", consumerSecretUrlEncode);
var base64ConcatConsumerKeyAndSecret = Convert.ToBase64String(Encoding.UTF8.GetBytes(concatConsumerKeyAndSecret));
_httpClient.DefaultRequestHeaders.Clear();
_httpClient.DefaultRequestHeaders.Add("Authorization", "Basic " + base64ConcatConsumerKeyAndSecret);
var bearerToken =
await _httpClient.PostAsync("oauth2/token", new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("grant_type", "client_credentials"), }));
var accessToken = await bearerToken.Content.ReadAsStringAsync();
var obj = JsonConvert.DeserializeAnonymousType(accessToken, new { access_token = accessToken });
return obj.access_token;
}
#endregion
#region Fields
private readonly HttpClient _httpClient;
#endregion
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment