Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: использование sed и etc   Gennady Terehov   17 Oct 2003 13:56:23 
Архивное /ru.linux/549973cdf9d8.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional