Скрипт определения Ап Тиц.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
1194

Хочу поделиться скриптом коленочной сборки индивидуального применения для определения Ап Тиц и получения результата на электронную почту. Данный скрипт зафиксировал последний Ап, прислал письмо, сделал вывод и начал новую тему на форуме :) (шутю)

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

Принимаю конструктивную критику от профессионалов.

Для установки достаточно:

1) закачать на хост и создать файл sites.txt со списком сайтов без http://

2) настроить cron.

<?php

$notify_email="###@gmail.com"; // ваш адрес
$from="###@gmail.com"; //от кого
$txtfile="sites.txt"; //список сайтов в формате "domain.tld" без http:// , лучше не нулевые, иначе ап не будет зафиксирован
$min=3; //кол-во сайтов с изменившимся тицем, для аларма(паники) - письмо, пост на форуме, кнопка RESET :)

$sites=get_sites($txtfile); //получаем список доменов
$x=array_rand($sites); //выбираем случайный домен из списка
$site=$sites[$x][0];
$tic=$sites[$x][1];
$bar=get_cy($site); //проверяем тиц по bar-navig
echo $site.": старый тиц ".$tic.", по бару ".$bar."<br>";
if ($tic!=$bar) { //сравниваем старый тиц с показаниями bar-navig, если не равен -
//запускаем проверку всех доменов
echo "проверим остальные...<br>";
$fpn=fopen($txtfile,"w");
for ($i=0;$i<sizeof($sites);$i++) {
$newtic=get_cy($sites[$i][0]);
$newsites[$i]=array($sites[$i][0],$newtic);
if ($newsites[$i][1]!=$sites[$i][1]) {$num++;}//считаем количество изменений
fwrite($fpn,$newsites[$i][0].":".$newsites[$i][1]."\n");
}
fclose ($fpn);
if ($num>=$min) {alarm(); }//все таки Ап наступил
}else{ echo "изменений нет, спи спокойно.<br>";}
echo "OK!<br>";

function alarm() { //что делать, если Ап наступил
global $sites,$newsites,$forums,$notify_email,$from;
echo "Наступил Ап, пздр!<br>";
to_email($notify_email,$from,$sites,$newsites); // послать письмо
//to_forum($forum,$post,$message,$author); //запостить
}

function get_sites($txtfile) {
$fp=fopen($txtfile,"r");
for ($i=0;$i<100;$i++) {
$temp=fgets($fp);
$tmp=explode(":",str_replace("\n","",$temp));
if ($tmp[0]) {$tsites[]=array($tmp[0],$tmp[1]);}
}
fclose ($fp);
return $tsites;
}

function get_cy($url) {
$txt = disguise_curl($url);
$txt = str_replace('<?xml version="1.0" encoding="windows-1251" ?>','',$txt);
preg_match('|<tcy rang="\d*" value="(.*)"/>|', $txt, $out);
$cy = (int) $out[1];
return $cy;
}

function to_email($notify_email,$from,$sites,$newsites) {
$mailtext="Начался Ап Тиц: <br>\n";
$sum=0;
for ($i=0;$i<sizeof($sites);$i++) {
$old=$sites[$i][1];
$new=$newsites[$i][1];
$res=$new-$old;
if ($res<0) {$color="#CC3300";$p="";}else{$color="#006600";$p="+";}
if ($res==0) {$color="#999999";}
$sum=$sum+$res;
$mailtext.="<b>".$sites[$i][0]."</b>: старый ".$old.", новый ".$new." (<font color = '".$color."'><b>".$p.$res."</b></font>)<br>\n";

}
$mailtext.= "Итого: <b>".$sum."</b>";
$title="Ап Тиц ".date("d.m.Y H:i:s");
$headers = "From: <".$from.">\n";
$headers .= "Reply-To: <".$from.">\n";
$headers .= "X-Sender: <".$from.">\n";
$headers .= "X-Mailer: PHP\n";
$headers .= "X-Priority: 1\n";
$headers .= "Return-Path: <".$from.">\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=windows-1251\n";
mail($notify_email,$title,$mailtext,$headers);
}

function disguise_curl($url){
$curl = curl_init();
$url = 'http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://'.$url.'/';
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
$header[] = "Cache-Control: max-age=0";
$header[] = "Connection: keep-alive";
$header[] = "Keep-Alive: 300";
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$header[] = "Accept-Language: en-us,en;q=0.5";
$header[] = "Pragma: ";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, 'bot/2.1 (+http://www.aaa.com/bot.html)');
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_REFERER, 'http://www.aaa.com');
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
curl_setopt($curl, CURLOPT_AUTOREFERER, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$html = curl_exec($curl);
curl_close($curl);
return $html;
}

?>

filosof
На сайте с 29.10.2005
Offline
171
#1

А можно сделать что бы скрипт брал список доменов и приводил их новые значения тиц в письме?

+ Насколько я понял, при первичной проверке проверяется всего один домен, но что будет в случае если апдейт его не затронул?

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#2
filosof:
А можно сделать что бы скрипт брал список доменов и приводил их новые значения тиц в письме?

+ Насколько я понял, при первичной проверке проверяется всего один домен, но что будет в случае если апдейт его не затронул?

В письме оба значения для всех сайтов приводятся, а также их разница.

Если один домен не затронул ап, то проверяться все сайты не будут, но при следующем запуске по крону будет проверен другой сайт - теория вероятности, надо держать список сайтов с наиболее вероятным изменением тица, то есть тех, с какими работаешь. При этом нагрузка и "палево" минимальны.

Ёхан Палыч добавил 29.10.2008 в 19:49

Недокументированные возможности:

Проверка изменения тиц для покупных ссылок.

1) Экспортим из сапе "Страница" и "ТИЦ", сохраняем список (именно страниц а не доменов) и приводим к виду страница:тиц

2) Получаем письмо и анализируем кто как подрос/упал и причины этих явлений.

3) Выясняем, что, оказывается, заявленный тиц на некоторых страницах сильно отличается от полученного, смотрим и прозреваем - страницы/разделы сайтов-доноров находятся в другом разделе яка и, соответственно, имеют тиц много меньше тица главной страницы. Робот сапы определяет тиц только для главной.

P
На сайте с 11.08.2008
Offline
10
#3
Ёхан Палыч:
Хочу поделиться скриптом коленочной сборки индивидуального применения для определения Ап Тиц и получения результата на электронную почту.

Спасибо! :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий