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

Вначале сразу небольшое отступление. В моем блоге завелись пост-призрак и коммент-фантом. Уж не знаю, что и думать — с хостингом все в порядке, никаких откатов не было, но факт — последний пост про Android периодически появляется и так же периодически исчезает из блога. То же самое творится с одним комментарием к посту «Конкурс мобильных приложений на Delphi» — один день висит, потом пропадает, где-то шляется, а потом опять выплывает на страницу статьи…И, если коммент особенно не жаль, то, если вы вдруг, внезапно увидите на просторах сети мой пост «Delphi XE5: несколько полезных и не очень примеров по работе с Android«, то скажите ему, что я его очень жду, а то не хочется восстанавливаться из кэша Гугла…

Теперь, что касается заявленной темы. Про REST Client Library я рассказывал в самом начале изучения новых возможностей Delphi XE5.  В целом, довольно полезная библиотека, если надо использовать какой-нибудь REST API, в котором ответы сервера приходят в JSON (XML тоже сгодиться, но только ответ парсить придётся ручками). А недавно узнал, что Яндекс таки завершил тестирование своего нового API под названием Rich Content API, который предоставляет доступ к контентной системе Яндекса. И используется в этом API как раз JSON.  Для чего можно использовать этот API в своих приложениях? 

Rich Content API предоставляет пользователям следующую информацию:

  • аннотацию к тексту страницы (сниппет);
  • полный текст страницы;
  • список ссылок на изображения, размещенные на странице;
  • ссылка на видеоролики, размещенные на странице, с указанием продолжительности;
  • заголовок страницы;
  • URL страницы в каноническом виде (все сокращенные ссылки раскрываются).

При этом все данные содержатся, как я говорил, в JSON-объекте, который можно легко разобрать. Вот я и вспомнил одну проблемку. Когда я игрался с тогда ещё FireMonkey и собирал клиент для DelphiFeeds.ru (который теперь не работает, видимо по причине смены пароля доступа к API), то вариантов получения данных о новых статьях с сайта было два:

  1. Использовать общедоступный RSS-канал и парсить данные из него
  2. Использовать API движка сайта.

Второй вариант оказался тогда более предпочтительным по одной простой причине — лени. Дело в том, что хоть RSS и довольно прост в отношении парсинга (по сути это обычный XML), но при его разборе иногда могу возникать мелкие, но довольно досадные проблемы. Например, в тексте описания статьи могут содержаться HTML-теги типа div, p и прочие, которые особенно жить не мешают, но и радости при выводе такого текста на форму не вызывают. Каждый раз колупаться в тексте, выискивая теги, пусть даже и с использованием регулярных выражений — лень, тем более, что не всё, что обрамлено в < > html-тег. Кроме того, если идти дальше и запрашивать RSS не только с DelphiFeeds, но и с других сайтов возможна ситуация, когда один сайт выдает полный текст статьи, а второй — только анонсы, один сайт, например как мой, вставляет в RSS копирайты, а второй — нет и т.д., а хочется ведь, чтобы информация с сайтов выглядела одинаково. И вот здесь-то нам и может пригодиться обозначенный выше Rich Content API Яндекса. Достаточно вытащить из RSS ссылку на статью, отправить её в Яндекс, используя API и получить все готовое — сниппет конкретной длины, аннотацию, полный текст, ссылочки на картинки и т.д. Красота!

Попробуем реализовать небольшой пример использования RET Client Library для работы с Rich Content API. Получение ссылок из RSS я оставлю «за кадром», т.к. к API это отношения не имеет, а работу компонентов рассмотрим.

Документация к API находится на этой странице Яндекса. Чтобы воспользоваться сервисом, нам необходимо получить ключ здесь. Никакой дополнительной авторизации/аутентификации и прочих проверок нам не требуется.

Попробуем воспользоваться сервисом. Открываем Delphi XE5, создаем новый проект (например, VCL) и бросаем на форму компоненты как показано на рисунке:

RESTLib_8

 

Для компонента RESTClient1 свойство BaseURL определяем как http://rca.yandex.com.  Теперь добавляем необходимые параметры.

Открываем редактор свойства Params у RESTClient1 и добавляем в список три параметра, как показано на рисунке ниже:

RESTLib_9

Вот и все. Теперь для проверки работы можно написать вот такой обработчик OnClick кнопки:

procedure TForm2.Button1Click(Sender: TObject);
var s: string;
    Arr: TJSONArrayEnumerator;
    Img: TJSONValue;
begin
  listHref.Items.Clear;
  //устанавливаем значения параметров
  RESTClient1.Params.ParameterByName('key').Value:=edKey.Text;
  RESTClient1.Params.ParameterByName('url').Value:=edURL.Text;
  //выполняем GET
  RESTRequest1.Method:=TRestRequestMethod.rmGET;
  RESTRequest1.Execute;
  //выводим данные
  if Assigned(RESTResponse1.JSONValue) then
    begin
      if RESTResponse1.GetSimpleValue('title',s)then
        lbTitle.Caption:=s;
      if RESTResponse1.GetSimpleValue('content',s) then
        memContent.Text:=S;
      if RESTResponse1.GetSimpleValue('finalurl',s)then
        lbFinalURL.Caption:=S;
      img:=(RESTResponse1.JSONValue as TJSONObject).GetValue('img');
      if Assigned(img) then
        begin
          Arr:=(img as TJSONArray).GetEnumerator;
          while Arr.MoveNext do
             listHref.Items.Add(Arr.GetCurrent.Value);
        end;
    end;
end;

и взглянуть на результат работы:
RESTLib_10
Как видите, Яндекс вернул нам все, что обещал — название, URL целевой страницы (если в запросе использовалась короткая ссылка), описание, ссылки на картинки и т.д.

Теперь с этой информацией можно делать все, что угодно — сохранять, загружать картинки и показывать их пользователю и т.д.

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

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

Попробовал воспроизвести Ваш код — не работает почему то? Не могли бы выложить исходник примера.