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

Сегодня рассмотрим пример того как с помощью API FriendFeed организовать отправку сообщений в группы.
Во-первых, что представляет из себя группа FriendFeed. Группа — это такой же канал, но в отличие от личного канала пользователя, в Группу сообщения могут писать все участники. На мой взгляд, возможность создания собственных групп для обсуждения интересных тем, выгодно отличает FriendFeed как от Twitter так и от Google Buzz.

Так, если Вас интересуют все, что касается, например, Delphi, то можно найти подходящую группу и участвовать в обсуждениях на конкретные темы, избавляя себя отлишнего флуда в ленте.
Кстати, пользуясь случаем, могу предложить Вам участив в нескольких группах по Delphi:
1. Delphi — группа FriendFeed в ленту которой транслируются новости из большого количества блогов (больше 50 точно).
2. Delphi Программисты — совсем новая группа (всего 2 подписчика) для общения на тему Delphi.
3. Delphi Pipe — открытая Delphi-группа с трансляцией анонсов из русскаязычных блогов по Delphi.
Но, это я отвлекся от темы. Продолжим.
При создании новой группы администратор может также ограничить доступ к записи новых сообщений или сделать эту группу приватной, поэтому, прежде, чем воспользоваться методом Entry для отправки сообщения, нам необходимо проверить доступна ли группа на запись. Зделать это можно, воспользовавшись методом API FeedInfo, который вернет нам общие сведения о фиде. Для использования метода необходимо выполнить GET-запрос и в параметрах указать id канала.
В отличие от POST-запросов, для GET’ов шаблон URL’а несколько иной:

const
  FGETURL = 'http://%s:%s@friendfeed-api.com/v%d/%s/%s'

То есть после версии API указывается метод и завершает URL id фида или другой параметр API.
Теперь доработаем немного наш класс TFriendFeed и добавим в него ещё один метод:

function TFriendFeed.GETCommand(const Operation: TffOperations;
  OutFormat: TffOutputFormat; Params: TStrings; id: string): string;
var URL: string;
    Oper: string;
    i:integer;
    Stream: TStringStream;
begin
  Result:='';
  Oper:=GetEnumName(TypeInfo(TffOperations),ord(Operation));
  Delete(Oper,1,3);
  URL:=Format(FGETURL,[FLogin,FRemoteKey,FAPIVersion,Oper,id]);
  if (Params<>nil) then
    begin
      if Params.Count>0 then
        begin
          Params.Delimiter:='&';
          URL:=URL+'?'+Params.DelimitedText+'&format='+LowerCase(GetEnumName(TypeInfo(TffOutputFormat),ord(OutFormat)));
        end;
    end
  else
    URL:=URL+'?format='+LowerCase(GetEnumName(TypeInfo(TffOutputFormat),ord(OutFormat)));
 
 with THTTPSend.Create do
   begin
     if HTTPMethod('GET', url) then
       begin
         Stream:=TStringStream.Create;
         Stream.LoadFromStream(Document);
         Result:=Stream.DataString;
       end
     else
       //обрабатываем неудачную попытку запроса
   end;
end;

Используемые параметры:
Operation: TffOperations — метод API FriendFeed.

type
    TffOperations = (ff_subscribe,ff_entry,ff_feedinfo);

OutFormat: TffOutputFormat — формат ответа сервера. XML или JSON.

type
    TffOutputFormat = (XML, JSON);

id: string — feed id, например для моего канала id будет равен «webdelphi»
Params: TStrings — все дополнительные параметры запроса (например, количество элементов entry в ответе, начальный индекс с которого читать сообщения и т.д.)

В результате выполнения метода FeedInfo нам возвращается вся информация, относящаяся к конкретному каналу, включая количество подписчиков, последние записи и т.д. В самом простом случае от нас требуется только проверить группу на «открытость», т.е. найти среди доступных команд (узлы Command в XML-документе) команду POST.

Так как нам может потребоваться для работы вся информация о канале, то имеет смысл создать ещё один класс, который будет хранить всю информацию:

type
  {все доступны команды для фида}
  TFFCommand = (TcSubscribe, TcUnsubscribe, TcPost, TcDm, TcAdmin);
TCommands = set of TFFCommand;
 
TFeed = class //класс, содержащий основную информацию о канале
  private
    FName: string;
    FCommands: TCommands;
    FFeedType: TFeedType;
    Fid: string;
    FDescription: String;
    FPrivateFeed: boolean;
    FEntrys: TEntrys;
    ...
  public
    constructor Create;overload;
    constructor Create(const XMLText: string);overload;
    property id:string read Fid write Setid;
    property Name: string read FName write SetName;
    property Description:string read FDescription write SetDescription;
    property FeedType: TFeedType read FFeedType write SetFeedType;
    property PrivateFeed: boolean read FPrivateFeed write SetPrivateFeed;
    property Commands:TCommands read FCommands write SetCommands;
    property Entrys: TEntrys read FEntrys write SetEntrys;
  end;
 
TFeedInfo = class(TFeed) //класс, содержащий всю информацию о канале, включая доступные команды
  private
    FServices: TServices;
    FSubscriptions: TSubscribers;
    FSubscribers: TSubscribers;
    FAdmins: TSubscribers;
    ...
  public
    constructor Create(const XMLText: string);
    property Admins: TSubscribers read FAdmins write SetAdmins;
    property Subscribers: TSubscribers read FSubscribers write SetSubscribers;
    property Subscriptions: TSubscribers read FSubscriptions write SetSubscriptions;
    property Services: TServices read FServices write SetServices;
  end;

Теперь используя GetCommand и класс TFeedInfo можно реализовать использование API-метода FeedInfo следующим образом:

var FeedInfo:TFeedInfo;
FeedInfo:=TFeedInfo.Create(FriendFeed.GETCommand(ff_feedinfo,OutFormat,nil,FeedId));
if TcPost in FeedInfo.Commands then
    ShowMessage('Группа открыта на запись')
else
    ShowMessage('Группа не доступна для записи')

После того, как группа проверена можно отправлять новый пост методом Entry.
Кстати, эта возможность — отправка в несколько групп, рализована в последней версии LinkCompressor. Эта версия в блоге не обсуждалась, но досупна для скачивания здесь. В окне отправки нового сообщения в FriendFeed вы можете автоматически продублировать свое сообщение в группе LinkCompressor:

А также составить свой список групп для постинга, используя настройки программы:

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
0 0 голоса
Рейтинг статьи
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
2 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
Сергей
25/07/2010 23:59

подскажите не программисту — как прикрутить (скомпилировать?) Модуль для работы с FriendFeed к программе LinkCompressor. Никогда еще не работал с исходниками на паскале.