Advertisement
Guest User

SimpleTwitter.cs

a guest
May 22nd, 2016
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.50 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Net;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. using Newtonsoft.Json.Linq;
  8. using System.Collections.Generic;
  9.  
  10. namespace Twitter
  11. {
  12.     public class SimpleTwitter
  13.     {
  14.         private readonly string _consumerKey;
  15.         private readonly string _consumerSecret;
  16.         private string _bearerAccessToken;
  17.  
  18.         private const string OAuthUrl = "https://api.twitter.com/oauth2/token";
  19.         private const string SearchUrl = "https://api.twitter.com/1.1/search/tweets.json";
  20.         private const string UserUrl = "https://api.twitter.com/1.1/users/show.json";
  21.  
  22.         public SimpleTwitter(string key, string secret)
  23.         {
  24.             _consumerKey = key;
  25.             _consumerSecret = secret;
  26.         }
  27.  
  28.         public async void Authenticate()
  29.         {
  30.             string authHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(_consumerKey) + ":" + Uri.EscapeDataString((_consumerSecret))));
  31.             string postBody = "grant_type=client_credentials";
  32.  
  33.             ServicePointManager.Expect100Continue = false;
  34.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(OAuthUrl);
  35.             request.Method = "POST";
  36.             request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
  37.             request.Headers.Add("Authorization", authHeader);
  38.  
  39.             using (Stream stream = request.GetRequestStream())
  40.             {
  41.                 byte[] content = Encoding.ASCII.GetBytes(postBody);
  42.                 stream.Write(content, 0, content.Length);
  43.             }
  44.  
  45.             HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
  46.  
  47.             StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
  48.             string json = reader.ReadToEnd();
  49.  
  50.             _bearerAccessToken = JObject.Parse(json)["access_token"].ToString();
  51.         }
  52.  
  53.         public async Task<List<Tweet>> Search(string query, int amount = 3)
  54.         {
  55.             string response = await MethodGET(SearchUrl + "?result_type=recent&count=" + amount + "&q=" + WebUtility.UrlEncode(query));
  56.             JObject jdata = JObject.Parse(response);
  57.  
  58.             List<Tweet> tweets = new List<Tweet>();
  59.  
  60.             foreach(JObject jt in jdata["statuses"])
  61.             {
  62.                 tweets.Add(new Tweet()
  63.                 {
  64.                     Text = jt["text"].ToString(),
  65.                     Name = jt["user"]["name"].ToString(),
  66.                     UrlUsername = jt["user"]["screen_name"].ToString()
  67.                 });
  68.             }
  69.  
  70.             return tweets;
  71.         }
  72.  
  73.         public async Task<Tweet> GetUserStatus(string username)
  74.         {
  75.             string response = await MethodGET(UserUrl + "?screen_name=" + username);
  76.             JObject jdata = JObject.Parse(response);
  77.  
  78.             if (jdata["errors"] != null)
  79.                 return null;
  80.  
  81.             return new Tweet()
  82.             {
  83.                 Text = jdata["status"]["text"].ToString(),
  84.                 Name = jdata["name"].ToString(),
  85.                 UrlUsername = jdata["screen_name"].ToString()
  86.             };
  87.         }
  88.  
  89.         private async Task<string> MethodGET(string url)
  90.         {
  91.             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  92.             request.Method = "GET";
  93.             request.Headers.Add("Authorization", "Bearer " + _bearerAccessToken);
  94.  
  95.             try
  96.             {
  97.                 using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
  98.                 using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  99.                     return reader.ReadToEnd();
  100.             }
  101.             catch (WebException e)
  102.             {
  103.                 using (HttpWebResponse response = (HttpWebResponse)e.Response)
  104.                 using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
  105.                     return reader.ReadToEnd();
  106.             }
  107.         }
  108.  
  109.         public class Tweet
  110.         {
  111.             public string Name { get; set; }
  112.             public string UrlUsername { get; set; }
  113.             public string Text { get; set; }
  114.         }
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement