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

На сегодняшний день в Сети можно обнаружить огромное количество сервисов предлагающих услуги эффективного поиска и фолловинга новых друзей в Twitter. Предлагается поиск и фолловинг по интересам, местоположению и т.д. Как водится, большинство предложений сопровождаются небольшим прайс-листом и ограниченной функциональностью при бесплатном использовании сервиса. Не знай, как Вы, а я считаю, что подобные сервисы продают воздух. Достаточно немного поработать с Twitter API и сделать поиск друзей самому и при этом не менее эффективным, чем у сторонних ресурсов.

Можно было бы воспользоваться информацией, предложенной мной в прошлых постах про Twitter API (работа со списками following и followers) и собирать «друзей» пачками, но по-моему, такой способ малоэффективен. Конечно аккаунт наростит «пузо», но само по себе, общение в Твиттере потеряет всякий смысл, останется только использовать Twitter в целях раскрутки сайта. Более того, если переборщить с масс-фолловингом, то можно и бан аккаунта получить.
Поэтому будем искать новых друзей не быстро, НО качественно. И первый вариант поиска друзей — это поиск по сообщениям пользователя за последние семь дней.
Для этого воспользуемся методом search из раздела Search API Methods.

Метод search

Возвращает твиты (сообщения) наиболее соответствующие строке запроса. Формат возвращаемого документа либо JSON, либо ATOM. Работу с JSON в Delphi мы рассмотрим позднее, а пока попробуем получать данные в формате ATOM.
Так как мы ищем людей,с которыми можно будет в будущем общаться, то поиск будем проводить по русскоязычной аудитории Twitter. Найдем, например, пользователей, которые упоминали про Delphi:

with THTTPSend.Create do
    begin
      HTTPMethod('GET','http://search.twitter.com/search.atom?lang=ru&q=Delphi&rpp=100');
      Document.SaveToFile('search.xml');
    end;

Здесь мы получили список из 100 сообщений (параметр rpp) на русском языке (параметр lang) в которых содержится слово Delphi (параметр q). В результате на жестком диске бует сохранен файл следующего содержания:
Twitter search atom
Сотня записей — это вполне достаточно для ручного фолловинга, но, что делать, если, например, из всей сотни будущих друзей 99 упоминали Delphi вскользь, например «да ну наф эту Delphi» и т.д. Можно продолжить поиск и получить до 1500 записей. Делается это с помощью параметра page в запросе. Попробуем сохранить все 1500 записей, содержащих слово Delphi:

var i:integer;
begin
for i:=1 to 15 do
  begin
    with THTTPSend.Create do
      begin
        if HTTPMethod('GET',EncodeURL('http://search.twitter.com/search.atom?lang=ru&q=Delphi&rpp=100&page='+intTostr(i)))then
           Document.SaveToFile('search_'+IntToStr(i)+'.xml');
      end;
  end;
end;

Теперь выполните этот код и можете убедиться, что из 15 полученных документов максимум 2-3 будут содержать элементы entry с твитами, остальные — содержат только служебную информацию о фиде. В чем дело? А в том, что метод search в любом случае (при правильно сформированном запросе) возвращает статус 200 и документ, но если, например в базе данных содержится информация только по 100 твитам (не нащебетали пользователи про Delphi больше), то данные будут переданы только в первом документа. Для подтверждения этого, можете запросить, например поис по строке seo и увидите, что вернется как минимум 7-8 документов, заполненных данными о твитах. Поэтому в исходном алгоритме поиска необходимо поставить следующее ограничение:

var i:integer;
    aDoc: IXMLDocument;
    Node:IXMLNode;
begin
for i:=1 to 15 do
  begin
    with THTTPSend.Create do
      begin
        if HTTPMethod('GET',EncodeURL('http://search.twitter.com/search.atom?lang=ru&q=Delphi&rpp=100&page='+intTostr(i)))then
          begin
            aDoc:=NewXMLDocument();
            aDoc.LoadFromStream(Document);
            aDoc.Active:=true;
            if aDoc.DocumentElement.ChildNodes.FindNode('entry')=nil then
              break;
            Document.SaveToFile('search_'+IntToStr(i)+'.xml');
          end;
      end;
  end;
end;

То есть как только в запросе вернется документ без узлов «entry» цикл прервется.
Теперь нам остается получить информацию из документов и, по возможности, провести простенький анализ пользователя. Вначале достаем из результатов поиска ник пользователя и адрес к его ленте:

type
  TUsers = record
    uri:string;
    name: string;
    screen_name:string;
end;
 
var i,j:integer;
    aDoc: IXMLDocument;
    Node:IXMLNode;
    Users: TList;
    NewUser: TUsers;
begin
Users:=TList.Create;
for i:=1 to 15 do
  begin
    with THTTPSend.Create do
      begin
        if HTTPMethod('GET',EncodeURL('http://search.twitter.com/search.atom?lang=ru&q=Delphi&rpp=100&page='+intTostr(i)))then
          begin
            aDoc:=NewXMLDocument();
            aDoc.LoadFromStream(Document);
            aDoc.Active:=true;
            if aDoc.DocumentElement.ChildNodes.FindNode('entry')=nil then
              break;
            Document.SaveToFile('search_'+IntToStr(i)+'.xml');
            for j:=0 to aDoc.DocumentElement.ChildNodes.Count-1 do
              begin
                Node:=aDoc.DocumentElement.ChildNodes[j];
                if Node.NodeName='entry' then
                  begin
                    NewUser.uri:=Node.ChildNodes.FindNode('author').ChildNodes[1].NodeValue;
                    NewUser.name:=Node.ChildNodes.FindNode('author').ChildNodes[0].NodeValue;
                    Users.Add(NewUser);
                  end;
              end;
          end;
      end;
  end;
end;

Теперь, получив в свое распоряжение максимум пользователей, упоминавшим в своих твитах Delphi, можно приступать к изучению этих пользователей с использованием опять же методов Twitter API. А как это реализовать — читайте в следующих постах на WebDelphi.ru :).

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

Очень бы хотелось продолжение статей о Google Calendar.