imho.ws |
![]() |
![]() |
![]() |
# 21 | |
мод
IMHO Кодер-200(6,7,8) Регистрация: 29.03.2003
Адрес: Saint-Petersburg, Russia
Пол: Male
Сообщения: 2 734
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
А если вы выводите на PHP свои новости в формате RSS, то никаких проблем и нету - просто кто-то может себе экспортировать указанным выше способом вывод этих данных, главное чтобы отдаваемый Вами документ был валиден.
__________________
Я делаю Линукс! Присоединяйтесь к свободным людям! Связаться со мной всегда можно по джабберу: Hubbitus@jabber.ru Pahan-Hubbitus. |
|
![]() |
![]() |
# 22 |
::VIP::
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Решил я тут все-таки написать аналогичный скрипт на Perl.
Нам понадобятся два модуля: LWP::Simple - взятие содержимого файла с другого сайта XML::RSS - парсер для RSS. Если вы его ставите, то в подкаталог Perl, где лежат файлы .enc модуля необходимо скопировать соответсвующие файлы с тем же расширением из этого архива cyrillic - модуль для работы и конвертирования кириллического текста. Вот сам код: Код:
use LWP::Simple; use XML::RSS; use cyrillic; my $filr="имя_файла_для_хранения_RSS_на вашем_сайте"; my $urls="URL_RSS-ленты"; $ll=time(); @fileatr=stat($filename); $modif=$ll-$fileatr[9]; if ( !$fileatr[9] || ($modif > 3600) ) { $rsscont = get($urls); open (RSF, ">$filename"); print RSF $rsscont; close RSF; } my $rss=XML::RSS -> new; $rss -> parsefile($filename); $inews=0; my @items=@{$rss -> {items}}; foreach my $item (@items) { $aa=$item -> {'title'}; # Заносим в переменную $aa очередной заголовок $aa=cyrillic::convert( utf, win, $aa ); # Переводим из юникода $bb=$item -> {'link'}; # Заносим в переменную $bb адрес этого поста print "<br>$aa --- $bb "; # Выводим в нужном нам виде }
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы! Последний раз редактировалось Goryn; 13.07.2006 в 11:08. Причина: Проблема с кодировкой решена и я убрал из поста все лишнее, изменив сам код. |
![]() |
![]() |
# 23 |
::VIP::
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Методом неимоверных научных тыков нашел как решить проблему под Windows. Соответсвующие изменения внес в предыдущий пост. Потом попробую у хостера под Unix все опробовать - у него модули ставить надо.
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы! |
![]() |
![]() |
# 25 |
::VIP::
Регистрация: 06.03.2003
Адрес: DZ, LBP, Moscow
Пол: Male
Сообщения: 633
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Первый раз в суппорте мне сказали "ставьте модули себе"... Пришлось осваивать эту науку. В результате у меня появилось впечатление, что ActivePerl под винды при установке модуля сразу смотрит какие ему нужны и ставит и их. Потому что мне пришлось много чего ставить. Итак, полный список необходимых модулей:
LWP::Simple (как правило у хостеров стоит уже) XML::RSS + Russian encodings pack cyrillic XML::Parser Unicode::String После того, как поставил все необходимое, приведенный скрипт заработал. Теперь у меня такая проблема: в RSS дата и время поста храниться в подобном виде: Fri, 23 Jun 2006 14:18:08 +0300 Можно из этого как то просто сформировать дату и время в более удобоваримом виде? Особенно дату, чтобы месяц был по русски? Я пока просто убрал "лишнее": Код:
$cc=$item -> {'pubDate'}; $cc=~ s/^\S{4}\s//igm; $cc=~ s/:\d{2}\s\+\d*$//igm;
__________________
Меня многие спрашивают, как я живу с тремя головами... На самом деле, я триедин, как Великие Бобы! |
![]() |
![]() |
# 26 |
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
если есть Date::Manip, можно просто им распарсивать исходную строку, после чего снова собирать ее в нужный стринг. К примеру:
Код:
use Date::Manip; $string = 'Fri, 23 Jun 2006 14:18:08 +0300'; $date = ParseDate($string); print &UnixDate($date, "%b %e, %Y, %T");
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
![]() |
![]() |
# 27 |
Junior Member
Регистрация: 07.09.2005
Сообщения: 61
![]() |
Есть много скриптов которым только дай адрес они тебе сами все экспортируют и выдят как нужно... к примеру rssEcualizer, Auto Blog Builder и т.д... но их целесообразно ипользовать если нужно грабить много фидов если с одного то лучше скрипт пройтой взять.
|
![]() |