Просмотров: 6071

Yahoo! Pipes: наше дело – труба. Пример 2


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

«Пример второй: про фотографа, большого любителя почитать е-книжки»

Итак, продолжим наш очень краткий курс обучения базовым возможностям Yahoo! Pipes. Вчера мы рассмотрели наш первый пример по переводу произвольно выбранной rss-ленты на произвольный язык для её ретрансляции уже в требуемом языке (конечно, при этом с некоторыми неизбежными потерями в качестве, т. к. современные электронные переводчики ещё не достигли своего пика совершенства). Сегодня же мы создадим ещё один похожий пайп, и, на что очень надеюсь, он будет также практически востребованный в нашей реальной жизни. Мы покажем технику фильтрования ваших rss-лент из множественных источников и, чтобы не терять время, сразу переходим к нашей учебной ситуации.

Постановка задачи: давайте предположим, что мы имеем дело с фанатичным фотолюбителем, который мониторит по rss огромное количество онлайновых библиотек электронных книг, дабы не пропустить из вновь приходящих туда книг ничего, связанного с его любимым фотоделом. Конечно, пользуясь подготовленным нами сегодня примером, в реальной жизни вы сможете запросто изменить тематику мониторинга большего количества rss-лент на любую другую, интересную именно вам, здесь же мы будем учить просто общим принципам этой техники, поэтому конкретная выбранная тематика примера не играет никакой значимой роли.

Результат. Что же мы получаем в итоге? Если таких библиотек будет 100, то наш фотограф неизбежно столкнется с дефицитом времени, которое ему будет необходимо для внимательного просмотра такого количества обновлений (если в среднем каждая крупная библиотека пополняется в сутки на 150 книг, то легко подсчитать, что в сутки ему придется внимательно просеивать около 1500 книг, большинство из которых, кстати, будут дублировать друг друга). Создав и запустив наш фильтр, мы будем получать на выходе только те книги, в описании которых содержатся упоминания заданных нами ключевых слов, в данном конкретном случае — фотографических терминов. Так, торжество научно-технического прогресса зримо облегчит нам жизнь и сэкономит столь драгоценное время, но хватит хвалебных слов, переходим к конструированию пайпа для выше обозначенной нами задачи.

Итак, для начала определимся с входящими потоками rss-лент. Для этого я произвольно выберу несколько rss-трансляций из некоторых популярных онлайновых библиотек, вот они:

http://mirknig.com/engine/rss.php
http://avaxhome.ws/ebooks/rss.xml
http://www.freshwap.com/ebooks/rss.xml
http://netzor.org/books/rss.xml
http://www.infanata.com/rss.xml

Итак, уверенно заходим в свой аккаунт на уже привычный нам адрес и смело жмем кнопку Create Pipe — мы приступаем к созданию нового пайпа. Теперь на ещё чистое рабочее поле перетаскиваем уже знакомый нам по прошлому примеру модуль Fetch Feed, предназначенный, напомню, для задания входящих потоков в формате rss. Делаем его пять копий — по одной для каждой ленты, после чего последовательно заполняем их искомыми вышеприведенными адресами наших rss-лент. Кстати, в качестве попутного знакомства с другими удобными операторами хочется добавить, что, если бы мы не знали точного URL всех указанных пяти лент, в качестве альтернативы для элемента Fetch Feed можно было воспользоваться Feed Auto-Discovery, который по смыслу полностью аналогичен Fetch Feed, за одним исключением — он сам автоматически детектирует URL фида на указанном ему сайте, поэтому добавлять туда можно просто адреса понравившихся вам сайтов, rss-ленты новостей которых вы собрались парсить.

После чего сливаем все пять лент в одну, для чего воспользуемся модулем Union (в группе Operators). Для этого втягиваем все пять трубопроводов из пяти источников в верхнюю часть элемента Union.

Все это была лишь подготовительная часть, а теперь переходим к ключевому этапу — фильтрации контента. Для этого чуть ниже Union монтируем элемент Filter (берем его снова в группе Operators). В качестве его настройки укажем следующие параметры: в выпадающем списке выбираем Permit, т. е. режим, при котором фильтр будет пропускать только те элементы ленты, которые удовлетворяют какому-то указанному критерию. В нашем случае настроим фильтр на более мягкий режим any (эквивалент логической операции ИЛИ), который позволяет пропускать элемент при удовлетворении хотя бы одного из приведенных условий (если у вас их будет несколько). А теперь, собственно, настроим и этот самый критерий фильтрации: в качестве значения поля Rules выбираем из списка item.title, далее выбираем условие Contains (т. е. «элемент должен содержать в себе») и, наконец, справа указываем своё ключевое слово для фильтрации — «фото».

