|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Gennady Terehov 2:5020/400 17 Oct 2003 13:56:23 To : Andrew Koyra Subject : Re: использование sed и etc -------------------------------------------------------------------------------- >>>>> "AK" == Andrew Koyra wrote: [skip] AK> изменение ссылок на каpтинки. Может кто нибyдь подскажет какие еще есть AK> ваpианты кидать погодy на web интpанета) Вот у меня работает, тут еще и локальные ссылки на скачанные html'ины пишутся в файлик, используемый другим скриптом для выведения календарика с подсвеченными датами, за которые скачана погода. Пускается cron'ом: #!/usr/bin/perl -w ############################################################### ### Скрипт для автоматического обновления прогноза погоды с ### ################### сайта www.gismeteo.ru ##################### ############################################################### # Префикс куда складываются готовые html-ны и картинки $prefix = "/usr/www/doc.pechgres.ru/News/gismeteo/"; # Куда кладется cырой html-файл, скачиваемый c gismeteo $pars_file = $prefix."gismeteo.html"; # Каталог куда складываются картинки $out_img_pref = $prefix."images/"; # Заголовок выходной страницы $title = "оПHЦМHГ ОHЦHДШ Б Ц.оЕВHПЮ"; # Приводим результат выдаваемый функцией localtime в нормальный вид # и складываем его в массив rightdate @date = (localtime)[5, 4, 3]; push(@rightdate, $date[0]+1900); push(@rightdate, $date[1]+1); push(@rightdate, $date[2]); # Генерим имя выходного файла на основании текущей даты $out = join('-', @rightdate); $out_file = $prefix.$out.".htm"; # Имя файла, в конец которого добавляется запись с датой и Интранет-URL'ем $list_file = "/usr/www/gismeteo.list"; # Качаем сырую страницу с gismeteo use LWP::Simple; $prot = getstore ('http://www2.gismeteo.ru/weather/towns/23418.htm', $pars_file); print "страница $prot\n"; # Читаем ее в переменную after $size = (stat $pars_file)[7]; open(PARS_FILE, "<$pars_file"); read(PARS_FILE, $after, $size); # Парсим, выделяя нужную таблицу ($after) = (split /var frc=/,$after)[1]; ($after) = (split /\<table/,$after)[1]; ($after) = (split /\<\/table/,$after)[0]; # Вставляем после конечных тегов символ новой строки $after =~ s/(<\/.+?>)/$1\n/g; # Заменяем Интернетовский URL на Интранетовский $after =~ s/http:\/\/img\.gismeteo\.ru/http:\/\/doc\.pechgres\.ru\/News\/gismeteo/g; close(PARS_FILE); # Пишем все вышесгенеренное в выходной файл open(OUT_FILE, ">$out_file"); print OUT_FILE << "HDR"; <HTML> <HEAD><TITLE>$title</TITLE> <link rel="stylesheet" type="text/css" href="http://doc.pechgres.ru/css/gt.css"> </HEAD> <BODY> <table $after </BODY> </HTML> HDR close(OUT_FILE); # Снова открываем выходной файл на чтение (хм, здесь немного кривовато, # надо подумать как бы постройней написать :) ) open(OUT_FILE, "<$out_file"); # Читаем его построчно while (<OUT_FILE>) { # Производим обратную замену Интранетовского адреса на Интернетовский s/http:\/\/doc\.pechgres\.ru\/News\/gismeteo/http:\/\/img\.gismeteo\.ru/i; # Hаходим в нем URL'и картинок if (m/http:\/\/img\.gismeteo\.ru\/images\/(\w+?\.gif)/i) { unless (-e "$out_img_pref"."$1") { # И скачиваем их сохраняя в нужном месте (если не скачаны ранее) print "качаем картинку $&\n"; print "и сохраняем как $out_img_pref$1\n"; $prot_img = getstore ($&, $out_img_pref.$1); print "картинка $prot_img\n"; } else {print "картинка $out_img_pref$1 существует пропускаем\n";} } } close(OUT_FILE); # Меняем в переменной out_file локальный путь на Интранетовский адрес # для записи в файл-список дат и Интранетовских URL'ей $out_file =~ s/\/usr\/www/http:\//; # И пишем в него open(LIST_FILE, ">>$list_file"); print(LIST_FILE join(' ', @rightdate)." ". $out_file."\n"); close(LIST_FILE); Ценители стиля программирования, просьба не пинать, ибо не программист я :) Что смог то и написал, но вот уже больше года работает :) -- Геннадий --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/549973cdf9d8.html, оценка из 5, голосов 10
|