Вчера я рассмотрел способ работы со списками followers и following при котором в ответном XML-документе возвращается вся информация о пользователях в списке, включая имя, местоположение, информацию о профиле, последнем сообщении пользователя и т.д. и т.п. Однако для того, чтобы провести элементарную проверку пользователя, например, определить добавил он Вас в свой список following или нет, тащить из Сети такой массив лишней информации достаточно затратно, хотя бы даже по времени выполнения запроса. К счастью, разработчики Twitter API предусмотрели и другой, более экономичный способ работы со списками followers и following.
Обратимся к набору методов API из раздела «Social Graph Methods». Здесь содержится всего два метода: friends/ids и followers/ids. По названию уже становится понятным, что первый метод вернет нам following, второй — followers. Так как методы эти по своей работе и набору параметров идентичны, то рассмотрим их на примере friends/ids — списка друзей.
Метод возвращает список ID пользователей из списка. Аутентификауия требуется только для защищенных (protected) пользователей. Что замечательно, так это то, что за раз в документе возвращается до 5000 записей, в то время как statuses/friends за раз взвращает только 100. Разница более, чем ощутима. Получить весь список можно так:
[...] Login:=Edit1.Text; Pass:=Edit2.Text; Cursor:='-1'; Memo1.Lines.Clear; while Cursor<>'0' do begin with THTTPSend.Create do begin URL := EncodeURL(AnsiToUtf8('http://'+Login+':'+Pass+ '@api.twitter.com/1/friends/ids/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='ids' then Node:=aDoc.DocumentElement.ChildNodes[i] 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 Memo1.Lines.Add(Node.ChildNodes[i].NodeValue); end; end; end; [...]
Определение значения next_cursor, в принципе, осталось «про запас», так как никогда незнаешь кто воспользуется алгоритмом (мож Обама решит массфолловинг устроить :)).
Точно также просто можно вывести весь список ID пользователей из списка followers. Ну, а после того, как списки получены, вы можете воспользоваться методом friendships/exists, используя вместо screen_name id пользователя и устраивать, что угодно — массово добавлять новых друзей, удалять тех, кто вас не «фолловит» и т.д. и т.п. Только следует помнить, что такие действия как массфолловинг и противоположное — массовый UnFollow может привести к блокировке Вашего аккаунта.
Также следует помнить, что некоторые из методом, например, тот же friendships/exists имеют ограничения на использование.
Кстати сказать, просмотреть текущий остаток запросов к Twitter API на Вашем аккаунте можно так:
Login:=Edit1.Text; Pass:=Edit2.Text; Memo1.Lines.Clear; with THTTPSend.Create do begin URL := EncodeURL(AnsiToUtf8('http://'+Login+':'+Pass+ '@api.twitter.com/1/account/rate_limit_status.xml')); if HTTPMethod('GET',URL)then begin aDoc:=NewXMLDocument(); aDoc.LoadFromStream(Document); //осталось запросов Node:=aDoc.DocumentElement.ChildNodes.FindNode('remaining-hits'); label17.Caption:=Node.Text; //доступно запросов в час Node:=aDoc.DocumentElement.ChildNodes.FindNode('hourly-limit'); label18.Caption:=Node.Text; end; end;
Если же Вам нужен остаток запросов не на аккаунте, а на Вашем IP адресе, то выполните этот же самый код, но без логина и пароля.
Нет ли у Вас идеи написать, программу для Twitter? для обновления новостей???
:) Уже написал, только для движка WordPress. В доступ пака не выкладываю, т.к. ещё надо провести тучу работы по оптимизации затрат времени и трафика, но уже опробовал в своем Твиттере — работает как часы
В плане для движка WP???
WordPress API + Twitter API = постинг новостей блога как угодно :) Могу с периодом в несколько минут постить заголовки со ссылками, могу только последнюю запись отправлять в Твиттер.. Короче здорово :)
Я не совсем понял, а зачем тут Delphi?