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







Тоже делал такую же штуку.
ОтветитьУдалитьТолько никогда не использую Copy и Pos, а вместо этого юзаю регулярки.
> Только никогда не использую Copy и Pos, а вместо этого юзаю регулярки.
ОтветитьУдалитьПочему? Чем они тебя не устраивают или есть какието минусы..
Хоть регулярки немного медленней, тем не менее они более удобны при парсинге. С copy/pos малейшее изменение в тексте парсинга и придется заново компилить программу, например, если длина токена изменится. В регулярных выражениях более гибкая подстройка.
ОтветитьУдалитьА вообще, парсинг HTML регулярками или copy/pos это не есть хорошо. Должны быть специальные средства, аля XHTML, XPath. Только вот в delphi нормальных парсеров HTML я еще не видел.
По какой то причине неработает с твитером
ОтветитьУдалитьМожно поконкретнее?
ОтветитьУдалить