Первое условие готово. Добавим ещё два полностью подобных ему условия для проверки наличия другого любимого слова фотографов — «Фотошоп». Жмем плюсик рядом со словом Rules и последовательно добавляем: item.title, Contains, photoshop; также дублируем это же условие для русскоязычных лент: item.description, Contains, фотошоп. После этого выполняем заключительную часть для любого пайпа — воссоединяем его последний рабочий элемент трубопроводом с элементом финального вывода — Pipe Output. Ну вот и все — щелкаем по заголовку заключительного пайпа, он вспыхивает оранжевым цветом, приводя в работу весь этот адский трубопроводный механизм, и ждем пару секунд результатов работы нашего пайпа в окошке для отладки (нижняя часть экрана с заголовком Debugger: Filter).

Тут нужно, пожалуй, немного повторить сказанное уже в первом примере. Элемент rss-ленты item.title имеет отношение к заголовку rss-ленты (т. е. это заголовок поста), а элемент item.description — к содержимому каждого конкретного пункта rss-ленты (т. е. это уже текст-содержимое этого самого поста). Поэтому выбирайте объект для фильтрации, исходя из ситуации, но в любом случае следует учесть, что выбор item.description будет давать больше ложных срабатываний, хотя и будет потенциально лучше просеивать информационный поток на нужные вам ключевые слова. Конечно, стоит как следует продумать набор ключевых слов для охвата вашей целевой темы, ведь именно от этого и будет зависеть эффективность и надежность данного типа мониторинга.

Если же что-то непонятно с настройками самих модулей Yahoo! Pipes, не стоит сразу сдаваться, нужно не забывать о достаточно подробной официальной документации на них, которую можно найти по этому адресу. На русском языке неплохую документацию по модулям и операторам Yahoo! Pipes можно найти здесь.

Возвращаясь же к нашему примеру — в итоге вы должны получить вот такой вот пайп (см. рис. ниже): внимательно просмотрите его и проанализируйте его устройство. Как всегда, я опубликовал этот пример для публичного доступа, поэтому взглянуть на его код воочию вы можете по этому адресу. Результирующий фид доступен для подписки по этому адресу.

Второй пример пайпа-фильтра: TestPipe2-FotoBooksFilter

Немного статистики: на момент сохранения этого примера в совокупной трансляции этих 5 фидов было описание около 350 свежих книг, в результате работы этого фильтра мы имеем возможность всегда видеть только фиды, которые жестко обозначены нашей тематикой мониторинга (в нашем случае было выделено всего 4 книги по тематике фотодела).

Если учесть, например, мою реальную ситуацию, когда я подписан на более чем 600 фидов со всего мира, то Yahoo! Pipes позволяет запросто и в короткое время контролировать всю лавину этой информации, умышленно сужая весь этот грандиозный информационный шум до узких тематик, которые интересны лично мне, предоставляя на выходе приемлемые по количеству и отсортированные по моим интересам трансляции. При этом некоторые мои пайпы достигают более 60 модулей и представляют собой довольно сложные логические конструкции, которые я строил и отлаживал не одну неделю. Утверждаю одно: несмотря на масштабность ваших амбиций и сложность итогового пайпа, он, будучи хорошо спроектирован, тщательно продуман, отлажен и сохранен — будет служить вам вечно, — отныне вы сможете читать только то, что действительно вам интересно.

Дорабатываем второй пример: от теории к реальной жизни

Возвращаясь к нашему второму примеру — нужно признать, что, хотя он замечательно работает, он все же недостаточно совершенен, и это станет особенно заметно в реальной жизни на большом количестве входящих фидов, поэтому усовершенствуем его, не теряя времени.

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

Во-первых, при большом количестве фидов вы увидите, что некоторые новости будут дублироваться, по несколько раз встречаясь в разных фидах, и, будучи успешно пропущены нашим правилом Permit по наличию ключевого слова, будут дублироваться и мусолить глаза в результирующей ленте. Для их удаления и уникализации выдачи по заголовку (item.title) воспользуемся модулем Unique (группа Operators). Далее после этого хорошо бы отсортировать результирующий фид строго по дате публикации, чтобы видеть все поступления новых книг всегда в строго хронологическом порядке. Для этого добавляем модуль Sort (группа Operators) и настраиваем в нем сортировку по дате публикации (item.pubDate) новости фида.

Но и этого мало, продолжим совершенствование нашего самопального трубопроводного новостного агрегата.

