| 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 в 12: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 и т.д... но их целесообразно ипользовать если нужно грабить много фидов если с одного то лучше скрипт пройтой взять.
|
|
|