Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #110, ФЕВРАЛЬ 2008 г.

Интернет на одной странице

Степан «Step» Ильин

Хакер, номер #110, стр. 110-042-1

(step@gameland)

На что способен твой RSS-агрегатор

Багтраки, всевозможные новостные ресурсы, десятки тематических сайтов и форумов, блоги и подкасты — чего только не просмотришь за день, чтобы находиться в курсе событий. Но если использовать для этого один лишь браузер, то серьезно рискуешь провести за серфингом целый день, так ничего толком и не сделав. Есть два варианта: либо резко сократить количество посещаемых ресурсов, либо же искать способы более эффективной обработки информации. И мы за второй вариант!

Еще не так давно я сильно заморачивался в попытках облегчить себе поиск и обработку информации. Чтобы не посещать сайты впустую, я использовал утилиту Check&Get (www.activeurls.com), которая проверяла базу нужных мне сайтов и могла точно сказать, какие из них обновились, а какие - нет. Для популярных новостных ресурсов я быстро наловчился писать парсеры на Perl и получал данные в опрятном виде без лишних баннеров и мусора. А обновления на форумах можно было легко отслеживать программами вроде Web Forum Reader (www.chemtable.com).

Но времена, когда нужно было так извращаться, уже давно прошли! Сейчас почти любой ресурс, будь это обычный блог, крупный новостной портал, форум по информационной безопасности или что угодно еще, поддерживает экспорт информации, причем во вполне определенном виде. Речь идет, конечно же, о формате RSS (Really Simple Syndication) и его более продвинутом варианте - Atom. Позволю себе напомнить, что RSS — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т.п. Каждый сайт может экспортировать любые данные: новости, заголовки новостей, новые опубликованные программы, прогноз погоды и т.д. и т.п. Как правило, подобный файл создается автоматически движком ресурса и располагается на сервере, имея точно такой же URL, что и у обычной странички. Ну например: www.xakep.ru/articles/rss. Если просмотреть его обычным браузером, то можно увидеть примерно те же самые данные, что и на сайте, только специальным образом структурированные и оформленные в виде файла XML:

<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom">

<title>Example Feed</title>

<subtitle>Insert witty or insightful remark here</subtitle>

<link href="http://example.org/"/>

<updated>2003-12-13T18:30:02Z</updated>

<author>

<name>John Doe</name>

<email>johndoe@example.com</email>

</author>

<id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>

<entry>

<title>Atom-Powered Robots Run Amok</title>

<link href="http://example.org/2003/12/13/Atom03"/>

<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>

<updated>2003-12-13T18:30:02Z</updated>

<summary>Some text.</summary>

</entry>

</feed>

Для чтения RSS используются программы-агрегаторы. Они через определенные промежутки времени просматривают ленты, на которые подписался пользователь, ищут изменения и в удобном для пользователя виде выводят их на экран. Ну и что с того? А то, что ты можешь получить все новостные ленты, все форумы, все ЖЖ и прочие блоги в одном единственном месте — в твоем агрегаторе! Более того, если приспособиться к такому замечательную средству, как Yahoo Pipes (речь о нем пойдет ниже), то можно получать обновления результатов интересующих тебя поисковых запросов и данные с тех сайтов, где экспорт сам по себе не предусмотрен! Вообще вырисовывается довольно забавная картина: все знают об RSS и отлично понимают его прелести, но при этом очень многие упорно продолжают его игнорировать. Пора это исправить!

RSS-агрегаторы

Несмотря на существование просто колоссального количества RSS-агрегаторов, выполненных в виде обычных программ (ну взять хотя бы Feed Demon, RSS Crawl), я тебе все-таки настоятельно рекомендую использовать онлайн-инструменты. Почему? Во-первых, обратиться к ним можно везде и всегда, независимо от того, где ты находишься, для этого требуется лишь браузер. Во-вторых, это моментально решает проблемы синхронизации всех твоих лент. Разве приятно читать одно и то же по несколько раз дома и на работе, теряя драгоценное время? В-третьих, онлайн-сервисы никогда не удаляют полученные данные, а значит, ты сможешь вернуться к любой записи через день, месяц или даже год (причем ее давно уже может не быть на сервере-первоисточнике!). В общем, сплошные плюсы и ни одного минуса! Единственным недостатком всей этой затеи можно было бы назвать необходимость в постоянном доступе в интернет, но с появлением такой технологии, как Google Gears, отпала и она! Агрегатор Google Reader отлично чувствует себя в полностью автономном режиме, без подключения к Сети, по-прежнему работая в окне браузера! Вот с него-то мы и начнем наш мини-обзор!

