четверг, 14 мая 2009 г.

Yahoo.Pipes - советы, хаки, подсказки

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


Как водится, небольшое отступление. 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.

2. Не стоит поддаваться на подсказки Yahoo.Pipes при правильном обозначении субэлемента 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-файл вида Name36 не хотел обрабатываться (как вы поняли, в качестве item я хотел использовать root). Хотя и 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, потому не претендует на истину в последней инстанции.

5 комментариев:

  1. А какие задачи вы решаете с помощью "труб"? Я раньше использовал их (трубы) для создания фидов с полными текстами новостей, но со врменем перешел на rss-farm - все тоже самое, только стабильнее и удобнее (удобнее для меня, т.к. не нужно мучиться с интерфесом папсов, а просто взять и написать то, что тебе нужно).

    ОтветитьУдалить
  2. с помощью труб можно делают туеву хучу всего, всевозможные мэшапы, даже отдельные самостоятельные сервисы. А для простых вещей, действительно, можно и без труб обойтись

    ОтветитьУдалить
  3. Не подскажете, как в Yahoo Pipes вставить собственный линк (URL) в item, в дополнение к уже имеющимся данным?

    ОтветитьУдалить
  4. не понятен вопрос? куда вставить? в конец, например, description или как отдельный элемент? вместо существующего link? вообще, способов много, не понятно из вопроса, в каком виде нужно.

    ОтветитьУдалить
  5. Я новичок в Pipes, но сервис мне может быть очень интересен в сборе информации отфильтрованной.
    ВЫ бы не могли подсказать как сделать rss из этой странички?
    http://old.gazprom.ru/child/dzkrez_gptch.shtml

    ОтветитьУдалить