уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В Сети можно встретить уйму постов на тему «Зачем нужен Twitter?» в которых приводится масса советов по применению это сервиса для самых разнообразных целей. Вообще, по-момему, понять суть твиттера можно только после того, как начать его использовать. Для себя я выделил три простых причины по которым я активно стараюсь «наростить пузо» своему аккаунт:

  1. Если хорошо поработать со списками (Lists) и правильно раскидать по ним всех на кого я подписан (following’и), то можно получать массу информации по самым разнообразным темам практически без лишнего «шума».
  2. Несмотря на то, что Delphi-сообщество переживает не самые счастливые времена, в Твиттере достаточно много людей, интересующихся программированием. Больше людей подпишутся на мою ленту в Твиттере — больше увидят сообщение о новом посте — больше людей перейдет в блог и т.д. со всеми вытекающими.
  3. И, наконец, самая тривальная причина — заманить ПСа в блог. Дело в том, что поисковики практически живут в Twitter и, публикация микросообщений в Твиттере со ссылкой на блог очень положительно влияет на основной блог в целом.

Видимо поэтому я решил немного поразбираться со всеми механизмами Твиттера, так сказать, изнутри. Лишней информация не будет, по крайней мере для меня. И сегодня я рассмотрю методы, касающиеся работы со списками following и followers.

Для демонстрации работы метода, я решил весь программный код подкреплять небольшими скриншотами своего аккаунта в twitter’е.
И первое, что мы сделаем — это получим список following.

Метод statuses/friends

Метод возвращает список твиттерян, чьи сообщения публикуются в Вашей ленте. Формат возвращаемых данных: xml или json.
При работе с этим методом следует учитывать одно обстоятельство — за 1 запрос Вы можете получить только 100 пользователей из списка. Чтобы продвигаться по списку вперед и назад необходимо использовать параметр cursor в запросе. Значения этого параметра приходят также в ответе сервера.
Попробуем запросить список моих друзей:

cursor=-1;//начальное значение параметра
with THTTPSend.Create do
   begin
     URL := EncodeURL(AnsiToUtf8('http://'+Login+':'+Password+'@api.twitter.com/1/statuses/friends/WebDelphi.xml?cursor='+Cursor));
     if HTTPMethod('GET',URL)then
       begin
         aDoc:=NewXMLDocument();
         aDoc.LoadFromStream(Document);
         for I := 0 to aDoc.DocumentElement.ChildNodes.Count - 1 do
           begin
             if aDoc.DocumentElement.ChildNodes[i].NodeName='users' then
               begin
                 Node:=aDoc.DocumentElement.ChildNodes[i];
               end
             else
               if aDoc.DocumentElement.ChildNodes[i].NodeName='next_cursor' then
                  Cursor:=aDoc.DocumentElement.ChildNodes[i].Text;
           end;
           for i:=0 to Node.ChildNodes.Count-1 do
             begin
               Memo1.Lines.Add(Node.ChildNodes[i].ChildNodes[2].NodeValue);
               Application.ProcessMessages;
               label4.Caption:=IntToStr(Memo1.Lines.Count);
             end;
      end;
   end;

Здесь я вначале запрашиваю документ, содержащий первую 100 моих друзей из списка following, затем, если запрос прошел успешно, ищу кореневой узел users дочерие узлы которорого содержат информацию о моих друзьях и вывожу псевдонимы (screen_name) этих пользователей в Memo. Дополнительно я сохраняю также значение узла next_cursor, чтобы продолжить движение вперед по списку. Т.к. у меня на момент написания поста в списке following содержалось 118 записей, то, следовательно для получения полного списка, мне необходимо сделать ещё один шаг вперед — повторить запрос, включив в него значение параметра cursor. Соответственно для более обширных списков на 1000, 2000 пользователей необходимо составить просто цикл с предусловием:

while Cursor<>'0' do
begin
//здесь запрашиваем очередной список
end;

То есть, когда в очередном списке значение узла next_cursor будет равно 0 — прерываем цикл, т.к. весь список в этом случае получен.
Вот результат выполнения цикла для моего аккаунта Twitter:

список followingСписок составлен с самого последнего добавленного друга до первого, соответсвенно, если вы хотите получить список наоборот — от первого до последнего, то вам необходимо в цикле использовать значения курсора, полученное из узла previous_cursor.

Метод statuses/followers

Метод возвращает список моих подписчиков (following) — тех, кто читает мои сообщения в своей ленте. Т.к. этот метод работает точно также как и предыдущий, то я не буду повторяться и писать один и тот же листинг, а перейду сразу к следующему моменту работы со списками друзей и подписчиков, а именно — получение информации об отношении пользователей.

Метод friendships/exists

В методе используются два параметра: user_a и user_b. Возвращает true, если пользователь user_a следует за пользователем user_b, т.е. пользователь A добавил пользователя B в свой список following.
Метод имеет стандартное ограничение 150 запросов в час и т.к. не требует аутентификации пользователя (в случае, если аккаунты пользователей не защищены), то количество запросов отслеживается по IP-адресу.
Попробуем использовать этот метод на практике. Для этого я выбрал пользователя из своего списка followers за которым я не следую:
список followers для webdelphi
Вот листинг в случае, если я проверю свой аккаунт на предмет наличия пользователя в моем списке following:

