Жертва Taobao

Не ходите туда… ибо обратного пути уже нет…

Записи из рубрики: RSS

Вопросы и ответы о Yahoo Pipes :-)

3rd Май 2008. Рубрики: , , . 5 коммент..

Итак … в продолжение темы … судя по вопросам на форуме не всем понятно как поместить какой-либо модуль в модуль Loop…

Показываю на примере помещения модуля Fetch Page в  модуль Loop:

1. Сначала добавляем в наш pipe модуль Loop обычным так сказать способом (нажимая плюсик на иконке с названием модуля в списке доступных модулей):

2. Дальше просто перетягиваем модуль Fetch Page из списка доступных модулей в центральную область модуля Loop:

3. Заметьте — именно перетягиваем, а не нажимаем плюсик  на иконке с названием модуля Fetch Page в списке доступных модулей!!! Тогда всё получится ;-)

Мой блог находят по следующим фразам:

presto pvr
полный текст rss описание
page parse yahoo pipe
капча wordstat
wordpress security scan Вы не имеете достаточно прав
лучшая тв карта

Часть 2: Пример использования Yahoo Pipes или Как получить полный текст новости из фида, если в RSS-ленту отдается не полная статья…

4th Март 2008. Рубрики: , , , . 11 коммент..

  В связи с тем что предыдущая статья о использовании Yahoo Pipes вызвала некоторый интерес и вопросы у общественности решил написать вторую часть…

  В этой части я расскажу как сделать с помощью тоже самое что и в прошлой, т.е. получить полный текст новости из фида, если в -ленту отдается не полная статья, только несколько иным способом.

  Тем кто не читал предыдущую статью  лучше сначала почитать её.

  Для примера возьму тот же rss-фид с анонсами новостей на Allboxing.ru.

  Сама разработанная мной труба (pipe) представлена ниже:

Pipe2

  Итак, главное отличие этой трубы от трубы показанной в первой части заключается в том что в первой части мы из исходного rss-фида брали только содержимое item`а link и формировали содержимое конечного фида полностью вручную (создавали в чистом фиде 2 item`а: title (заголовок) и description (описание)), а здесь мы не будем сами формировать содержимое фида а возьмем за основу имеющийся фид со всеми имеющимися в нем item`ами и будем только лишь заменять в нем содержимое item`а description (будем записывать в него вместо анонса полный текст новости), не трогая содержимое других item`ов.

  Здесь также следует сделать отступление и сказать что теперь так как мы берем исходный фид за основу полностью то в отличие от первой части для нас становиться важным то что Yahoo Pipes не дружит со многими русскоязычными фидами имеющими кодировку отличную от utf-8, поэтому исходный фид мы сначала конвертируем в понятную Yahoo Pipes кодировку. Делается это просто… подробно описано как мной здесь

  В первой части поскольку в модуле Loop была выбрана опция “emit all results” то на выходе модуля создавался полностью новый фид содержащий только лишь item content в который выдавался результат работы модуля Fetch Page. Теперь же мы поступаем по другому и в модуле Loop выбираем опцию “assign first results to item.description”. Таким образом, содержимое фида не перезаписывается а результат работы модуля Fetch Page (то есть полное содержимое новости выдранное из страницы по ссылке указанной в item`е link) дописывается в подмодуль content item`а description. На выходе модуля Loop имеем:

Loop

 Причем, заметьте что результат выдается именно в подмодуль item`а description а не в сам item description несмотря на то что в опциях модуля Loop указан вывод в item description. Поэтому после модуля Loop применяем модуль Rename чтобы переписать содержимое подмодуля content item`а description непосредственно в сам item description (в опциях модуля вводим: “item.description.content” rename “description”). На выходе получаем:

Rename

  Дальше опять идет модуль Regex только в этот раз в нем будет меньше правил чем в первой части поскольку теперь нет необходимости выполнять какие-либо манипуляции с содержимым  item`а title поскольку он берется из исходного фида и уже итак не содержит ничего лишнего. Нам нужно только сделать так, чтобы item description содержал только текст новости без заголовка. Для операции “очистка” задаем в модуле Regex те же два правила что и в первой части:

  •  заменить в item`е description:  “^<h3 class=”title”>[^<]*</h3>” на – “пустой текст”; этим правилом я просто затираю содержимое item`а description, находящееся в нем между “<h3 class=”title”>” и “</h3>”, то есть убираю из него заголовок новости, который в описании новости мне не нужен…
  •  заменить в item`е description: “</p>.*$” на “</p><div align=”right”><small>Источник-<a href = ‘http://allboxing.ru’>Allboxing.ru</a> </small></div>”; этим правилом я подписываю внизу каждой новости ссылку на её источник…

   Кроме того, в модуле Regex для каждого правила у меня выставлены чекбоксы “s” и “i”. 

   На выходе Regex после очистки item`а description получаем:

