Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг RSS 
:(
    Опции темы
rcdimon
Дата 4.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Гы... КОнсоль это безусловно хорошо... только работать должно в вебе под управлением апача smile
Добавлено @ 17:51
Да. В консоли действиеительно работает! Так в чем же тогда может быть дело?
PM MAIL ICQ   Вверх
sharq
Дата 4.2.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Смотри лог-апача.

Это сообщение отредактировал(а) sharq - 4.2.2006, 18:04


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
rcdimon
Дата 4.2.2006, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Удивительно... но лог апача пуст. От того что тот модуль вешается или чешается что-то еще ошибок апач не фиксирует! Но одно могу сказать точно. В памяти компа остаются незавершенные процессы перла и апача. Даже после остановки севрера
PM MAIL ICQ   Вверх
korob2001
Дата 5.2.2006, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Измени значение переменной $mirror_dir и запусти следующий код:
Код

#!/usr/bin/perl -T
use XML::Simple;
use LWP::Simple;
use Text::Iconv;
use CGI;

# Имя файла, под которым будет храниться зеркальная копия RSS
my $file = "news.rss";
# url RSS, откуда он будет сливаться, если срок годности его истёк
my $url  = "http://news.yandex.ru/Russia/index.rss";
# Время в минутах, сколько зеркальная копия будет считаться валидной
my $update = 15; # По умолчанию каждые 15 минут программа будет обновлять зеркало
# Путь к каталогу, в котором будем хранить наше зеркало
my $mirror_dir = "/home/localhost/www/rss";

my $conv = Text::Iconv->new("UTF-8","WINDOWS-1251");
my $cgi  = CGI->new();
$update *= 60;

# Подпрограмма создаёт зеркало если его не существует или обновляет его, если оно устарело
sub getRss {
    my($mirror_dir, $file, $valid_time) = @_;
    # Получаем время последней модификации файла
    my $last_update = (stat("$mirror_dir/$file"))[9];
    my $time_now    = time() - $valid_time;   
    mirror( $url, "$mirror_dir/$file" ) if(not -e "$mirror_dir/$file" or $time_now > $last_update);
    return XMLin("$mirror_dir/$file") or die "Can't open RSS: $!\n";
}

# Получаем наш RSS
my $xml = getRss( $mirror_dir, $file, $update );

# Генерируем HTML
print $cgi->header( -charset => "Windows-1251" );
print $cgi->start_html( -title => "News" );
print $cgi->start_table( { -width => 400,
                           -border => 0,
                           -cellspacing => 0,
                           -cellpadding => 5 } );

     foreach my $item ( @{$xml->{channel}{item}} ) {
             print $cgi->start_Tr( { -bgcolor => "#cccccc" } );
                  print $cgi->start_td( { -width => "100%" } );
                       print $cgi->b( { -style => "font-size: 16px" },
                                $conv->convert( $item->{title} ) );
                  print $cgi->end_td();
             print $cgi->end_Tr();
             print $cgi->start_Tr();
                  print $cgi->start_td();
                       print $cgi->span( { -style => "font-size: 12px;color: #0000cc" },
                                       "Дата публикации: " . $item->{pubDate} );

                  print $cgi->end_td();
             print $cgi->end_Tr();
             print $cgi->start_Tr();
                  print $cgi->start_td();
                       print $cgi->span( { -style => "font-size: 14px" },
                                $conv->convert( $item->{description} ) );
                       print $cgi->a( { -href => $item->{link} },
                            $cgi->span( { -style => "font-size: 14" }, "... Далее" ) );
                  print $cgi->end_td();
             print $cgi->end_Tr();
     }
print $cgi->end_table();
print $cgi->end_html();

У меня парсит.

Это сообщение отредактировал(а) korob2001 - 5.2.2006, 04:50


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 5.2.2006, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Спасибо, сегодня проверю. Вечером отпишусь как прошло
PM MAIL ICQ   Вверх
rcdimon
Дата 5.2.2006, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



У меня проблемы теперь с генерированием RSS.

пишу

Код

        $rss->add_item(
            title        => "$title",
            link        => "$link",
            pubDate        => "$date",
            description => "$desc",
                           webMaster      => "$master"    
        );


А в документе появляется

<item>
<title>1</title>
<link>http://1</link>
<description>1</description>
<pubDate>2006-02-05 23:47:25</pubDate>
</item>

То есть поля webMaster НЕТ! Вообще нет. И вообще никакие поля кроме остальных четырех не берет! А мне надо!

Даже в спецификации модуля пример без webMaster

Код

 $rss->add_item(title => "GTKeyboard 0.85",
        # creates a guid field with permaLink=true
        permaLink  => "http://freshmeat.net/news/1999/06/21/930003829.html",
                # alternately creates a guid field with permaLink=false
        # guid     => "gtkeyboard-0.85
        enclosure   => { url=>$url, type=>"application/x-bittorrent" },
        description => 'blah blah'
);


Откровенно мне это не нравится!!!!!!!

Подскажите как все же заставить его включить это поле в документ smile
PM MAIL ICQ   Вверх
sharq
Дата 8.2.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



rcdimon
Цитата(rcdimon @ 5.2.2006, 22:53 Найти цитируемый пост)


То есть поля webMaster НЕТ! Вообще нет.

может переменная $master - undef или '' или 0?


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
rcdimon
Дата 10.2.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: 1
Всего: 2



Да нет... с ней все ОК smile
PM MAIL ICQ   Вверх
nitr
Дата 10.2.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Достаточно просто написать свой парсер типа XML::RSSLite, простой, на регулярных выражениях! Но выбор технологии за вами DOM или SAX, не забывайте что RSS всего лишь xml. Я к примеру, чтобы не заморачиваться писал свой на регулярных для бота IRC. Могу помочь, если надо, в написании вашего... Своим проще манипулировать, но могут возникнуть сложности, если вы хотите более или менее динамичный код...


--------------------
PM   Вверх
sharq
Дата 1.3.2006, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Вот только недавно появился модуль на CPAN'е - XML::RSS::LibXML.
Документация здесь.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Filin
Дата 25.1.2007, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 5.10.2006

Репутация: нет
Всего: нет



Цитата(nitr @  10.2.2006,  18:38 Найти цитируемый пост)
Достаточно просто написать свой парсер типа XML::RSSLite, простой, на регулярных выражениях! Но выбор технологии за вами DOM или SAX, не забывайте что RSS всего лишь xml. Я к примеру, чтобы не заморачиваться писал свой на регулярных для бота IRC. Могу помочь, если надо, в написании вашего... Своим проще манипулировать, но могут возникнуть сложности, если вы хотите более или менее динамичный код... 

Можешь поделится своим парсером ??? smile 
PM MAIL   Вверх
godson
Дата 8.4.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Возникла проблема
парсю RSS 1.0 все ок 
начинаю парсить RSS 2.0
вываливается ошибка
Modification of non-creatable array value attempted, subscript -1 at /usr/lib/perl5/vendor_perl/5.8.8/XML/RSS.pm line 880.
парсю вот этот сайт http://kp.ua/rss.xml
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0873 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.