Подписка

добавить на Яндекс

Наши проекты

Delphi+Google

Google API

Google API в Delphi - проект с открытым исходным кодом.

Chrono

Chrono

Хронометр - программа для ведения списка задач.

ODFProc

ODFProc

ODFProc - работа с документами OpenOffice в Lazarus и FreePascal.

Поддержка блога

А тут я коплю на лицензию Delphi XE на iPad =).
Сумма пожертвования не фиксирована.

Публикации

Год назад

Случайный пост

Последние

Сообщения форума

Комментарии

Социальные сети

Google

Facebook

Twitter

Опрос

Вы сейчас или в ближайшем обозримом будущем планируете разрабатывать кроссплатформенное приложение с использованием Firemonkey?



Loading ... Loading ...

Блоги и сообщества

Статьи по Delphi DelphiFeeds.ru - Все Delphi-блоги Рунета Сообщество умных людей VR-Online.RU Бесплатный журнал для программистов и всех, кто интересуется IT Статьи и уроки по Delphi Новостной блог о высоких технологиях
Система Orphus
Опубликовал Vlad 20 июля 2010 в 15:59.
Категории: Delphi в Web.


Сегодня рассмотрим пример того как с помощью 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:

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

Модуль для работы с FriendFeed, рассмотренный в данной статье доступен для скачивания здесь.

-------------------------------------------
Недавно покупал себе новый ЖК-монитор, заодно посмотрел бытовую технику, видел примерно вот такой настенный телевизор только в раза два так по-больше :). Настенные теливизоры - штука, конечно, модная и удобная, но размер тут по-моему имеет значение.
--------------------------------------------
Понравилась статья? Тогда:
Делись! Загружай! Плюсуй!
   Отправить PDF на   
Читай ещё статьи на WebDelphi.ru

Комментарии (2)

WP_Cloudy
  • Сергей пишет:

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

  • Vlad пишет:

    А чего его крутить? Он уже давно прикручен — качайте программу и работайте

Ваш ответ

Внимание: Все комментарии модерируются, и это может вызвать задержку их публикации. Отправлять комментарий заново не требуется.

Пожалуйста, заключайте исходный код в тэги [code][/code].
Если код большой, то воспользуйтесь Вставкой кода на отдельной странице и оставьте в комментарии ссылку на исходник

   


детский комод пеленальный заказать новый .