Google Reader (www.google.com/reader) является одним из самых известных и функциональных онлайн-агрегаторов RSS/Atom, работающих через браузер. Вышедший в свет как продукт Google Labs (отдел экспериментальных разработок Google) в 2005 году, он уже был обречен на успех. Что там говорить, Google был бы не Google, если бы не создал почти идеальное средство для чтения информационных потоков с потрясающе удачным интерфейсом, стабильной работой, возможностью отключиться от инета и читать фиды оффлайн. Я уже не говорю о встроенном плеере подскастов, специальной версии для мобильных устройств и функции поиска по фидам, в возможностях которых не приходится сомневаться!

Яндекс.Лента (lenta.yandex.ru) - сервис, разработанный уже крупнейшим отечественным поисковиком, который также позволяет объединять RSS-потоки в одну ленту и читать их, отмечая полюбившиеся сообщения. Конек этого сервиса — простота. Здесь нет ничего лишнего: только парсинг фидов и их качественное представление в виде ленты или нескольких лент.

Netvibes (www.netvibes.com) — это уже не просто RSS-агрегатор, а персональная страничка, которую легко можно сделать стартовой в своем браузере. Сама страница состоит из набора так называемых виджетов (функциональных элементов), которые можно передвигать и размещаться как тебе угодно. Основная цель — это, конечно, чтение RSS/Atom-каналов, но помимо этого с помощью блоков-виджетов можно отображать прогноз погоды, состояние любого почтового ящика, свежие новости и т.д. и т.п.

Месим тесто с Yahoo Pipes!

Настроив в своем агрегаторе подписки, тщательно рассортировав их по категориям и снабдив тэгами, можно подумать, что все готово, но это не так. Многие ресурсы зачастую делают один единственный фид для всей информации на сайте, поэтому некоторые из подписок оказываются сильно загруженными. Чтобы прочитать новости из интересующего тебя раздела, приходится просматривать все подряд, перелопачивая массу лишней инфы. Повторяющаяся информация в различных подписках начинает сильно напрягать. А через некоторое время привычка к RSS окончательно сформируется и становится очень неприятно, когда выясняется, что какой-то нужный тебе ресурс такого экспорта не поддерживает. Вот тут-то и начинаешь задумываться о возможностях фильтрации, комбинирования разных подписок и импорта информации не только из RSS/Atom, но и из любых других ресурсов!

Самое время познакомиться с технологией mash-up (в переводе с англ. «смешивать»). Вообще говоря, это целая концепция построения веб-приложений путем комбинирования функциональности различных программных интерфейсов и источников данных. Большинство существующих решений  - это серьезные продукты и платформы, которые используют в корпоративных сетях. Однако попадаются и очень простые, но вместе с тем крайне эффективные инструменты, которые непременно надо взять на вооружение.

Одной из наиболее доступных за счет визуального интерфейса и понятных разработок является продукт от компании Yahoo – Yahoo Pipes (pipes.yahoo.com). Сами разработчики позиционируют сервис как комбинатор и агрегатор любых источников информации, но с расширенными возможностями. На деле пользователю предоставляется просто невиданный простор для действий, позволяющий ему загружать данные из самых разных источников информации, определенным образом фильтровать и перерабатывать их, получая на выходе готовый результат.

Вот тебе простой пример. Допустим, есть ряд новостных ресурсов, популярный форум и несколько подписок на дневники ЖЖ, где иногда попадаются сообщения о свежих эксплойтах. Нет никакой проблемы в том, чтобы подписаться на них в своем агрегаторе и получать десяток разных лент. А как бы было здорово не читать все подряд, а создать одну-единственную ленту, куда бы автоматически складывались сообщения, относящиеся к эксплойтам! Вот это и можно сделать с помощью Yahoo Pipes. Представь источники данных в виде резервуара с водой. Данные, которые появляются на сайтах, подобно жидкости, поступают в нашу водопроводную систему, перетекают по трубам из одной емкости в другую, где с ними могут происходить какие-то преобразования, и в конце концов смешиваются, превращаясь в единой целое. Это целое — поток свежих, актуальных данных, отделенных от всего потока информации с помощью фильтров и некоторого набора правил! Думаешь, это простая аналогия! Ни фига! С Yahoo Pipes тебе действительно придется построить водопровод, поэтому самое время поделиться с тобой нашим сантехническим опытом!