Regex

…то есть получаем то что хотели – item description содержит полный текст новости без заголовка и ссылку на главную страницу первоисточника…

(далее…)

Решение проблемы русскоязычных кодировок rss-фидов при работе с ними в Yahoo Pipes

4th Март 2008. Рубрики: , , , . 1 комментарий.

  Не секрет, что многие русскоязычные новостные ленты транслируются в кодировках отличных от utf-8 в связи с чем с их содержимым невозможно напрямую работать с помощью  поскольку мы будем видеть в содержимом фида на выходе только сплошные крякозябры…

  Однако решение этой проблемы довольно просто и было приведено в статье Arser`а «Дело — труба», где он выложил нужный для решения проблемы скрипт. Я же хочу здесь остановится подробнее на том как его использовать поскольку возможно не всем будет понятно как же им воспользоваться… Я не особо знаю html и php совершенно не знаю поэтому мне например не сразу стало ясно как же им воспользоваться…

  Для того чтобы им воспользоваться нужно закинуть содержимое архива (файл скрипта 2utf8.php) на php-сервер (на ваш хостинг с поддержкой php). После этого уже можно конвертировать с помощью этого скрипта -фиды в понятную Yahoo Pipes кодировку передавая скрипту в параметре “url” адрес нужного фида. Это делается следующим образом: например нужно получить содержимое -фида http://kitya.livejournal.com/data/rss через модуль Fetch Feed для работы с ним.. тогда модуле Fetch Feed в строке Url вместо http://kitya.livejournal.com/data/rss пишем http://ваш_домен/rss2utf8.php?url=http://kitya.livejournal.com/data/rss, если вы закинули скрипт в корневую папку public_html на вашем хостинге.

(далее…)

Пример использования Yahoo Pipes или Как получить полный текст новости из фида, если в RSS-ленту отдается не полная статья…

19th Январь 2008. Рубрики: , , , . 9 коммент..

Когда я захотел сделать блог в который бы статьи добавлялись автоматически из выбранных мной новостных источников возникла проблема… все -фиды по тематике моего блога отдавали статьи в -ленту не полностью, а лишь анонсами… в то время как мне необходимы были полные тексты этих статей для размещения их на моем блоге……

В поисках способов автоматизированного получения полных текстов этих статей я потратил довольно много времени… многие писали что можно там наваять свой скрипт и т.д… но это мне не подходит поскольку я не знаю языков программирования, да и html то не знаю особо…  Однако благодаря небезызвестному многим Тормозу и его статье про применение Yahoo Pipes для робоблоггинга мне открылись широчайшие возможности Yahoo Pipes, которые позволили мне совершить задуманное…

Кратко о Yahoo Pipes:

“… – это очень интересный инструмент для работы с RSS-потоками. Это не очередной онлайн-агрегатор, но инструмент куда более изящный и сложный. Одна из основных его возможностей — создание персональных RSS-потоков при помощи различных модулей, отвечающих за получение, фильтрацию, анализ, перевод, преобразование и сортировку потоков. Результат работы Pipes можно получить в виде нового RSS-потока, или же в формате JSON…”

Увидев вышеназванную статью Тормоза я стал усиленно изучать механизм работы описанной в его статье трубы… Изучение шло непросто, пришлось еще поработать с help`ом Yahoo Pipes, только тогда механизм работы трубы стал полностью мне понятен… Но время было потрачено не зря и поняв как работает его труба я на следующий же день легко реализовал поставленную самим собой задачу, сделав для этого свой пайп, который легко выдирает из rss-фида с анонсами новостей на Allboxing.ru полные тексты этих новостей…

Сама разработанная мной труба (pipe) представлена ниже:

Yahoo-pipes

Как видно на рисунке Yahoo Pipes имеет очень удобный графический интерфейс… Сама труба имеет модульную структуру, я использую только 5 модулей в своей трубе в то время как разработчики Yahoo Pipes придумали еще множество полезных модулей, которые вы можете использовать (например, перевод содержимого с одного языка на другой, сортировка элементов выходного фида по дате, различная фильтрация с целью убрать из фида, получаемого на выходе, ненужные вам элементы или выбрать только элементы посвещенные определенной тематике).

Чтобы получить короткую справку по любому из элементов и ссылку на пример нужно нажать на знак “?” в заголовке любого модуля.

Внизу есть Debugger в котором можно просмотреть что у вас получается на выходе каждого используемого вами модуля…

Итак рассмотрим работу трубы по порядку:

1. Fetch Feed.

