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

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

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

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

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

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



Итак, главное отличие этой трубы от трубы показанной в первой части заключается в том что в первой части мы из исходного 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 имеем:



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



Дальше опять идет модуль 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 получаем:




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


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

Оригинал статьи читать здесь — vrjj.pp.ru/chast-2-primer-ispolzovaniya-yahoo-pipes-ili-kak-poluchit-polnyj-tekst-novosti-iz-fida-esli-v-rss-lentu-otdaetsya-ne-polnaya-statya…/
Добавил vrjj vrjj 9 Июня 2008
проблема (3)
Комментарии участников:
Ни одного комментария пока не добавлено


Войдите или станьте участником, чтобы комментировать