Привет уважаемый читатель моего блога!
Я сегодня расскажу как можно авторизовать в
твиттере и научимся отправить сообщения в твиттер
и читать пользователя. Мы не будем использовать твиттер 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 я еще не видел.
По какой то причине неработает с твитером
ОтветитьУдалитьМожно поконкретнее?
ОтветитьУдалить