Как получить полный текст новости из фида, если в 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…/
В этой части я расскажу как сделать с помощью 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 9 Июня 2008

нет комментариев
проблема (3)
Комментарии участников:
Ни одного комментария пока не добавлено