Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using Newtonsoft.Json.Linq;
- using System.Collections.Generic;
- namespace Twitter
- {
- public class SimpleTwitter
- {
- private readonly string _consumerKey;
- private readonly string _consumerSecret;
- private string _bearerAccessToken;
- private const string OAuthUrl = "https://api.twitter.com/oauth2/token";
- private const string SearchUrl = "https://api.twitter.com/1.1/search/tweets.json";
- private const string UserUrl = "https://api.twitter.com/1.1/users/show.json";
- public SimpleTwitter(string key, string secret)
- {
- _consumerKey = key;
- _consumerSecret = secret;
- }
- public async void Authenticate()
- {
- string authHeader = "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Uri.EscapeDataString(_consumerKey) + ":" + Uri.EscapeDataString((_consumerSecret))));
- string postBody = "grant_type=client_credentials";
- ServicePointManager.Expect100Continue = false;
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(OAuthUrl);
- request.Method = "POST";
- request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
- request.Headers.Add("Authorization", authHeader);
- using (Stream stream = request.GetRequestStream())
- {
- byte[] content = Encoding.ASCII.GetBytes(postBody);
- stream.Write(content, 0, content.Length);
- }
- HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
- StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII);
- string json = reader.ReadToEnd();
- _bearerAccessToken = JObject.Parse(json)["access_token"].ToString();
- }
- public async Task<List<Tweet>> Search(string query, int amount = 3)
- {
- string response = await MethodGET(SearchUrl + "?result_type=recent&count=" + amount + "&q=" + WebUtility.UrlEncode(query));
- JObject jdata = JObject.Parse(response);
- List<Tweet> tweets = new List<Tweet>();
- foreach(JObject jt in jdata["statuses"])
- {
- tweets.Add(new Tweet()
- {
- Text = jt["text"].ToString(),
- Name = jt["user"]["name"].ToString(),
- UrlUsername = jt["user"]["screen_name"].ToString()
- });
- }
- return tweets;
- }
- public async Task<Tweet> GetUserStatus(string username)
- {
- string response = await MethodGET(UserUrl + "?screen_name=" + username);
- JObject jdata = JObject.Parse(response);
- if (jdata["errors"] != null)
- return null;
- return new Tweet()
- {
- Text = jdata["status"]["text"].ToString(),
- Name = jdata["name"].ToString(),
- UrlUsername = jdata["screen_name"].ToString()
- };
- }
- private async Task<string> MethodGET(string url)
- {
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- request.Method = "GET";
- request.Headers.Add("Authorization", "Bearer " + _bearerAccessToken);
- try
- {
- using (HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync())
- using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
- return reader.ReadToEnd();
- }
- catch (WebException e)
- {
- using (HttpWebResponse response = (HttpWebResponse)e.Response)
- using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
- return reader.ReadToEnd();
- }
- }
- public class Tweet
- {
- public string Name { get; set; }
- public string UrlUsername { get; set; }
- public string Text { get; set; }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement