Подписка

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

Наши проекты

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 24 июня 2010 в 16:15.
Категории: Delphi в Web.


Что-то я в плане работы с различными API всё про Twitter до про Twitter, а между тем в Сети уже достаточно долгое время успешно функционирует такой сервис как FriendFeed. В отличие от Twitter FriendFeed имеет ряд аких приемуществ как публикация в записях картинок, mp3 и других файлов и, честно говоря, Google Buzz мне очень сильно напоминает по своим возможностям FF.
В плане работы с API FriendFeed также имеет одно очень существенное отличие и заключается оно в следующем: если разработчики Twitter всячески старается избавиться от использования Base-авторизации, то разработчики FriendFeed этого таких действий не предпринимают, НО предлагают использование этого способо авторизации более безопасно. Не скажу, что способ base-авторизации в FF также надежен, как и OAuth в Twitter, но тем не менее также исключает передачу логина и пароля пользователя в явном виде в http-запросе.

Итак, чем смотреть сериалы и придаваться всякого рода разложению, лучше запустим Delphi и реализуем небольшой модуль для работы с API FriendFeed, используя Base-авторизацию.
Для работы нам понадобится библиотека Synapse и документация по API.
Наш модуль будет реализовывать всего два метода API:

  1. Отправку сообщения в различные ленты
  2. Подписку на каналы FF

1. Подготовка к работе.

Прежде всего нам необходимо зарегистрировать наше будущее приложение в FriendFeed. Зделать это можно, перейдя по этой ссылке. Обратите внимание, что для успешной регистрации Вам необходимо указать помимо прочих сведений о приложении Группу FF для публикации пользователями отзывов о Вашем приложении.
После того, как приложение будет зарегистрировано Вам выдадут два ключа для приложения ConumerKey и ConsumerSecret, которые Вы можете использовать при OAuth-авторизации, а также в некоторых запросах при base-авторизации.
Теперь, когда приложение зарегистрировано, можно приступать к реализации модуля.

Разрабатываем модуль для FriendFeed API

Создадим класс TFriendFeed со следующими полями и свойствами:

type
    TFriendFeed = class
  private
    FRemoteKey: string;//ключ доступа к API
    FLogin: string; //логин доступа к API
    FAppID: string; //ID приложения (ConsumerKey)
    FAPIVersion: integer; //версия API
    procedure SetAuthorized(const Value: boolean);
    procedure SetLogin(const Value: string);
    procedure SetRemoteKey(const Value: string);
    procedure SetAppID(const Value: string);
    procedure SetAPIVersion(const Value: integer);
  published
    public
      constructor Create();
      property APIVersion:integer read FAPIVersion write SetAPIVersion;
      property AppID: string read FAppID write SetAppID;
      property Authorized: boolean read FAuthorized write SetAuthorized;
      property Login: string read FLogin write SetLogin;
      property RemoteKey : string read FRemoteKey write SetRemoteKey;
end;

Теперь разберемся как будем получать досуп к API.
Base-авторизации у FriendFeed организована следующим образом:
1. Пользователь переходит по URL http://friendfeed.com/remotekey и вводит на странице свой логин и пароль к аккаунту
2. FF генерирует два параметра: логин и ключ удаленного доступа к API
Полученые значения логина и ключа не имеют срока давности и могут использоваться сколь угодно долго при доступе к API, но могут быть изменены по желанию пользователя в любой момент.
Что касается получения ключей, думаю, все понятно - достаточно создать форму, содержащую компонент WebBrowser, загрузить страницу и получить от пользователя логин и ключ.
Перейдем к реализации методов API. Общий для всех методов API шаблон URL можно представить следующим образом:

http://логин:ключ@friendfeed-api.com/vверсия/метод

Поэтому задаем в модуле следующую константу:

FFURL = 'http://%s:%s@friendfeed-api.com/v%d/%s';

Методы API могут использовать GET-, POST- и PUT-запросы. Конкретно в нашем случае мы будем использовать только POST-запросы. И, чтобы избежать излишекго дублирования кода в модуле (копипаст - зло) создадим простенький метод класса TFriendFeed, который будет отправлять POST-запрос к API FF и возвращать результат ответа в виде строки.

function TFriendFeed.POSTCommand(const Operation:TffOperations; Params: TStrings): string;
var URL: string;
    Oper: string;
    i:integer;
begin
Result:='';
if Params<>nil then
  if Params.Count>0 then
    begin
      Oper:=GetEnumName(TypeInfo(TffOperations),ord(Operation));
      Delete(Oper,1,3);
      URL:=Format(FFURL,[FLogin,FRemoteKey,FAPIVersion,Oper])+'?';
      for I := 0 to Params.Count-1 do
        URL:=URL+Params[i]+'&';
      Delete(URL,length(URL),1);
      url := EncodeURL(AnsiToUtf8(URL));
      with THTTPSend.Create do
        begin
          Params.SaveToStream(Document);
          HTTPMethod('POST', url);
          Params.LoadFromStream(Document);
          Result:=Params.Text;
        end;
    end;
end;

Здесь TffOperations - это следующий тип данных:

type
    TffOperations = (ff_subscribe {метод подписки на канал},
                           ff_entry {метод отправки сообщения});

Теперь остается только набросать методы класса для реалицации API.

Отправка сообщения - метод entry

Для отпраки сообщения в ленту необходимо всего один обязательный параметр body - текст сообщения. Все остальные параметра необязательные и могут отсутствовать в запросе. Так как мы будем постить сообщения как в одну так и несколько различных лент, то для нас также будет иметь значение параметр to в котором через запятую будем указывать каналы для постинга сообщений.
Метод Entry в классе TFriendFeed реализован следующим образом:

function TFriendFeed.Entry(const aMsg: string; aTo: string): boolean;
var Params: TStringList;
    Res:string;
begin
  Params:=TStringList.Create;
  Params.Add('body='+aMsg+'&to='+aTo); //формируем параметры запроса
  Res:=POSTCommand(ff_entry,Params);//отправляем запрос
  Result:=(pos('errorCode',Res)<=0)and(Length(Res)>0);//проверяем ответ
end;

Так как сегодня мы только знакомимся с API FriendFeed, то следует сразу сказать следующее - в приведенной выше функции мы практически не проводим никакого анализа ответа сервера, а лишь констатируем факт - отправлено или нет (причем в весьма упрощенной форме). Сам ответ приходит в JSON-формате. Если же, нам необходим ответ в виде XML, то в запрос следует добавлять параметр:

format=xml

тогда можно будет обойтись без использования сторонних библиотек для работы с JSON в Delphi и пропарсить ответ стандартными средствами Delphi для работы с XML.
Приведенную Выше функцию можно использовать, например, так:

FriendFeed.Entry('Hello World','me')

Сообщение будет отправлено в вашу ленту FF. А так:

FriendFeed.Entry('Hello World','webdelphi')

сообщение будет отправлено в канал webdelphi (при этом канал должен быть общедоступным для публикации и Вы должны быть на него подписаны).

Подписка на канал - метод subscribe

Этот метод не на много сложнее предыдущего. "Сложность" заключается в том, что подписка на каналы с помощью api возможна только из зарегистрированных приложений, в связи с чем, в запросе на подписку помимо основного параметра - имени канала, должен приутствовать параметр appid, содержащий ConsumerKey приложения. На этом "сложности" заканчиваются. Реализация в Delphi может выглядеть следующим образом:

function TFriendFeed.Subscribe(const ListID: string): boolean;
var Params: TStringList;
begin
  Params:=TStringList.Create;
  Params.Add('feed='+ListID+'&appid='+AppID);
  Result:=pos('subscribed',POSTCommand(ff_subscribe,Params))>0
end;

При успешном выполнении запроса (упешной подписке) в ответ вернется строка "subscribed" - именно по ней мы и определяем успешность выполнения операции.
На сегодня все. Остается только выложить исходник модуля - вот он. В модуле содержится класс TFriendFeed, а также необходимые константы для работы с API (значения некоторых констант Вам необходимо определить самостоятельно).

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

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

WP_Cloudy

Ваш ответ

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

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

   


интернет магазин