Вся работа с сервисом осуществляется через графический интерфейс. Слева располагается панель с всевозможными модулями. Ты можешь мышкой перенести на рабочую область (она находится справа) сколько угодно этих модулей, после чего соединить их «трубами» в той последовательности, в которой подразумевается обработка информации.

Предлагаю посмотреть, как это работает, на простейшем примере. Возьмем какой-нибудь иностранный feed (пусть это будут новости с популярного ресурса по безопасности — http://new.astalavistaserver.com/feed/news_headlines_en.xml), переведем все записи на русский язык и оформим в виде новой RSS-ленты, на которую можно будет подписаться в любимом агрегаторе. Нет проблем! Для того чтобы извлечь данные из RSS-потока, потребуется модуль Fetch Feed, который находится в разделе Sources. Кидаем его на рабочую область и в качестве единственного параметра указываем ссылку на RSS-ленту, которую будем обрабатывать. Таких лент может быть несколько даже в рамках одного модуля, но мы пока ограничимся одной. Тут стоит обратить внимание на нижнюю часть экрана, где располагается отладчик (Debugger). Он всегда отображает промежуточные результаты и сейчас должен показывать заголовки иностранных новостей.

Далее мы будем каждую новость переводить по очереди, то есть обрабатывать поступивший на вход XML-файл поэлементно: сначала переведем одну новость, потом вторую и так до тех пор, пока не дойдем до самого конца. Для того чтобы последовательно выполнить определенное действие над элементами фида, используется модуль Loop (раздел Operators): размещаем его на рабочей области и связываем с первым модулем «трубой». Первый его параметр For each указывает поле, над которым будет производиться действие. Для простоты мы будем переводить только названия новостей, поэтому указываем поле, которое за них отвечает, - item.y:title (надо сказать, что список доступных полей, естественно, представлен в выпадающем меню и набирать вручную ничего не надо).

Теперь важный момент: в самом модуле Loop по умолчанию никаких действий не определено, ему необходимо указать, что именно делать с каждым из элементов. Для этого ищем в разделе String модуль Translate и помещаем внутрь уже созданного модуля Loop, а заодно выбираем пункт English to Russian в качестве языка перевода. Вот почти все. Теперь связываем модуль Loop с элементом Pipe Output, который означает выход из «водопровода», и наслаждаемся результатом!

Полезные модули Yahoo Pipes

Любые пайпы можно сохранить на сайте и предоставить для просмотра любым желающим (по умолчанию так и происходит). Проще всего разобраться в работе с Yahoo Pipe именно на чужих примерах, но для того, чтобы все понять, необходимо знать предназначение основных модулей.

1. Модули из раздела Sources предназначены для получения данных из внешних источников: это может быть RSS/Atom-фид, результат работы поисковых сервисов или даже какой-нибудь конкретный сайт, не имеющий возможности экспорта информации!

  • Fetch Feed - модуль предназначен для чтения информации из указанной RSS-ленты (или лент), мы использовали его в примере. Адрес ленты можно задать вручную или же подставить в виде параметра из другого блока.
  • Fetch Page - загружает страницу, находящуюся по заданному URL, в строку-переменную, с которой далее можно делать все что угодно. Если изучить форматирование этой страницы, то легко можно вытащить из полученной строки важную информацию, используя комбинацию модулей, описанных ниже.
  • Flickr - позволяет получить заголовки и картинки по заданному ключевому слову с популярного сервиса для загрузки фотографий Flickr.com.
  • Yahoo! Search - возвращает поисковые результаты Yahoo по заданному ключевому слову в виде RSS-потока. Можно получить TITLE сайта, его URL, дату последнего обновления в индексе и некоторые другие данные.

2. Следующий раздел - User Inputs - содержит элементы, позволяющие запросить ввод данных у пользователя.

  • Text Input - чаще всего ты будешь использовать именно этот элемент, позволяющий задать строковые переменные, которые можно передавать в качестве любых параметров другим модулям. Существует также приватная версия этого модуля, скрывающая введенные данные от других участников Yahoo Pipe.

3. Operators - так называемые операторы позволяют производить над данными из RSS определенные манипуляции. Причем каждый оператор применяет свое действие для всех items фида.

  • Filter - о его назначении легко догадаться из названия: этот модуль предназначен для фильтрации данных с RSS-ленты. Условия можно наложить на любые поля: к примеру, пропускать все элементы фида, у которых в поле title есть слово exploit.
  • Loop – этот модуль циклически перебирает каждый item RSS-фида, применяя к его элементам какие-то модификаторы, то есть производя определенные действия с данными. Сам Loop информации о производимых действиях не несет, поэтому их необходимо задать, разместив внутри него модули из раздела Stings.
  • Regex - этот модуль поможет ввести регулярное выражение и применить его к любой текстовой строке!
  • Truncate – обрезает количество элементов в RSS до указанной длины.
  • Tail – делает то же самое, только с конца списка.
  • Split – разделяет RSS-данные на два одинаковых потока.
  • Union – объединяет вместе до пяти потоков.
  • Unique - удалит элементы, которые содержат дублирующую строку. Например, если ты хочешь, чтобы на выходе RSS-ленты не было элементов с одинаковым title, то можно использовать этот оператор для фильтрации дублей.

4. String - этот раздел содержит модули, позволяющие манипулировать со строками.

  • Translate – поможет перевести строки с одного языка на другой.

Конечно, это лишь основные модули, которые ты можешь использовать в Yahoo Pipes. В действительности их намного больше, но даже этого набора хватит, чтобы уже прямо сейчас взяться за создание своей собственной «трубы». Надо понимать, что Yahoo Pipes можно использовать не только для удобного чтения данных. Люди, которые занимаются SEO, давно приспособили Yahoo Pipes для полностью автономного обновления своих тематических ресурсов. Созданные ими «трубы» парсят всевозможные новостные ресурсы, блоги, отслеживают наиболее острые темы (на основе сервиса данных Google Trends) и самостоятельно заполняют сайт самым свежим и актуальным контентом, принося таким образом прибыль! Такие ресурсы называются сблоги. Не бойся экспериментировать: я уверен, что и ты быстро найдешь свое нестандартное применение этому замечательному сервису.

Альтернатива от Google

Google, естественно, тоже не остается в стороне и занимается разработкой своего сервиса Google Mashup Editor. Несмотря на то что сервис еще не был официально открыт для публичного использования, он уже сейчас работает в экспериментальном режиме и располагается по адресу editor.googlemashups.com. На сайте можно оставить заявку на тестирование, и если повезет, то и тебе удастся опробовать сервис до официального релиза. GME также предоставляет возможность создавать приложения прямо в окне браузера, но используемый подход в корне отличается от того, что мы видели в Yahoo Pipes. Вместо визуального проектирования пользователю предоставляется специальный язык программирования, на котором описываются не только правила сбора и обработки информации, но также и интерфейс, с помощью которого они будут представлены. Yahoo Pipes в этом плане сильно проигрывает, поскольку регламентирует лишь порядок обработки информации. На сайте уже сейчас можно познакомиться с примерами разработки таких приложений, чтобы понять общие принципы, используемые в этой технологии.

Tips’n’Tricks

Бывает, что при импортировании той или иной ленты в Yahoo Pipes вместо русских букв отображается абракадабра. Это происходит из-за того, что в качестве кодировки у ленты используется не Unicode, а Win-1251. Для того чтобы избавиться от этой проблемы, достаточно предварительно пропускать весь поток данных через перекодировщик (скрипт ты найдешь на диске). Лучше всего, конечно, установить его у себя на сервере, но если под рукой нет хостинга или просто банально лень, то можно обратиться к уже существующим сервисам: http://william.cswiz.org/tool/xmliconv/?ie=windows-1251&url=http://url/до/нужного/фида. Но гарантий их работы, естественно, никто не дает.

WWW

 

Содержание