CheRt
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Но пашет. Собственно тырит заданные курсы с принт-паги центробанка РФ на текущую дату. Установка дурная, но мне уж так было удобнее. Для начала стоит решить где будем ставить. Если в форумах, как у меня, то forum.cgi править, если на главной - ikonboard.cgi, в постах - topic.cgi На примере forum.cgi 1. Создаем папки в корне ИБ скриптов - mods/, plugins/ 2. В папке mods/ надо создать 3 файла - lock.pm, plug.lck, plugins.pm lock.pm Код: $funclist="ulock(lock_file): locking files used by current procces; unulock(): unulock it;\n"; sub ulock { my $lockfile=shift; open(SEM, ">$lockfile") if (-e $lockfile); flock(SEM, 2); undef $lockfile; } sub unulock { close(SEM); } | plug.lck - пустой файл plugins.pm Код: $funclist="-free-"; #load_plugins('plugins','.pm$','all'); #load_plugins('plugins','.pm$','mod1,mod2,etc'); sub load_plugins { my $folder=shift; my $greptemplate=shift; my $load_modules=shift; my $i=0; opendir(PD, $folder); my @pluginlist=grep{/$greptemplate/i} readdir(PD); closedir(PD); $load_modules=~s/[^a-z0-9\-_,]//igs; unless ($load_modules=~m/^all$/i) { for ($i=0;$i<@pluginlist;$i++) { $pluginlist[$i]=~m/^(.*)$greptemplate/i; unless ($load_modules=~m/^|,$1,|$/i) { $pluginlist[$i]=''; } } } for ($i=0;$i<@pluginlist;$i++) { require "$folder/$pluginlist[$i]" || plug_save_error($folder,"Error requiring module $folder/$pluginlist[$i]") if ($pluginlist[$i] ne ''); } } sub plug_save_error { my $folder=shift; my $text=shift; require mods::lock; ulock('error.lck'); open(F, ">>$folder/error.log"); print F '[',scalar(localtime),"] $text\n"; close(F); unulock(); } | Далее переходим к папке plugins/ тут надо два файла - money-grabber.pm, DT_date.pm money-grabber.pm Код: $funclist="-free-"; use LWP::Simple; sub MG_grabpage { my $url=shift; my $source; if (defined ($source=get($url))) { return $source; } else { return 0; } undef $url; undef $source; } sub MG_save_and_load { my $g_data_file=shift; my $g_url_to_load=shift; my $g_restart_delay=shift; my ($g_data,$i); my %g_types=('USD'=>'','EUR'=>'','GBP'=>''); # add more if need unless ((-M $g_data_file)*24*60<$g_restart_delay && -e $g_data_file) { $g_data=MG_grabpage($g_url_to_load); if ($g_data ne '') { $g_data=~s/[\n\r]//gs; foreach (keys %g_types) { $g_data=~m/<tr[^<>]*><td[^<>]*>[0-9]*<\/td><td[^<>]*>[^<>]*;$_<\/td><td[^<>]*>[^<>]*<\/td><td>[^<>]*<\/td><td[^<>]*>([0-9]{2},[0-9]{2,5})<\/td><\/tr>/is; $g_types{$_}=$1 if ($1); $g_types{$_}=~s/,/\./gs; } ulock('mods/plug.lck'); open(GDF, ">$g_data_file"); foreach (sort keys %g_types) { print GDF "$_ = $g_types{$_}\n"; } close(GDF); unulock(); } } $g_data=''; open(GDF, $g_data_file); while(<GDF>) { $g_data.="$_<br>\n"; } close(GDF); return $g_data; } | DT_date.pm Код: $funclist="-free-"; sub DT_getdate { (undef,undef,undef,$mday,$mon,$year,undef,undef,undef)=localtime(time); $mon++; if ($mday<10) { $mday="0$mday"; } if ($mon<10) { $mon="0$mon"; } $year+=1900; return "$mday/$mon/$year"; } sub DT_StrToDig { my $str=shift; $str=~s/jan/01/i; $str=~s/feb/02/i; $str=~s/mar/03/i; $str=~s/apr/04/i; $str=~s/may/05/i; $str=~s/jun/06/i; $str=~s/jul/07/i; $str=~s/aug/08/i; $str=~s/sep/09/i; $str=~s/oct/10/i; $str=~s/nov/11/i; $str=~s/dec/12/i; return $str; undef $str; } | 3. открываем forum.cgi и после Код: $bypass = &stripMETA("$bypass"); $inforum = &stripMETA("$inforum"); $intopic = &stripMETA("$intopic"); $action = &stripMETA("$action"); $inshow = &stripMETA("$inshow"); $jumpto = &stripMETA("$jumpto"); | Дописываем Код: #-----------MyAdds-----------# if ($inforum==1) { require mods::plugins; require mods::lock; load_plugins('plugins','.pm$','money-grabber,DT_date'); #---money---# my $g_date=DT_getdate(); my $g_url_to_load="http://cbr.ru/currency_base/D_print.asp?date_req=$g_date"; my $g_data_file='data/cbr-money.dat'; $g_output=MG_save_and_load($g_data_file,$g_url_to_load,$g_restart_delay=30); $g_url_to_load=~m/(https?:[\/]{2}[a-z0-9\-_\.]+)\//i; $g_output="<div class=\"money_values\"><b>$g_output</b><br>Источник: <a href=\"$_\" target=\"_blank\"><b>ЦБ РФ</b></a></div><br><br>"; } #----------------------------# | if ($inforum==1) { и } в конце можно убрать, это проверка вывода, т.е. можно кидать только в определенные форума. 4. Выводим: находим Код: if ($numberofpages > 10) { $toptopicpages = qq~<font face="$font" color=$menufontcolor size=$dfontsize1><b>$ibtxt{'0603'}</b> [ $ibtxt{'0620'} ]~; } else { $toptopicpages = $topicpages; } # Print the forum top bar $output .= qq~ | сразу после qq~ вставляем Код: 5. Пример стиля для div.money_values Код: .money_values { font: 12px verdana; color:#000000; width: 130; top: 130; left: 100; background-color: #c8f4f4; border: 1px #606060 solid; position: absolute; z-index:2; padding: 4 4 4 4; } | 6. В работе - http://watchforyou.ru/cgi-bin/board/forums.cgi?forum=5
---------- В огне бода нет и не будет! До встречи в СССР 2.0! |
| Всего записей: 1118 | Зарегистр. 14-12-2001 | Отправлено: 09:32 19-05-2006 | Исправлено: CheRt, 20:14 20-05-2006 |
|