Предположим, что из всего обилия фидов, которые приходят к нашему гипотетическому фотомастеру, он отдельно хотел бы выделить некоторые. Например, все, где хоть как-то упоминается его любимый фотоаппарат Canon EOS 600D. Для этого можно подсветить, подчеркнуть или как-то другим способом выделить эту подстроку в получаемых фидах. Из всех вышеназванных способов я покажу самый простой способ выделения: как можно выделить лидирующими восклицательными знаками конкретный фид, где содержится упоминание столь важного для вас понятия или явления. Для этого я воспользуюсь снова составной конструкцией из циклического модуля Loop (для прохода по каждой новости в ленте) и строкового оператора String Replace (для замены требуемых подстрок).

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

Второй улучшенный пример пайпа-фильтра:
TestPipe2-FotoBooksFilter[full]

Как всегда, взглянуть непосредственно на код этого улучшенного пайпа можно здесь.

Заканчивая этот пример, хочется констатировать, что способы подобных выделений и фильтраций очень разнообразны, в зависимости от ваших вкусов и потребностей, от степени развитости культуры работы с информацией. В моем же личном случае, уже после тематической фильтрации всех фидов, я обычно дополнительно сканирую содержимое каждого фида, и, если там встречаются важные для меня понятия/темы, я просто заранее добавляю к заголовку такого фида несколько восклицательных знаков, чтобы, просматривая новости уже в своем обычном новостном агрегаторе, сложно было не заметить именно эти, помеченные для меня пайпом, новости. Тема совершенствования и конструирования конкретных пайпов — бесконечна, в последнем примере я лишь показал основы по работе с фидами, которые могут использовать даже новички в Yahoo! Pipes (для которых именно эта статья и была написана в первую очередь).

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

Как пример напомню, что почта в системе Gmail доступна по фиду с адресом mail.google.com/mail/feed/atom (после предварительной успешной авторизации вашего ящика). Поэтому, сочетая мой готовый пример-заготовку и данные своей почтовой системы, вы можете построить продвинутый фильтр своей почты и, если вам угодно, читать свежую почту в своем новостном агрегаторе. Также очень легко можно парсить поисковую выдачу по каким-то ключевым словам и словосочетаниям, а в сочетании с другой мощной технологией Yahoo! — YQL, — неограниченно парсить произвольные сайты и веб-сервисы, которые отныне становятся просто источником нужных для вас данных.

Что очень важно, если подобные финты раньше были доступны только продвинутым веб-программистам, то сейчас, посредством Yahoo! Pipes, подобные веб-приложения способен создавать любой рядовой пользователь Интернета, разве что при условии наличия у него творческой фантазии. Двадцать первый век в Интернете — это век приложений Web 2.0, индивидуальных к каждому и интерактивных к нашим изменяющимся потребностям, поэтому сегодня мы и рассмотрели один из наиболее знаменитых конструкторов из этой области, позволяющий бесплатно создавать подобные современные мини-приложения всем желающим без ограничений.

Несколько интересных фактов о Yahoo! Pipes:

  • все операции производятся только в браузере, для работы не надо ничего скачивать или настраивать;
  • это служба прекрасно работает во всех браузерах, кроме Opera;
  • всего опубликовано в качестве публичных более 200 000 пайпов;
  • на русском языке Yahoo! Pipes хорошо понимает RSS только в кодировке в UTF-8;
  • сервис активно используется как частными компаниями (например, IBM), так и государственными (например, NASA);
  • подборка наиболее интересных интеграций Yahoo! Pipes и социальных сайтов.

И хотя пока, этот цикл статей ставится как бы на паузу, обящаю вам, что вскоре мы вернемся к теме Yahoo! Pipes и его собрата YQL, и я покажу вам уже продвинутые и неочевидные примеры использования этой службы для грабинга (тут пропущено слово — чужих) сайтов, — и всё только для удобства и прикола, не корысти, ради.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru pikabu.ru blogger.com liveinternet.ru livejournal.ru google.com bobrdobr.ru yandex.ru del.icio.us

Подписка на обновления блога → через RSS, на e-mail, через Twitter
Теги: , , , , , , , ,
Эта запись опубликована: Пятница, 12 августа 2011 в рубрике Обзоры.

1 комментарий

Следите за комментариями по RSS
  1. Все никак не отвешу себе пинка научиться парсить с их помощью HTML регулярными выражениями. А то на некоторых форумах (не будем показывать пальцем) до сих пор нет нормальных RSS лент с новыми топиками.

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

(обязательно)


⇑ Наверх
⇓ Вниз