Tuesday, August 5, 2008

Склейка контента в фиде при помощи Яху Пайпс

Вняв просьбам трудящихся, Тормоз в очередной раз сверкнул гранью альтруизмаи опубликовал несколько труб, в которых решена одна хитрая задача совсем нетривиальным способом. За это ему от имени всех пайпсоидов виртуальная благодарность :)

Для тех же пайпсоводов, кому сакральный смысл некоторых движений фида в пайпе не совсем понятен, как было поначалу для меня, попробую внести ясность.

Задача мной в блоге Arser'а была сформулирована в следующем виде:

В одном фиде имеются 2 items с одинаковыми title, но разными description.content, у одного "AAA", у второго "BBB". Задача получить из 2 items один, с итоговым description.content "AAABBB" или в другой произвольной комбинации.

Вот что предложил Тормоз.

Создаем две трубы: вспомогательную и основную.

SubPipe (Вспомогательная труба)
Fetch Feed
- берем источник RSS (в нашем случае в качестве items используются отдельные посты блога)
Rename
- суб-элемент, содержащий полный текст новости – в данном случае item.content:encoded - переименовываем во что-нибудь уникальное, например, trash. (Вообще, этот пункт мне кажется лишним и его можно опустить.)
- в суб-элементе description меняем содержимое, например, скопировав содержимое из суб-элемента item.pubDate
Filter
- отфильтровываем фид, пропуская только items, содержащие в item.title текст, заводимый в модуль Filter через модуль пользовательских данных Text Input
Pipe Output
- на выходе трубы получаем фид, состоящий только из 1 item
- с названием, содержащим текст из Text Input
- с замененным содержимым суб-элемента description (в нашем случае для наглядности на содержимое из item.pubDate, т.е. дату поста)
- с переименованным содержанием полного поста (на мой взгляд, лишнее движение)

Main Pipe
Fetch Feed
- берем тот же источник RSS
Loop + SubPipe
- при помощи модуля Цикла в фид Основной трубы (Main Pipe) интегрируем/переносим все содержимое SubPipe (Вспомогательной трубы). При этом в каждый item Основной трубы (Main Pipe) вставляем новый суб-элемент, например, по именем item.test, содержащий все суб-элементы соответствующего item с таким же item.title (заголовком) из SubPipe (Вспомогательной трубы)
Regex
- в основном фиде производим склейку содержимого разных суб-элементов в пределах одного и того же item, а именно в суб-элементе item.description при помощи регулярного выражения "${test.0.description}" (без кавычек) перед старым содержимым (текст поста) вставляем содержимое item.test.description (в нашем случае дата поста)

Как можно использовать полученные знания для автоматизации некоторых процессов, надеюсь, объяснять не нужно. :)

С вами был,
© Seonewbie aka Одесский бомж

2 comments:

forex color said...

а кто не понял ? для чего это нужно ?

т.е. берем описание + полный текст поста и склеиваем в одно ?

а если описание - часто так бывает что берется просто первый абзац, то уже не подойдет такая труба ?

Seonewbie said...

Что с чем склеивать - это уже дело вкуса. Главное, что найден сам механизм склейки.

Это может быть и выдача Гугл Ньюз. Короткие сниппеты, скажем 5 штук за раз, объединяются в один пост. Лишние ссылки и теги вырезаются регексами, все приводится в красивый вид. И уникальный пост готов:)

Ну или если скажем, какой-то источник статью разбивает на разные страницы, все это также можно склеить при помощи Яху Пайпс.

В общем, проявляем фантазию и стараемся не мусорить в инете :)