with THTTPSend.Create do
   begin
     URL := EncodeURL(AnsiToUtf8('http://api.twitter.com/1/friendships/exists.xml?user_a='+Edit3.Text+'&user_b='+Edit4.Text));
     if HTTPMethod('GET',URL)then
       begin
         aDoc:=NewXMLDocument();
         aDoc.LoadFromStream(Document);
         label9.Caption:=aDoc.DocumentElement.Text;
       end;
    end;

Результат выполнения:

Если поменять наши ники местами, то результат выполнения метода будет true, т.к. я нахожусь в списке following этого пользователя.

Метод friendships/show

Метод аналогичен методу friendships/exists, но предоставляет в наше распоряжение более детальную информацию о пользователях и позволяет за 1 запрос получить отношение пользователя A к В и В к А, т.е. сокращает количество запросов в 2 раза по сравнению с предыдущим методом.
Теперь, после того как мы получили списки foolowing и followers, а также проверили отношения пользователей мы можем либо добавить нового пользователя в свой список following, либо, напротив — удальть его.

Метод friendships/create

Позволяет пользователю (мне) добавить в свой список following нового пользователя. Метод требут аутентификации ине имеет ограничений на использование. Рассмотрим работу метода на примере того же пользователя, что и в предыдущем листинге. Добавим его в мой аккаунт:

 with THTTPSend.Create do
    begin
      URL:=EncodeURL(AnsiToUtf8('http://'+Login+':'+Pass+'@api.twitter.com/1/friendships/create.xml?screen_name='+Edit5.Text));
       if HTTPMethod('GET',URL)then
        begin
           aDoc:=NewXMLDocument();
           aDoc.LoadFromStream(Document);
           Memo1.Lines.Add(aDoc.XML.Text);
        end;
    end;

Здесь я добавил пользователя в свой список following и вывел ответ сервера в Memo1.
Соответственно для того, чтобы удалить пользователя из списка, необходимо воспользоваться методом friendships/destroy с теми же параметрами, что и у предыдущего метода.
Вот и все, что нам требуется знать по поводу работы со списками в Twitter API.

0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
20 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Алексей
Алексей
18/03/2010 10:36

А почему имеено тввитер??? А как же его конкурент живая лента???

Алексей
Алексей
18/03/2010 16:02

Ну почему же так, интересно Ваше мнение, в конкуренции. пока не считаем кол-во юзеров, период работы пока еще не тот :)))

Алексей
Алексей
18/03/2010 18:22

Ну в принципе я думаю тот же алгоритм будет и для живой ленты получаешь XML и парсишь
Надо будет полазить поискать на досуге

yorri
yorri
19/03/2010 10:53

Спасибо. Очень интерестный материал по Twitter и хорошо изложен. Я тоже начал писать клиент (ради интереса), но Вы меня опережаете — я застрял был на загрузке картинок-аватаров, потому, что начал немножко с другой стороны :-)

yorri
yorri
19/03/2010 19:37

Ну первой проблемой было то, что я никогда не писал для Wed, и XML в частности :-). Но это оказалось, так себе. При загрузке аватаров оказалось что: -картинка может быть, например PNG, а расширение стоять GIF, браузер отображает ее нормально, но в случае с Делфи (6 версия) это уже проблема — пришлось писать проверку файла изнутри и походу переименовывать; — и вторая проблема, это возможность в имени файла кириличных букв, декодировка вызвала проблемы при скачке некоторых файлов (например, EncodeURL которую Вы описывали, нормально работала с кириличными символами, а на некоторых английских почемуто давала сбой). Перепробывал штук 6-8 разных функций, сработала… Подробнее »

yorri
yorri
19/03/2010 20:12

ближе к ночи (21:00-23:00) скину ссылку, а то сейчас на работе, а код дома.:-)

yorri
yorri
20/03/2010 10:52

К ночи не получилось (пятница-развратница:-).
comment image — вот тут Synapse почему-то не хотел работать (может это только у меня?),
а вот тут comment image — обявлен Gif, а на самом деле Png.

Алексей
Алексей
21/03/2010 12:09

NativeXML поставь для работы с XML? там всего один юнит подключить надо
И делфу подними повыше, если есть возможность :)))

Rem
Rem
30/03/2010 12:03

Здравствуйте, а можете выложить EncodeURL, как понимаю она самописная? Делфя при компиляции на нее ругается. Нашел в инете альтернативу, но работать все равно не хочет, выдает «DTD Запрещен» и начало загружаемой странички.

А можете выложить пример «Метод statuses/friends» полностью?
а то так приходится вбивать var и uses методом тыка -(

Rem
Rem
30/03/2010 16:44

Спасибо, заработало.

Багрепорт -)
Если в нике есть нижнее подчеркивание, оно тут «EncodeURL(AnsiToUtf8(‘http://’+Login» заменяется на «%5F», и авторизация уже не идет, Если логин просто прицепить, то норма.

Владимир
Владимир
29/05/2010 20:35

Метод friendships/create отправляется методом POST а не GET
http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-friendships%C2%A0create

Александр
15/12/2010 05:09

автор молоток интересно