вторник, 16 августа 2011 г.

Delphi Работа с твиттером

Привет уважаемый читатель моего блога!
Я сегодня расскажу как можно авторизовать в
твиттере и научимся отправить сообщения в твиттер
и читать пользователя. Мы не будем использовать  твиттер API а будем работать со страницей m.twitter.com то есть с мобильной версий сайта.

Авторизация
Нам понадобится сниффер HTTPFox, я проводил маленький обзор в этой статье там же и лежит ссылка на сниффер. И как раз мы проверим его на практики какой уж он удобный ;-). Заходим в наш браузер, заходим на страничку https://mobile.twitter.com/session/new тут же мы видим формы для заполнения.
Вот тут же и включаем сниффер, заполняем формы "Имя пользователя и Пароль" и жмем "Войти" и возвращаемся в сниффер на вкладку "POST Data" смотрим какие параметры нужно заполнить.
Это параметры username - имя пользователя, password - пароль, а параметр authenticity_token его нужно с парсить со странице он постоянно изменяется, не веришь? Это можно проверить, давайте попробуем опять зайти на страницу и войти.
 Вот смотрите сами значения поменялись. Так теперь ищем в коде странице значение "authenticity_token" будет разумно воспользоваться поиском.

Как вы видите значение "authenticity_token" в коде странице найдено, вот вся строчка кода.

<form action="https://mobile.twitter.com/session" method="post">

<div style="display: inline; margin: 0; padding: 0;">

<input name="authenticity_token" type="hidden" value="ef37b9fb28969820ad5a" /></div>

</form>

Теперь нужно вытащить все что хранится в value="" то есть то что нам нужно, и после заполнить параметр. Что бы вытащить все что хранится в
value=""
 мы воспользуемся  функциями pos/copy их будет достаточно. 

var

auth_t: string; // хранится значение authenticity_token

...

procedure TForm5.Button1Click(Sender: TObject);

var

get: String;

begin

get := IdHTTP1.get('https://mobile.twitter.com/session/new');

auth_t := Copy(get, Pos('type="hidden" value="', get) + 21, 20);

// Вытаскиваем значение authenticity_token

end;

Значение "authenticity_token" мы получили теперь нужно заполнить поля "Имя пользователя, Пароль" и по пробовать авторизироваться. 
var

auth_t: string; // хранится значение authenticity_token

...

procedure TForm5.Button1Click(Sender: TObject);

var

data: TStringList;

get: String;

begin

get := IdHTTP1.get('https://mobile.twitter.com/session/new');

auth_t := Copy(get, Pos('type="hidden" value="', get) + 21, 20);

// Вытаскиваем значение authenticity_token

data := TStringList.Create;

data.Add('authenticity_token=' + auth_t); 

data.Add('username=' + login.Text);

data.Add('password=' + pass.Text);

IdHTTP1.Post('https://mobile.twitter.com/session', data); 

 // Отправляем все параметры

get := IdHTTP1.get('https://mobile.twitter.com/');

if Pos('Home', get) <> 0 then

begin

ShowMessage('Авторизовались удачно!');

Button1.Enabled := False;

end

else

ShowMessage('Авторизовались не удачно!'); 

// Проверяем авторизовались или нет 

end;

Вводим значения в login.text и pass.text и пробуем авторизоваться. У меня все работает!
Отправка твита 
Ну вот пожалуй и все, мы авторизовались. Давайте научимся отправлять сообщение в твиттер. Заходим на страницу твиттера, только уже нужно будет войти в твиттер включаем сниффер пишим сообщение и отправляем. Заходим на вкладку "POST Data" смотрим какие параметры нужно заполнить.
 Параметр authenticity_token у нас уже есть нам нужно только вставить как мы делали с авторизацией, параметр tweet[text] тут хранится текст для отправки сообщения остальные параметры пустые мы их так и оставим.

procedure TForm5.Button2Click(Sender: TObject);

var

send: TStringList;

begin

send := TStringList.Create;

send.Add('authenticity_token=' + auth_t);

send.Add('tweet[text]=' + twit.Text);

send.Add('tweet[in_reply_to_status_id]=');

send.Add('tweet[lat]=');

send.Add('tweet[long]=');

send.Add('tweet[place_id]=');

send.Add('tweet[display_coordinates]=');

// Заполнили все поля

idHTTP1.Post('https://mobile.twitter.com/',send);

// Отправляем заполненые параметры

end;
Фолловинг
Вот и все, все очень легко! Сниффер нам очень помогает :) Теперь научимся читать пользователя не буду так же все подробно показывать тут почти тоже самое покажу только код.

procedure TForm3.Button5Click(Sender: TObject);

var

follow: TStringList;

begin

follow := TStringList.Create;

follow.Add('authenticity_token=' + auth_t);

follow.Add('last_url/=' + name.Text);

// Заполнили все поля

idHTTP1.Post('https://mobile.twitter.com/'+ name.Text +'/follow',follow);

// Отправляем заполненые параметры, то есть фолловим!

end;

Далее можете сами уже улучшать вашу программу. Ну вот и все написал долгожданную статью которую хотел написать очень давно, оцениваем:)
 

четверг, 11 августа 2011 г.

Работа с twitter'ом без использования API Twitter


Маленький обзор http сниффера

В данной статье я хочу показать сниффер с котором я более часто работаю. Кто не в курсе сниффер нужен для просмотра/изменения заголовков HTTP запросов. В моем случае сниффер нужен для просмотра параметров POST.
HTTPFox - Плагин для Firefox, на мой взгляд очень удобный без всяких лишних фантиков. Как установиться плагин я думаю знайте.

 
Открываем "Инструменты - HttpFox - Toggle HttpFox" и появляется окно в браузере.

 Открываем "Инструменты - HttpFox - Open In Own Window" и логируется уже все в отдельном окне.

Плагин вполне очень удобный и справляется со своей задачей очень хорошо. Большой  за удобство :)  А каким сниффером пользуешься ты?