Как водится, небольшое отступление. Yahoo.Pipes - удивительный сервис, позволяющий вытворять с rss-фидами (rss-потоками) различные полезные и интересные вещи (строго говоря, не только с rss, но и xml-, csv- данными, интернет-страницами, другими интернет-сервисами и т. д. - главное, чтобы к ним можно было обратиться через веб). Можно объединять несколько rss-каналов в один, можно, наоборот, разделить, а потом снова смешать, отсортировать различными способами, что-то добавить, что-то убавить и т. д. и т. п.
Самое главное, что реализовано это через веб-интерфейс и в визуальном виде. Иными, словами, не надо ничего, по сути, программировать и самому выдумывать. все, что требуется, это знать, какие существуют модули, как с ними обращаться и что они могут (RTFM, естественно, никто не отменял), а также сильно помогут базовые знания регулярных выражений (опять-таки, если Вы хотите делать сложные "трубы", для простых, простите за тафталогию, - всё гораздо проще ). На выходе же получите rss-поток или файл в формате json, который также доступен удаленно и постоянно обновляется.
Плюсы сервиса очевидны - как я уже сказал, программировать ничего не надо, никакие скрипты у себя хостить не надо, о кэшировании и трафике тожно можно не беспокоиться - все это на себя берут Yahoo.Pipes
За последние 2 года своего существования сервис "возмужал", появились новые удобные "фичи", и, естественно, есть также и всевозможные баги, оишбки, которые бывают плохо задокументированны (потому не сразу находится решение), либо просто заставляют лезть на стенку ("Делаю все, как в мануале, ан нет, глючит"). Возможно, это возникает от плохого прочтению мною документации, тем не менее, все равно поделюсь своими маленькими открытиями и советами. (Еще раз отмечу, что данная статья предназначена для более менее подготовленного читателя, который знаком с базовыми модулями Yahoo.Pipes).
Итак, для разминки, начнем с простого:
1. Часто требуется сослаться, например, в субэлементе description (описание) на другой субэлемент (например, link). Это происходит, когда Вы в субэлемент description хотите вставить HTML-текст (скажем, субэлемент link url картинки, а Вы хотите вставить ссылку на эту картинку и добавить небольшое к ней пояснение). Как правило, для этого используется модуль Regex, но возникает вопрос, как в строку, где мы пишет, что на что менять, вставить ссылку на другой субэлемент элемента item?
Для этого поступаем следующим образом: ставим знак $, затем фигурные скобки {}, а внутри них - название подэлемента без, обратите внимание item., т. е.
${link}, где link - название одного из существующих подэлементов элемента item.

На примере ниже мы видим, что из выпадающего списка субэлемент предлагается обозначить как item.loop:yql.status.created_at, хотя, если посмотреть в "дебаггерском окне" (Debugger внизу страницы) и раскрыть все субэлементы, то мы видим, что на самом деле субэлемент надо обозначать как item.loop:yql.0.status.created_at. Именно так и надо вручную вписывать в соответствующем модуле.


Поверьте, изначальное знание этих вещей мне бы сэкономило кучу времени, надеюсь, сэкономит и вам.
3. Замечательный модуль Yahoo.Pipes Fetch Data позволяет "засасывать в трубу" не только rss-каналы, но и любые данные в формате XML. Всего-то требуется указать путь к элементу, который впоследствии будет играть роль элемента item.
Казалось , что уж проще, однако внимательно посмотрите стурктуру XML-документа, чтобы правильно указать требуемый путь. Второй момент, указанный модуль некоректно работает, если в качестве элемента item выступает корневой элемент XML-документа.
Был у меня случай, когда xml-файл вида
На помощь пришел другой замечательный модуль Yahoo.Pipes, который и появился-то совсем недавно, называется он YQL - возможность сделать запрос с помощью Yahoo Query Language (YQL, кстати, тоже стоит отдельного разговора, но уж не сейчас). YQL напоминает язык SQL-запросов, так что тоже многим будет знаком и понятен.
Так вот, с проблемой с XML-файлом справился благодаря такому вот нехитрому запросу " select * from xml where url='http://url.com/xmlfileurl.xml' "
Все xml-элементы были выведены в отдельный субэлемент, а уж дальше я мог с ними делать все, что хотел. Данное решение также помогло бы мне не потратить зря полчаса времени.
Также я жалею, что не стал писать эту статью раньше, потому что некоторые хитрости уже были подзабыты, вот почему я планирую обновлять ее по мере поступления и нахождения новых Yahoo-хаков.
Естественно, если Вам есть что добавить, убавить, поправить - пишите в комментариях, буду только рад, да и всем будет польза.
Кое-что про пайпы на русском мужно найти у самого известного пайповеда Рунета. Ну и не забываем про первоисточник.
Disclamer: данная статья никакой литературной ценности не несет, потому возможны опечатки, описки, вкрапления "олбанского" языка. Данная статья представляет собой описание решения некоторых сложностей, с которыми я столкнулся при работе с Yahoo.Pipes, потому не претендует на истину в последней инстанции.
А какие задачи вы решаете с помощью "труб"? Я раньше использовал их (трубы) для создания фидов с полными текстами новостей, но со врменем перешел на rss-farm - все тоже самое, только стабильнее и удобнее (удобнее для меня, т.к. не нужно мучиться с интерфесом папсов, а просто взять и написать то, что тебе нужно).
ОтветитьУдалитьс помощью труб можно делают туеву хучу всего, всевозможные мэшапы, даже отдельные самостоятельные сервисы. А для простых вещей, действительно, можно и без труб обойтись
ОтветитьУдалитьНе подскажете, как в Yahoo Pipes вставить собственный линк (URL) в item, в дополнение к уже имеющимся данным?
ОтветитьУдалитьне понятен вопрос? куда вставить? в конец, например, description или как отдельный элемент? вместо существующего link? вообще, способов много, не понятно из вопроса, в каком виде нужно.
ОтветитьУдалитьЯ новичок в Pipes, но сервис мне может быть очень интересен в сборе информации отфильтрованной.
ОтветитьУдалитьВЫ бы не могли подсказать как сделать rss из этой странички?
http://old.gazprom.ru/child/dzkrez_gptch.shtml