Живой журнал (ЖЖ), Яндекс и Yahoo Pipes
06.01.2008 Yahoo Pipes технологии
Тормоз иногда бывает очень быстрым, особенно если делает что-то нескучное. Вот сегодня ради эксперимента минут за 15 сделал и протестировал робоблог, который собирает в себя самые популярные записи из ЖЖ по версии Яндекса. При этом мы парсим обычную html-страничку рейтинга, вытаскиваем из неё нужные ссылки, идём по этим ссылкам и тянем уже полные тексты записей.
На то, чтобы показать вам это и рассказать уйдет явно больше времени, чем ушло на создание трубы :) Итак, начинается всё с рейтинга Яндекса. Как из этой странички быстро сделать робоблог? Нам понадобится новый модуль в Yahoo Pipes, который называется Fetch Page.
Ну а остальным я объясню более детально. Давайте рассмотрим каждый модуль отдельно, двигаясь по трубе сверху вниз.
Fetch Page. Этот модуль появился совсем недавно, именно с его появлением стало возможно быстро решать задачи парсинга страниц. Раньше для этого приходилось использовать сторонние сервисы вроде Feedity или собственные скрипты. Как видите, модуль позволяет получить содержимое любой странички, вырезать из неё лишнее, да ещё и разделить на отдельные элементы.
Regex. В элементах ещё осталось полно мусора, тэги всякие, лишняя информация, которая нам не нужна. Нам нужны только ссылки на записи. С помощью всего лишь одного простого регулярного выражения мы оставляем в элементах только ссылки.
Filter. Изначально вырезка содержательной части из странички была сделана не очень точно, поэтому среди элементов попадаются лишние: пустые и содержащие не те ссылки, которые нам нужны. Отфильтровываем их таким образом, чтобы остались только ссылки на ЖЖ. Кстати, теоретически в популярные записи в рейтинге Яндекса могут попадать свободные блоги, или блоги с ЛиРу, но так как это бывает редко, я просто пренебрег этим обстоятельством. На данный момент весь рейтинг состоит только из ЖЖшников.
Rename – модуль переименования. Пусть теперь контейнер для ссылок будет называться так, как и должен – link. Всё равно пришлось бы переименовывать в дальнейшем.
Split. Разделяем поток на два ручья. Вернее, размножаем, ведь в результате получаются два совершенно идентичных потока. Это нам пригодится чуть позже для выборки популярных записей из кучи других.
Снова Regex. Ссылки на RSS в LiveJournal выглядят как username.livejournal.com/data/rss, у нас же в потоке всё пока вида username.livejournal.com/NNN.html. Снова несложным регулярным выражением отбрасываем все NNN.html и заменяем их на /data/rss, чтобы на следующем этапе получить все записи популярных сегодня блоггеров.
Loop + Fetch Feed. Модуль Loop позволяет добавить к каждому элементу дополнительное содержание, либо заменить элементы новым содержанием. Для этого нужно поместить в него любой другой модуль из группы Sources, Url, String и т.п., кроме операторов и некоторых других. В данном случае мы помещаем внутрь модуль, который вытаскивает полные фиды (каналы RSS) с блогов, по уже подготовленным нами на предыдущем шаге ссылкам. На выходе этого модуля у нас будет около 600 записей, но нам нужно всего 25 самых популярных…
Union. Объединяем два ручейка, которые теперь стали разными. В первом у нас более 600 элементов с 25 блогов, а во втором всего 25 элементов, и в каждом содержится ссылка. Что же делать дальше?
Unique. Отделяем зёрна от плевел. Модуль Unique не только отбрасывает элементы, в которых есть дубли по заданному параметру, но и считает эти дубли, оставляя для нас эту ценную информацию в служебном субэлементе y:repeatcount. Обратите внимание, соединять ручьи нужно именно в показанном порядке – сперва идёт большой поток со всеми записями, и только потом маленький со ссылками.
Filter. Благодаря предыдущему модулю определить нужные записи теперь не составляет никакого труда. Очевидно, что значение y:repeatcount у них будет равно двум, вот по этому параметру и фильтруем элементы.
Pipe Output. Вот и всё, приехали. Мы получили трубу, которая содержит полные тексты популярных записей ЖЖ из рейтинга Яндекса.
Что можно с этим делать? Ну, во-первых, это лишь пример, эксперимент, показывающий возможности Yahoo Pipes вообще и нового модуля Fetch Page, в частности. Во-вторых, трубу можно просто читать, кому интересно. Из этого можно сделать рассылку, можно сделать трансляцию в ЛиРу или сам ЖЖ. Я же просто взял RSS трубы и настроил его импорт в робоблог. Всё это делается буквально за пару минут, даже меньше. Абзац дольше писал.
Приведённый пример не единственно правильный, возможны варианты. Я вот уже вижу, как можно оптимизировать, но нафиг? :) Быстренько сделали – всё работает. Это главное.
Хотите знать больше про Yahoo Pipes? Заходите на форум, общайтесь, изучайте примеры. А ещё регулярно выкладывает хорошие заметки про трубы Arser. Удачи!
Комментарии
Комментирование этой статьи закрыто.
Надо бороться со своей консервативностью и поизучать трубы...
другие пиписьками меряются. а человек дело рассказывает и показывает.
спасибо.
Трубы - это Вещь. Их можно Клонировать. Правильно, что Картинкой дал - пусть помучаются, в т.ч. и я, создавая подобное (по рисунку :)) - хоть опыта добавится.
Изучение Труб Яху нужно делать не только для изготовления РобоБлогов: в жизни Вэбмастера пригодится.
Спасибо за очередной пример и образец. Будем изучать
А подскажите плиз хороший учебник по регулярным выражениям.
Ну он вообще-то не тока картинку выдал но и ссылку на саму трубу дал, где её можно вьюсорсить и копировать себе для дальнейших надругательств
На радостях не дочитал статью до конца... :)
Хотя, может, действительно, давать не надо было. Зашёл, посмотрел, клонировал...
Всё равно надо разбираться, чтобы Понимать. И это - интересно
P.S. На блоге куда популярные записи собираются лушче бы среднюю колонку пошире сделать.
http://lyssak.com
Надо хостинг вменяемый под это дело искать. Автору - зачот!
Поясните мне, дубовому, это уже не работает?
по данному линку: No pipe results for Популярные записи (ЖЖ).
И чтобы сорцы посмотреть нада региться на YP?
И эта… хорошо бы если бы в коментах даты были.
Serg, либо Яндекс сменил формат страницы, либо в YP изменились какие-то модули. Давно дело было. Регистрироваться в Yahoo нужно, вроде.
Даты в комментах есть, наведи курсор на #.
Оперативный, Тормоз ;) не ожидал такого скорого ответа.
Да я собсно чё в сорцах хотел. Регеспы глянуть (не силён я в них).
Но понимаю, что за давностью лет это уж наверное и не вспомнить.
А за за статью, сеньк. Давно хотел посмотреть на трубы, но всё как-то руки не доходили.
А тут очередной раз на твой блог наткнулся (кстати с блога arser-а).
МАЛАДЕС, Тормоз. ;)
Спасибо :) А по регуляркам много инфы в сети, даже полезные таблички и конструкторы есть. Это не проблема. По Yahoo Pipes рекомендую обратить внимание на подборку лучшего.
20/12/2012 – труба не работает.
Она давно не работает.