Живой журнал (ЖЖ), Яндекс и Yahoo Pipes

06.01.2008

Тормоз иногда бывает очень быстрым, особенно если делает что-то нескучное. Вот сегодня ради эксперимента минут за 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. Удачи!

Комментарии

  1. # ТормозПроверка. Говорят, комменты не работают...
  2. # Анонимный: Всё работает.
  3. # TexАй красавчик!.. =)

    Надо бороться со своей консервативностью и поизучать трубы...
  4. # Анонимный: На втором шаге что в поле replace написано?
  5. # ТормозОткрой трубу и посмотри сам.
  6. # InnovationNewsА как бороться с тем что в ленте много сообщений, и они каждый раз все выбираются. Часто дергать и постить последнее?
  7. # Бомж без колесА зачем ты такие полезняшки выкладываешь то?.. Не думал о том, чтобы самому заюзать?
  8. # DelpherДобавил в закладки
  9. # MACloverшайтан! :)
    другие пиписьками меряются. а человек дело рассказывает и показывает.
    спасибо.
  10. # Бомжик с ТаллиннаОчень хороший и Важный материал. Только Хотел достать словарик и посмотреть, что означает каждое слово, а здесь - разжевали. Ура!
    Трубы - это Вещь. Их можно Клонировать. Правильно, что Картинкой дал - пусть помучаются, в т.ч. и я, создавая подобное (по рисунку :)) - хоть опыта добавится.
    Изучение Труб Яху нужно делать не только для изготовления РобоБлогов: в жизни Вэбмастера пригодится.
    Спасибо за очередной пример и образец. Будем изучать
  11. # Ыфырф: Полезная труба. Интересная
    А подскажите плиз хороший учебник по регулярным выражениям.
  12. # Тормозhttp://www.pcre.ru/
  13. # Andrey TroyБлин, даже я всё понял :) Автора - на Пулитцеровскую премию.
  14. # Р_Джинсto Бомжик с Таллинна
    Ну он вообще-то не тока картинку выдал но и ссылку на саму трубу дал, где её можно вьюсорсить и копировать себе для дальнейших надругательств
  15. # Бомжик с Таллиннаto Р_Джинс

    На радостях не дочитал статью до конца... :)
    Хотя, может, действительно, давать не надо было. Зашёл, посмотрел, клонировал...
    Всё равно надо разбираться, чтобы Понимать. И это - интересно
  16. # r00t-aka-spinЯ в своё время делал сплоги следующим образом: тянул из Яндекс.Блогов тексты прямо не отходя от кассы, там есть такая опция: "Показать текст", и можно без всяких прокси драть оттуда готовый текст одним регексом.
  17. # Dan RastorЧитать ленту друзей ЖЖ посредством RSS: http://pipes.yahoo.com/danrastor/ljfriendfeed
  18. # alexf.nameFetch Page это очень крутая штука. По идее с её помощью теперь можно любые парсеры на пайпсах писать. Непонятно только как яхо отнесётся если там запросы в сущетсвенных количествах пойдут.
    P.S. На блоге куда популярные записи собираются лушче бы среднюю колонку пошире сделать.
  19. # murich: Эм. А на выходе из трубы мы получаем линки на сообщения и короткие дискрипшены. А как же в робоблоге поялвляются полные статьи? Ведь дизайны у жжшных блогов разные могут быть- всех одним регэкспом не отпарсишь...
  20. # sam: я немного не понял зачем был сплит и юнион если и на юнионе и на фетче вывод совпадает?
  21. # sam: cам все понял :)
  22. # ДиванСпасибо за трубу, было познавательно!!
  23. # Анонимный: Проверка комментов...

    http://lyssak.com
  24. # arch14спасибо за статью про трубу! лично для меня очень позноватлеьно как начинающему
  25. # 5knig,ruПрикинул тут масштабы, это же жесть какая нагрузка на сервак будет. Если свежаком базу забивать...

    Надо хостинг вменяемый под это дело искать. Автору - зачот!
  26. # Serg: 

    Поясните мне, дубовому, это уже не работает?
    по данному линку: No pipe results for Популярные записи (ЖЖ).

    И чтобы сорцы посмотреть нада региться на YP?

    И эта… хорошо бы если бы в коментах даты были.

  27. # Тормоз: 

    Serg, либо Яндекс сменил формат страницы, либо в YP изменились какие-то модули. Давно дело было. Регистрироваться в Yahoo нужно, вроде.

    Даты в комментах есть, наведи курсор на #.

  28. # Serg: 

    Оперативный, Тормоз ;) не ожидал такого скорого ответа.

    Да я собсно чё в сорцах хотел. Регеспы глянуть (не силён я в них).
    Но понимаю, что за давностью лет это уж наверное и не вспомнить.

    А за за статью, сеньк. Давно хотел посмотреть на трубы, но всё как-то руки не доходили.
    А тут очередной раз на твой блог наткнулся (кстати с блога arser-а).

    МАЛАДЕС, Тормоз. ;)

  29. # Тормоз: 

    Спасибо :) А по регуляркам много инфы в сети, даже полезные таблички и конструкторы есть. Это не проблема. По Yahoo Pipes рекомендую обратить внимание на подборку лучшего.

  30. # avk02: 

    20/12/2012 – труба не работает.

  31. # Тормоз

    Она давно не работает.

Комментирование этой статьи закрыто.

Интересное Покупки ТехникаРазное Отдых Статьи Строительство Услуги Общество Хобби Культура Советы Уют