Xpoint
   [напомнить пароль]

http коннект к 2 серверу и сбор информации.

Метки: [без меток]
[удл]
2007-04-21 00:42:22 [обр] Andrej[досье]

Помогите пожалуйста написать Perl скрипт который коннектится к второму внутреннему серверу: http://192.168.1.7:8000/7.html
На этой странички выводятся эти данные:

<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>0,1,2,20,0,48,mus</body></html>

Далее необходимо вывести число после первой, второй и пятой запятой. Помогите пожалуйста, это очень важно.

спустя 3 часа 19 минут [обр] Алексей В. Иванов(100/2861)[досье]
см. LWP
спустя 10 часов [обр] Алексей Севрюков(198/1280)[досье]

Алексей В. Иванов[досье] мы в основах, здесь принято разжевывать ответ. Ответы в стиле arto здесь мало кто понимает.

Andrej[досье] Действуем по следующему алгоритму:

  1. Используя perldoc LWP::Simple скачиваем нужную страницу и помещаем ее содержимое в переменную.
  2. С помощью регулярного выражения достаем все что находтся между <body> и </body>
  3. Используем perldoc split разбиваем строку на компоненты по знаку , и помещаем ее в массив.
  4. По индексу вытаскиваем из массива нужные Вам данные.

Это был алгоритм. Теперь встречный вопрос - что именно непонятно?

спустя 6 часов [обр] Andrej[досье]
Первая проблема с которой я столкнулся. http://192.168.1.7:8000/7.html не хочет отдавать данные Perl скрипту. Наверное необходимо страничке сказать что мы пытаемся загрузить ее через какой ни будь браузер. Как это сделать Алексей?
#!/usr/local/bin/perl
use LWP::Simple;
$file = "http://192.168.1.7:8000/7.html";
$file = get "$file";
print "Content-type: text/html\n\n";
print $file;
спустя 41 минуту [обр] Алексей Севрюков(198/1280)[досье]
Хорошо, раз уж LWP::Simple::get ошибок никаких не дает - воспользуемся модулем perldoc LWP::UserAgent:
 require LWP::UserAgent;
 
 my $ua = LWP::UserAgent->new;
 
 my $response = $ua->get('http://192.168.1.7:8000/7.html');
 
 if ($response->is_success) {
     print $response->content;
 }
 else {
     print "error: ". $response->status_line;
 }
спустя 19 минут [обр] Andrej[досье]

Не хочет. :(
Я и

*
my $ua="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
*

Вставлял, все равно не работает.
Если у вас есть время, вы можете сами попробовать. К примеру с http://live.loveradio.ru:13011/7.html У меня аналогичый сервер.

спустя 48 минут [обр] Алексей Севрюков(198/1280)[досье]

Andrej[досье] фуф, умаялся :)
Притворился браузером:

#!/usr/bin/perl


require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
my $response = $ua->get('http://live.loveradio.ru:13011/7.html');

if ($response->is_success) {
    print $response->content;
 }
  else {
    print "error: ". $response->status_line;
}

заголовки в браузер сами добавьте, я в консоле запускал, там они не нужны.

спустя 34 минуты [обр] Andrej[досье]

Спасибо огромное, я просто немного не так делал претворение.
Смотрите, я доделал скрипт, как вам?
Но есть одно но. Когда 7.html отображает только циферки все ок. А когда появляется еще текст наподобие: яяяяя - яяяяяя яяяяя. Скрипт отказывается показывать какую либо информацию.

<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>0,1,1,20,0,48,яяяяя - яяяяяя яяяяя</body></html>

Вот мой скрипт:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
require LWP::UserAgent;

my $ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
my $response = $ua->get('http://live.loveradio.ru:13011/7.html');

if ($response->is_success) {
$response->content =~ m{<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>([\d,]+)</body></html>};
my @temp=split(/\,/,$1);
print "$temp[1] fgfd df $temp[2]";
 }
  else {
   print "error: ". $response->status_line;
}
спустя 21 минуту [обр] Dennis F. Latypoff aka funky_dennis(24/78)[досье]
-$response->content =~ m{<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>([\d,]+)</body></html>};
+$response->content =~ m{<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>([\d,]+).*?</body></html>};
спустя 1 час 46 минут [обр] Andrej[досье]
Несовсем то, хочется бы текст (яяяяя - яяяяяя яяяяя) тоже запихнуть $temp.
спустя 2 часа 48 минут [обр] Andrej[досье]

Сейчас попробовал запустить этот скрипт на Linux а он пишет вот такую бяку:

Software error:
Can't locate LWP/UserAgent.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.7 /usr/local/share/perl/5.8.7 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /www/cgi-bin/rdo.pl line 5.
For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. 
[Sun Apr 22 03:01:19 2007] radio.pl: Can't locate LWP/UserAgent.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.7 /usr/local/share/perl/5.8.7 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /www/cgi-bin/rdo.pl line 5

Насколько я понял он просит LWP/UserAgent.pm который наверное не установке.
Покопавшись в Интернете нашел вот это http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP/UserAgent.pm
Но там такое огромное количество файлов что я просто побоялся их ставить. Расскажите пожалуйста как установить pm файлик?

спустя 4 часа 57 минут [обр] Dennis F. Latypoff aka funky_dennis(24/78)[досье]
Несовсем то, хочется бы текст (яяяяя - яяяяяя яяяяя) тоже запихнуть $temp.
-$response->content =~ m{<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>([\d,]+)</body></html>};
+$response->content =~ m{<HTML><meta http-equiv="Pragma" content="no-cache"></head><body>(.*?)</body></html>};
Но там такое огромное количество файлов что я просто побоялся их ставить

Ставить их придется в любом случае, потому что UserAgent.pm подключает их при компиляции, так что качайте
http://search.cpan.org/CPAN/au....../GAAS/libwww-perl-5.805.tar.gz
потом выполните следующие команды:

$ su - root
# tar zxf libwww-perl-5.805.tar.gz
# cd libwww-perl-5.805
# perl Makefile.PL
# make && make install

Возможно, нужно будет установить модули URI, HTML::Parser, HTML::Tagset, Mime::Base64, Net::FTP, Digest::MD5

спустя 3 часа 27 минут [обр] Алексей Севрюков(198/1280)[досье]

Andrej[досье]
И все-таки не стоит наверно целиком все содержимое прописывать в regexp, помоему достаточно:

$response->content =~ m{<body>(.*?)</body>};

а так в принципе нормальный скрипт :-) Пользуйте на здоровье.

P.S. Обсуждение установки модулей я перенес бы в другую тему.

спустя 40 минут [обр] Andrej[досье]
А есть какая-то возможность скачать сразу полностью все моды? Устанавливая все по очереди это что-то ужасное. Я так и не установил все до конца. Устанавливая одно он просит установить другое, устанавливая другое он просит третье, и так бесконечно. :(
спустя 50 минут [обр] Andrej[досье]
Алексей, спасибо. Дальнейшее обсуждение перенесено сюда Установка UserAgent.pm
Powered by POEM™ Engine Copyright © 2002-2005