Показаны сообщения с ярлыком preg_match. Показать все сообщения
Показаны сообщения с ярлыком preg_match. Показать все сообщения

четверг, 5 апреля 2012 г.

Скрипт обновления форм статистики

Задача:  Мониторить появление новых или обновленных форм статистики, и если таковые находились, сообщать об этом пользователям.

Решение:

Небольшой скрипт на php, который парсит страницу с обновлениями, сравнивает формы с имеющимися, и с учетом потребности пользователей, рассылает сообщения о появлении обновленной формы, и ссылку на установку этой формы.

//Источник
> $html3 = file_get_contents('http://www.kalugastat.ru/statrep/DocLib2/Forms/Main.aspx');
//Регулярный выражение, которые вытаскивают со страницы, название формы, ссылку на скачивание, и дату публикации.
preg_match_all('/(?<NOBR>)[\d]{2}[\.][\d]{2}[\.][\d]{4}[\s]*[\d]*[\:][\d]*(?=<\/NOBR>)/', $html3, $date);
preg_match_all('/(?<=vb2\">)[^<]*(?=<\/TD><TD)/', $html3, $name);
preg_match_all('/(?<=\sUrl=\"\/statrep\/DocLib2\/)[\w,\d,\-,\_]*(?=.rar\"\s)/', $html3, $outlink);
//Объединение всех полученных данных в один массив
$url4[0] = $outlink[0]; //files
$url4[1] = $date[0]; //dates
$url4[2] = $name[0]; //names

//Массив пользователей, и форм пользователей.
$massform=Array("0"=> array("0" => "user1@domain.ru", "1" => array( "0" => "5-З")),
                "1"=> array("0" => " user2@domain.ru ", "1" =>  array( "0"=> "1-ТС (вывоз)", "1"=> "цены производителей")),
                "2"=> array("0" => " user3@domain.ru ", "1" => array( "0"=> "1-Инвест", "1"=> "П-2","2"=>"инвестиц", "3"=>"Форма 11", "4"=> "ИАП")),
                "3"=> array("0" => " user4@domain.ru ", "1" => array( "0"=> "1-РП", "1"=>"3-информ", "2"=>"П-3","3"=>"П-6")),
                "4"=> array("0" => " user5@domain.ru ", "1" => array( "0"=> "1-ТЭП","1"=>"автотранспорт", "2"=>"11-ТЭР","3"=>"4-ТЭР", "4"=> "24-Энергетика")),
                "5"=> array("0" => " user6@domain.ru ", "1" => array( "0"=> "2-ТП", "1"=>"4-ОС","2"=> "7-Травматизм")),
                "6"=> array("0" => " user7@domain.ru ", "1"=>array("0"=>"1-цены приобретения", "1"=>"65-автотранспорт","2"=>"Баланс производственной мощнос$
                            "4"=>"П-4", "5"=>"1-натура", "6"=>"1-предприятие","7"=>"1-Т (условия труда)", "8"=>"1-ДАП","9"=>"57-Т","10"=>"П1"))
                );
//Проход по массиву полученных данных
for($ik=0; $ik<22; $ik++)
{
$urlreport = "http://www.kalugastat.ru/statrep/DocLib2/".$url4[0][$ik].".rar";
$path = "/var/www/statupd/".$url4[0][$ik].".xml";
//Проверка, если форма уже существует, то пропускать, если нет, то идем дальше
if(!file_exists($path)) {
//Проход по массиву пользователей
for($j=0; $j<count($massform); $j++)
  {
$str = implode(",",$massform[$j][1]);
//Если в пользовательских формах есть совпадение с формой, найденной на сайте, то скачиваем форму, распаковываем, копируем в нужное место.
if(strpos($str,substr($url4[2][$ik],0,10)))
{
exec("echo 'Новая форма ".$url4[2][$ik]." от ".$url4[1][$ik]." для ".$massform[$j][0]."' | sendxmpp -s 'Statistacs update' alexey@ermolino");
exec("wget -N -O /var/www/statupd/".$url4[0][$ik].".rar $urlreport  > /dev/null 2>&1");
exec("unrar x /var/www/statupd/".$url4[0][$ik].".rar /var/www/statupd  > /dev/null 2>&1");
exec("rm /var/www/statupd/".$url4[0][$ik].".rar");
exec("cp /var/www/statupd/".$url4[0][$ik].".xml /home/router/share/files/statupd/".$url4[0][$ik].".xml");
//Отсылаем сообщение пользователю, о том что нашлась обновленная форма, и даем ему ссылку на установку этой формы.
exec("echo 'Обновите форму статистики ".$url4[2][$ik]." от ".$url4[1][$ik].". Установить - http://192.168.1.2/statbat.php?f=".$url4[0][$ik].".xml' $
        }
  }
}
}?> 
Скрипт установки формы - это простой скрипт, который формирует bat файл, запуская который пользователь устанавливает себе новую форму.


<?
//Устанавливаем header, для того, чтобы файл сохранялся, а не выводился на экран
header("Content-Disposition: attachment; filename=statbat.cmd");
$f = $_GET['f'];
?>
copy "\\192.168.1.2\!share\files\statupd\<?=$f?>" "%PROGRAMFILES%\NIPIstatinform\Формы статотчетности\Data\<?=$f?>";
?>

четверг, 4 февраля 2010 г.

Просмотр почты Яндекс.Мейл

Скрипт для захода на Yandex@mail и просмотра новых сообщений.
Функция установки кукисов
function CreateCurl($siteUrl, $cookieFile, $postData=array()) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $siteUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
if (count($postData)) {
$dataToSend = array();
foreach ($postData as $key=>$value) {
$dataToSend[] = $key.'='.$value;
}
curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $dataToSend));
}
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
return $ch;
}

$cookieFile = tempnam('', ''); 

Курс валют: Сегодня, Завтра

По работе необходимо следить за курсов валют usd, eur,
написал небольшой скрипт, который получает курсвалют с яндекса(на нем раньше обновления появляются, чем на sbrf.ru)

$file = implode("",file("yandex.ru"));
preg_match_all('/(?<=>)[0-9]{2}[\,][0-9]{4}(?=<\/strong><\/td>)/', $file, $out);

for($j=0; $j<4; $j++)
{
$out1[] = str_replace(",",".",$out[0][$j]);
}

$date2 = "0".date("d")+1 ."/".date("m")."/".date("Y");

$ee=round($out1[3]-$out1[2],4);
$dd=round($out1[1]-$out1[0],4);

if($dd>0) {$d = "+"; $color = "blue";} else {$d = " "; $color="red";}
if($ee>0) {$e = "+"; $color2 = "blue";} else {$e = " "; $color2="red";}

if($out1[2]!="" || $out1[3]!="")
{
echo "<u>Сегодня: <b>".date("d/m/Y")."</u></b><br>   USD = <font size='+2'>".$out1[0]."</font><br>   EUR = <font size='+2'>".$out1[2]."</font>\n<br><br>";
echo "<u>Завтра: <b>".$date2."</b></u><br>   USD = <font size='+2'>".$out1[1]."</font>   <font color='$color'>$d".$dd."</font><br>  ";
if($ee != -$out1[2]) echo " EUR = <font size='+2'>".$out1[3]."</font>   <font color='$color'>$d".$ee."<br>  ";
else echo " EUR = Неизвестно\n<br>";
}
else
{
echo "<u>Сегодня: <b>".date("d/m/Y")."</u></b><br>   USD = <font size='+2'>".$out1[0]."</font><br>   EUR = <font size='+2'>".$out1[1]."</font>\n<br><br>";
echo "<u>Завтра: <b>$date2</b></u><br>  ";
echo "USD = Неизвестно
   EUR = Неизвестно";
}
?>

пятница, 14 августа 2009 г.

ТВ программа в Меню и notify_send


Программа с Яндекса, отображает несколько программ в ближайший час
Файл tv.php
#!/usr/bin/php
 ?php
$file = implode("",file("http://tv.yandex.ru"));

preg_match_all('/(? = span class="location">Телеканал ).*(?= \/span>)/',$file, $matches3);
preg_match_all('/(? =id=\d\d\d\d\d\d\d\d">)[0-9][:][0-9][0-9]|[0-9][0-9][:][0-9][0-9](?= \/a>)/',$file, $matches1);
preg_match_all('/(? = \/span> span class="summary">).*(?= \/span> span class="location">)/', $file, $matches2);

for($i=0; $i count($matches1[0]); $i++)
{
if($matches1[0][$i]  = 9) {$tim = "0".$matches1[0][$i];}
else $tim = $matches1[0][$i];
$text = $text.$tim." - ".$matches3[0][$i]." - ".strip_tags($matches2[0][$i])."\n";
}

//echo $text;
$fil = fopen("tv.txt","w+");
$fw=fputs($fil,$text);
fclose($fil);
?>
Файл tv.sh - который положим в меню
#!/bin/bash
if ping -c 1 62.148.128.1 | grep '64 bytes'> /dev/null
then
php tv.php
fi
cat tv.txt | grep `date +%H:` |cut -d = -f 1 >>tv_sort.txt
notify-send "Сейчас по ТВ" "`cat tv_sort.txt`" -t 16000 -i /путь/до/файла/иконки
rm tv_sort.txt &

ТВ программа для кабельного, с сайта www.nsk.tvoe.tv, с возможностью установки нужных каналов:

вторник, 3 марта 2009 г.

Получаем телепрограмму

Скрипт скачки телепрограммы tv.sh
#!/bin/bash
if [ -f "/home/simpson/scripts/tv/index.html"]
then
rm ~/scripts/tv/index.html
# rm ~/scripts/tv/tv.html - если вывод в файрфокс
fi
wget -E -P ~/scripts/tv http://tv.yandex.ru

php ~/scripts/tv/tv.php
for chanal in Первый Россия Центр НТВ Культура Спорт ТНТ Домашний РЕН СТС ТВ3 ДТВ Звезда
do
echo $chanal
cat ~/scripts/tv/tv.txt | grep $chanal | grep `date +%H`| cut -d = -f 1
#Для удобства, можно в файрфокс вывести
#echo "<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>"
#echo "
" $chanal "
"
#cat /home/simpson/scripts/tv/tv.txt | grep $chanal | cut -d = -f 1
#echo "
"

#done > ~/scripts/tv/tv.html
#firefox ~/scripts/tv/tv.html

done