Этот модуль позволяет получить содержимое выбранных фидов (у меня выбран один фид но можно вбить столько сколько нужно)… На выходе модуля имеем содержание нужного фида представленное в виде отделных item`ов: link, description и т.д. с каждым из которых можно затем работать… Как видно на рисунке, Yahoo Pipes не понимает кодировки выбранного мной русскоязычного фида, однако для меня это не важно поскольку из всего фида мне нужен только item link который содержит ссылку на страницу, содержащую полную версию искомой новости…

Yahoo-pipes-fetchfeed

2. Loop + Fetch Page.

Модуль Loop с помещенным в него модулем Fetch Page вытаскивает страницы с полными новостями по ссылкам содержащимся в item`е link исходного фида. Модуль Fetch Page появился совсем недавно, именно с его появлением стало возможно быстро решать задачи парсинга страниц. Раньше для этого приходилось использовать сторонние сервисы вроде Feedity или собственные скрипты. Модуль позволяет получить содержимое любой странички, вырезать из неё лишнее, да ещё и разделить на отдельные элементы. Я вырезаю из страниц нужное мне содержимое начинающееся с “<h3 class=»title»>”  и заканчивающееся на “<div align=»right»>”, где содержится непосредственно сам текст новости и её заголовок. На выходе этого модуля имеем:

Yahoo-pipes-loop

Вообще модуль Loop циклически перебирает каждый item rss-фида, применяя к его элементам какие-то модификаторы или производя определенные действия с данными. Внутри Loop вы можете размещать модификаторы строк или элементы из раздела Sources, для этого необходимо перетащить модуль непосредственно на Loop блок. При этом опция «emit result» – перезапишет заново все содержимое rss-ленты, а «assign results to» – направит вывод результатов в какой-то из item`ов, и не повлияет на существующие данные.

3. Rename — модуль переименования и копирования.

Чтобы на выходе получить RSS-фид нужно, чтобы он имел хотя бы 2 item`а: title (заголовок) и description (описание)… для их создания я и использую этот модуль копируя содержимое item`а content, полученного на выходе модуля Fetch Page, в item title, а затем переименовывая item content в item description… На выходе получаем фид с двумя item`ами, что нам и было нужно:

Yahoo-pipes-rename

4. Regex.

На выходе Rename мы получили фид с двумя item`ами, которые  имеют абсолютно одинаковое содержимое, которое раньше являлось содержимым item`а content и включает как полный текст новости так и заголовок новости… Дальше нам нужно сделать так, чтобы item title содержал только заголовок новости, а item description содержал только текст новости без заголовка…  Вот тут мы и воспользуемся модулем Regex, который позволяет оперируя регулярными выражениями легко вычистить содержимое item`ов, оставив в них только нужный нам текст. Для операции “очистка” я задал в модуле Regex три правила:

  • заменить в item`е title:  “^<h3 class=»title»>([^<]*).*” на “$1”, где “$1” – это как раз то, что находится в первом выражении в круглых скобках; этим правилом я заменяю всё содержимое item`а title на то, что находиться в нем между “<h3 class=»title»>” и “<”, после чего в нем остается только текст заголовка новости, чего собственно мы и добивались…

  • заменить в item`е description:  “^<h3 class=»title»>[^<]*</h3>” на – “пустой текст”; этим правилом я просто затираю содержимое item`а description, находящееся в нем между “<h3 class=»title»>” и «</h3>”, то есть убираю из него заголовок новости, который в описании новости мне не нужен…

  • заменить в item`е description: “</p>.*$” на “</p><div align=»right»><small>Источник-<a href = ‘http://allboxing.ru’>Allboxing.ru</a> </small></div>”; этим правилом я подписываю внизу каждой новости ссылку на её источник…

Кроме того, в модуле Regex для каждого правила у меня выставлены чекбоксы “s” и “i”. При необходимости могут быть выставлены чекбоксы “g”, “i”, “s”, “m” – это т. н. модификаторы:

  • “g” – если не выставлен этот чекбокс, то замена происходит только в одном (первом) вхождении (например, если вы хотите заменить в слове “мамашка” буквы “м” на буквы “к” и не поставите чекбокс, то заменится только первая буква и получится “камашка”, а вот с выставленным чекбоксом вы получите как раз то чего и ожидали

  • “i” – если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра

  • “s” – если данный модификатор используется, метасимвол «точка» в шаблоне соответствует всем символам, включая перевод строк; без него — всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl.

Подробнее о модификаторах здесь.

Подробнее о регулярных выражениях здесь и здесь.

Итак на выходе после очистки item`ов получаем:

yahoo-pipes-regex

…то есть получаем то что хотели – item title содержит только заголовок новости, а item description только текст новости без заголовка и ссылку на главную страницу первоисточника…

(далее…)

Страницы: 1 2