3. Конструкторская часть
Приложение состоит из модуля “Program.cs”, который содержит точку входа в программу, класс Twitter, содержащий методы получения ПИН-кода, авторизации и отправки сообщения, а так же модуля “Form.cs”, который содержит функции для чтения своей ленты, ленты другого пользователя, просмотра трендов, своих читателей и пользователей, за лентой которых Вы следите.
Точкой входа в программу является метод Run класса Application, в котором происходит создание основного окна приложения.
Application.Run(new Form1());
Класс Twitter:
public class Twitter
{
public HttpWebRequest Request;//запрос серверу
public HttpWebResponse Response;//ответ сервера
public StreamReader Reader;
//данные для авторизации
public string oauth_token;
public string oauth_token_secret;
public string oauth_callback_confirmed;
public Twitter() { }//конструктор
public string GetPin()//метод для получения ПИН-кода
{
....
}
public string Authorize(string pin)//метод для авторизации
{
....
}
public string SendTwit(string Twit)//метод для отправки сообщения в ленту
{
....
}
Метод public string GetPin() используется для получения ПИН-кода. Он не принимает никаких параметров, а возвращаемым значением является строка, которая содержит уникальный идентификатор авторизации. Внутри метода генерируются необходимые данные для авторизации, формируется запрос на сервер, формируется необходимая строка, которая передается браузеру по умолчанию и ожидается ввод ПИН-кода.
public string GetPin()
{
Uri uri = new Uri("http://api.twitter.com/oauth/request_token");
string consumerKey = "XXX";
string consumerSecret = "XXX";
OAuthBase oAuth = new OAuthBase();
// Генерация необходимых данных
string timeStamp = oAuth.GenerateTimeStamp();
string nonce = oAuth.GenerateNonce();
string normUri;
string normParams;
string sig = oAuth.GenerateSignature(uri, consumerKey, consumerSecret, string.Empty, string.Empty, "GET", timeStamp, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normUri, out normParams);
// Формирование и вывод строки запроса
string request_url =
"http://api.twitter.com/oauth/request_token" + "?" +
"oauth_consumer_key=" + consumerKey + "&" +
"oauth_signature_method=" + "HMAC-SHA1" + "&" +
"oauth_signature=" + sig + "&" +
"oauth_timestamp=" + timeStamp + "&" +
"oauth_nonce=" + nonce + "&" +
"oauth_version=" + "1.0";
// Запрос на сервер
Request = (HttpWebRequest)HttpWebRequest.Create(request_url);
Response = (HttpWebResponse)Request.GetResponse();
Response = (HttpWebResponse)Request.GetResponse();
Reader = new StreamReader(Response.GetResponseStream(), Encoding.GetEncoding(1251));
string outline = Reader.ReadToEnd();
char[] delimiterChars = { &, = };
string[] words = outline.Split(delimiterChars);
oauth_token = words[1];
oauth_token_secret = words[3];
oauth_callback_confirmed = words[5];
request_url = "http://api.twitter.com/oauth/authorize?oauth_token=" + oauth_token;
System.Diagnostics.Process.Start(request_url); // Передаём ссылку на страницу браузеру по умолчанию и ждём пока пользователь введёт PIN-код
return oauth_token;
}
Метод public string Authorize(string pin) используется для авторизации пользователя. В качестве параметра принимает строку, содержащую ПИН-код. Возвращаемым значением является имя пользователя. Внутри метода происходит процедура запроса на сервер, получение ответа в виде строки, разбор полученной строки и присвоение значений соответствующим переменным.
public string Authorize(string pin)
{
Uri uri = new Uri("http://api.twitter.com/oauth/request_token");
string consumerKey = "7sm4qTVBxeqlTdv9Syfog";
string consumerSecret = "058PJGiiPs3SClDoDg1cd6fvFqw37Vy8ZXSrpKks5k";
OAuthBase oAuth = new OAuthBase();
string oauth_verifier = pin; // oauth_verifier -- это полученный нами PIN-код.
// Формирование и вывод строки запроса
request_url =
"http://api.twitter.com/oauth/access_token" + "?" +
"oauth_consumer_key=" + consumerKey + "&" +
"oauth_token=" + oauth_token + "&" +
"oauth_signature_method=" + "HMAC-SHA1" + "&" +
"oauth_signature=" + sig + "&" +
"oauth_timestamp=" + timeStamp + "&" +
"oauth_nonce=" + nonce + "&" +
"oauth_version=" + "1.0" + "&" +
"oauth_verifier=" + oauth_verifier;
// Запрос на сервер
Request = (HttpWebRequest)HttpWebRequest.Create(request_url);
Response = (HttpWebResponse)Request.GetResponse();
Reader = new StreamReader(Response.GetResponseStream(), Encoding.GetEncoding(1251));
outline = Reader.ReadToEnd();
// Разбор выданной строки и присвоение значений соответствующим переменным
words = outline.Split(delimiterChars);
oauth_token = words[1];
oauth_token_secret = words[3];
string user_id = words[5];
string screen_name = words[7];
return screen_name;
}
Метод public string SendTwit(string Twit) используется для отправки сообщения в ленту. В качестве параметра принимает строку с сообщением. Возвращаемым значением является строка с текстом “ok” в случае удачного завершения, либо строка с ответом сервера об ошибке.
public string SendTwit(string Twit)
{
OAuthTokens tokens = new OAuthTokens(); // Создаём объект класса
tokens.ConsumerKey = "7sm4qTVBxeqlTdv9Syfog"; //Ввводим Consumer Key
//Вводим Consumer Secret
tokens.ConsumerSecret = "058PJGiiPs3SClDoDg1cd6fvFqw37Vy8ZXSrpKks5k";
//Вводим AccessToken
tokens.AccessToken = "264296709-ZYOQKDXKbXlNcZa7nl1VbR1g3oIZmXwX9b4XlSgA";
//Вводим Access Token Secret
tokens.AccessTokenSecret = "j2BJCq5hwxkIgWslRybLYPzZY4euIiAuYJiFzVrtBY";
//Отправляем сообщение в твиттер
TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, Twit);
if (tweetResponse.Result == RequestResult.Success) //Проверка отправки
{
return "ok"; //Сообщение отправилось
}
else
{
return tweetResponse.ErrorMessage; //Сообщение не отправилось
}
}
При нажатии на различные кнопки на форме происходит вызов методов классов библиотеки Twitterizer2.
Кнопка “Timeline”:
UserTimelineOptions opts = new UserTimelineOptions();
opts.IncludeRetweets = true;
opts.UseSSL = true;
opts.Count = 15;
timeline.Clear();
TwitterResponse<TwitterStatusCollection> t = TwitterTimeline.HomeTimeline(tokens, opts);
foreach (TwitterStatus status in t.ResponseObject)
{
timeline.AppendText(status.User.Name + " " + "[" + status.CreatedDate + "] " + status.Text + " ");
}
В данном случае задаются опции новостной ленты и выводятся сообщения пользователей, которых Вы читаете.
Действия для кнопок “Mentions” и “My tweets”, а так же кнопки “Ok” при вводе имени пользователя аналогичны действиям кнопки “Timeline”, но в этих случаях выводятся соответственно сообщения, в которых упоминается Ваш никнейм, Ваши сообщения и сообщения пользователя, имя которого Вы ввели в элемент TextBox.
При нажатии на кнопки “Following” и “Followers” выводятся списки пользователей, которых Вы читаете и которые читают Вас соответственно.
Кнопка “Following”:
int i = 0;
TwitterResponse<TwitterUserCollection> fol = TwitterFriendship.Friends(tokens);
foreach (TwitterUser following in fol.ResponseObject)
{
i++;
}
timeline.AppendText("You follow " + i + " people ");
foreach (TwitterUser following in fol.ResponseObject)
{
timeline.AppendText(following.ScreenName + " ");
}
Кнопка “Followers”:
int i = 0;
TwitterResponse<TwitterUserCollection> fol = TwitterFriendship.Followers(tokens);
foreach (TwitterUser follower in fol.ResponseObject)
{
i++;
}
timeline.AppendText("You have " + i + " followers ");
foreach (TwitterUser follower in fol.ResponseObject)
{
timeline.AppendText(follower.ScreenName+" ");
}
При нажатии на кнопку “Trends” выводятся текущие тренды.
System.Net.WebRequest reqGET = System.Net.WebRequest.Create("https://api.twitter.com/1/trends/1.json");
System.Net.WebResponse resp = reqGET.GetResponse();
System.IO.Stream stream = resp.GetResponseStream();
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
string s = sr.ReadToEnd();
int n = s.Length;
char[] str = s.ToCharArray();
int ind = s.IndexOf("name");
string[] find = s.Split(new string[] {"name"}, 10, StringSplitOptions.None);
for (int i = 0; i < 10; i++)
{
int ind1 = find[i].IndexOf("event");
if (ind1 != -1)
{
string a = find[i].Substring(3, ind1-6);
timeline.AppendText(a+" ");
}
Происходит GET-запрос по адресу https://api.twitter.com/1/trends/1.json, читается ответ с сервера, который принимается в строку. Так как список трендов передается в формате JSON, необходимо извлечь из строки названия трендов. Для этого строка разбивается на массив строк, начинающихся с подстроки “name”, после чего в цикле для каждой строки находится подстрока “event” и в текстовое поле записывается текст, который находится между подстроками “name” и “event”.
Видно, что программа позволяет вести непрерывный диалог как с пользователем, который может контролировать приложение, так и с системой, которая посылает разнообразные команды серверу.
- Введение
- 1. Аналитическая часть
- 2. Теоретическая часть
- 3. Конструкторская часть
- 4. Техническая документация
- 4.1 Запуск программы
- 4.2 Кнопка Timeline
- 4.3 Кнопка Mentions
- 4.4 Кнопка My Tweets
- 4.5 Кнопка Followers
- 4.6 Кнопка Followings
- 4.7 Кнопка Trends
- 4.8 Кнопка OK
- 4.9 Кнопка Tweet
- 4.10 Кнопка Get Pin
- 4.11 Кнопка Authorize
- 5. Экспериментальная часть
- Вывод