профиль удален
   
Профиль
Группа: Участник
Сообщений: 2426
Регистрация: 12.6.2005
Где: На земле.
Репутация: 17 Всего: 152
|
Вот, как и обещал. ТО что осталось. Лежало в паблике на каком-то форуме. Сохраняю ссылки на автора, убил описание, тут итак все понятно будет. Это ПХП файлик. Код | <?php ////////////////////////////////////////////////////////// //--- Система мониторинга сайта в поисковых системах ---// //------------------------------------------------------// //----------- CopyRight (c) 2006--2007 -----------------// // Яровой Роман Павлович aka ЯR <[email protected]> // // Первоначальная версия от // // IT-студии SoftTime <[email protected]> // //////////////////////////////////////////////////////////
// отключим вывод ошибок @error_reporting(0); // Из суперглобального массива $_POST[] // получаем значения переменных переданных из формы if (empty($_POST['site'])) $_POST['site'] = $_SERVER['SERVER_NAME']; $server = $_POST['server']; $site = $_POST['site']; $site = str_replace('/', '\/', $site); $phrase = $_POST['phrase']; // Определение констант, соответствующих поисковым системам define('YANDEX', 1); // Яndex define('RAMBLER', 2); // Rambler define('APORT', 3); // Апорт define('GOOGLE', 4); // Google define('MAIL', 5); // Поиск@Mail.ru define('MSN', 6); // MSN Live Search define('YAHOO', 7); // Yahoo! // Форма ввода параметров мониторинга ?> <form method="post"> <p> <select name="server"> <option value=<?php print YANDEX; ?> <? if($server==YANDEX) print " selected"; ?>>Яndex</option> <option value=<?php print RAMBLER; ?> <? if($server==RAMBLER) print " selected"; ?>>Rambler</option> <option value=<?php print APORT; ?> <? if($server==APORT) print " selected"; ?>>Aport</option> <option value=<?php print GOOGLE; ?> <? if($server==GOOGLE) print " selected"; ?>>Google</option> <option value=<?php print MAIL; ?> <? if($server==MAIL) print " selected"; ?>>@MAIL.RU</option> <option value=<?php print MSN; ?> <? if($server==MSN) print " selected"; ?>>MSN</option> <option value=<?php print YAHOO; ?> <? if($server==YAHOO) print " selected"; ?>>Yahoo!</option> </select> </p> <p> Сайт: <input type="text" name="site" size="40" maxlength="256" value='<? print $site ?>'> </p> <p> Фраза: <input type="text" name="phrase" size="40" maxlength="256" value='<? print $phrase ?>'> </p> <p> <input type="submit" value="Искать"> </p> </form> <? // Если все поля в форме заполнены, то вызывается функция // siteposition() для проведения мониторинга if (($server!="") && ($phrase!="") && ($site!="")) { siteposition($server, $site, $phrase); }
function siteposition($server, $site, $phrase) { // numberpage — переменная определяющая номер просматриваемой страницы $numberpage = 0; // Присваиваем переменным phrase, total и numberpage значения, // определяемые индивидуально для каждой поисковой системы. // phrase — поисковая фраза // total — переменная, определяющая максимальное число страниц // по которым будет произведен поиск. Для разных поисковых систем // оно разное и подобрано таким образом, чтобы число просматриваемых // страниц составило 10 штук. switch($server) { case YANDEX: // Обрезка пробелов в начале и конце поисковой фразы $phrase = trim($phrase); // URL-кодирование поисковой фразы // неалфавитно-числовые символы заменяются // на знак % и соответствующую 16-ричную последовательность $phrase = rawurlencode($phrase); // 16-ричный знак пробела, появившийся после применения // функции rawurlencode() заменяется на знак + $endstr = str_replace("%20", "+", $phrase); $total = 10; $numberpage = -1; break; case APORT: $phrase = trim($phrase); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 10; $numberpage = -1; break; case RAMBLER: $phrase = trim($phrase); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 152; $numberpage = -14; break; case GOOGLE: $phrase = trim($phrase); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 100; $numberpage = - 10; break; case MAIL: $phrase = trim($phrase); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 100; $numberpage = - 10; break; case MSN: $phrase = iconv('cp1251', 'UTF-8', trim($phrase)); //mb_convert_encoding(trim($phrase), 'UTF-8', 'cp1251'); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 10; $numberpage = - 1; break; case YAHOO: $phrase = iconv('cp1251', 'UTF-8', trim($phrase)); //mb_convert_encoding(trim($phrase), 'UTF-8', 'cp1251'); $phrase = rawurlencode($phrase); $endstr = str_replace("%20", "+", $phrase); $total = 91; $numberpage = - 9; break; } // Последовательно просматриваем страницы поисковых систем до тех // пор пока не будет найдена ссылка на искомый сайт в тексте страницы // (count($arr[0]) == 0) или число просмотренных страниц не достигнет // максимального значения ($numberpage < $total) while ((count($arr[0]) == 0) && ($numberpage < $total)) { switch($server) { // Увеличивая значение переменной $numberpage, определяется // текущая просматриваемая страницу с результатами поиска // в поисковой системе. // Число приращения зависит от конкретной поисковой системы case YANDEX: $numberpage += 1; break; case APORT: $numberpage += 1; break; case RAMBLER: $numberpage += 15; break; case GOOGLE: $numberpage += 10; break; case MAIL: $numberpage += 10; break; case MSN: $numberpage += 1; break; case YAHOO: $numberpage += 10; break; } // Вызывается функцию geturl(), генерирующую строку запроса // для поисковой системы. Передаваемые параметры: // numberpage – переменная, определяющая номер просматриваемой // страницы с результатами поиска в поисковой системе // endstr — поисковая фраза после кодирования для применения // в строке запроса // server — имя поисковой системы $strurl = geturl($numberpage,$endstr,$server); // В переменную text заносится содержимое страницы поисковой системы, // которое возвращается функцией openpage() $text = openpage($strurl); // Поиск ссылки на сайт в тексте страницы поисковой системы // с помощью функции findsite(). Результаты поиска заносятся // в массив arr[]. $arr = findsite($site, $text); } // Если число элементов массива arr[] больше нуля — значит ссылка // на искомый сайт была найдена в тексте просмотренной страницы // поисковой системы и необходимо показать результаты мониторинга. if (count($arr[0]) > 0){ switch($server) { // В зависимости от поисковой системы формируются результаты // мониторинга поисковой системы. // Функция pattern() возвращает результаты параметры для // регулярного выражения, с помощью которого будет производится // поиск номера позиции сайта сайта в тексте // страницы поисковой системы. // Функция findposition() возвращает номер позиции сайта case YANDEX: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". ($numberpage+1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>Яndex</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(YANDEX); print "<br>Позиция: ". findposition($server, $site, $text, $startpattern, $endpattern); break; case APORT: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". ($numberpage+1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>Апорт</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(APORT); print "<br>Позиция: ". findposition($server, $site, $text, $startpattern, $endpattern); break; case RAMBLER: // Вычисляем страницу, на которой находится запрашиваемый сайт $numberpage = $numberpage/15; $numberpage = (int)$numberpage; if($numberpage % 15 == 0 && $numberpage>15) $numberpage++; print "Ссылка на сайт найдена на странице: ".($numberpage+1)."<br>"; // Выводим ссылку на страницу print "Перейти по ссылке: <a href='$strurl' target='_blank'>Рамблер</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(RAMBLER); print "<br>Позиция: ".findposition($server, $site, $text, $startpattern, $endpattern); // Так как ссылка на искомый сайт найдена, то просмотр страниц // поисковых систем в цикле While можно прекратить break; case GOOGLE: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". ($numberpage/10 + 1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>Google</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(GOOGLE); $pos = findposition($server, $site, $text, $startpattern, $endpattern); print "<br>Позиция: ".($numberpage + $pos); break; case MAIL: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". ($numberpage/10 + 1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>Поиск@MAIL.RU</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(MAIL); print "<br>Позиция: ". findposition($server, $site, $text, $startpattern, $endpattern); break; case MSN: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". ($numberpage+1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>MSN Live Search</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(MSN); $pos = findposition($server, $site, $text, $startpattern, $endpattern); print "<br>Позиция: ".(($numberpage*10)+$pos); break; case YAHOO: // Вывод информации о странице print "Ссылка на сайт найдена на странице: ". (($numberpage-1)/10 + 1)."<br>"; print "Перейти по ссылке: <a href='$strurl' target='_blank'>Yahoo!</a><br>"; // Определение и вывод позиции запроса list($startpattern, $endpattern) = pattern(YAHOO); print "<br>Позиция: ". findposition($server, $site, $text, $startpattern, $endpattern); break; } } else { print "На 10 первых страницах ссылка на сайт отсутствует"; } }
function geturl($numberpage, $endstr, $server) { switch ($server){ case YANDEX: return "http://www.yandex.ru/yandpage?q=444967640&p=$numberpage&stype=&nl=0&text=$endstr"; case RAMBLER: return "http://www.rambler.ru/srch?oe=1251&words={$endstr}&start=".$numberpage; case APORT: return "http://sm.aport.ru/scripts/template.dll?r={$endstr}&That=std&p={$numberpage}&HID=1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20"; case GOOGLE: return "http://www.google.ru/search?q={$endstr}&hl=ru&lr=&start={$numberpage}&sa=N"; case MAIL: return "http://go.mail.ru/search?&q={$endstr}&no_morph=n&num=10&sf={$numberpage}"; case MSN: return "http://search.msn.com/results.aspx?q={$endstr}&first={$numberpage}1&FORM=PDRE{$numberpage}"; case YAHOO: return "http://search.yahoo.com/search?p={$endstr}&toggle=1&ei=UTF-8&fr=FP-tab-web-t400&b={$numberpage}"; default: return ""; } }
function openpage($link) { $link = parse_url($link); $link['port'] = (empty($link['port'])) ? '80' : $link['port']; $fp = fsockopen($link['host'], $link['port'], $sock_errno, $sock_errstr, 30); if (!$fp) { print "$sock_errstr ($sock_errno)<br>\n"; } else { $out = "GET {$link['path']}?{$link['query']} HTTP/1.1\r\n"; $out .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*\r\n"; // $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; DigExt)\r\n"; // маскировка под IE 5.5 $out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 2.0.40607; .NET CLR 1.0.3705; IEMB3; IEMB3)\r\n"; // маскировка под IE 6 $out .= "Host: {$link['host']}\r\n"; $out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out); $text = ''; while (!feof($fp)) { $text .= fgets($fp, 1024); } fclose($fp); } return ($text); }
function findsite($site, $text) { preg_match_all("/$site/i", $text, $arr); return $arr; } function pattern($typepattern) { switch($typepattern) { case YANDEX: return array("<li value=(?P<position>\d*)>\s*<div[^>]*>\s*<a[^>]*href=\"[^\"]*", "[^\"]*\"[^>]*>\s*<img\s*"); break; case APORT: return array("<li value=(?P<position>\d*)>(\s*)<span([^>]*)>(\s*)<a([^>]*)href=\"([^\"]*)", "([^\"]*)\"([^>]*)>"); break; case RAMBLER: return array("<li><div class=\"ttl\"><a([^>]*)href=\"([^\"]*)", "([^\"]*)\""); break; case GOOGLE: return array("href=\"([^\"]*)", "([^\"]*)\""); break; case MAIL: return array("<tr>\s*<td[^>]*class=num>(?P<position>\d*)\.<\/td>\s*<td>\s*<p>\s*<a[^>]*href=\"[^\"]*", "[^\"]*\""); break; case MSN: return array("<li[^>]*><h3><a href=\"[^\"]*", "[^\"]*\"[^>]*>"); break; case YAHOO: return array("<em class=yschurl>([^<>]*)", "(.*)<\/em>"); break; } }
// Функция findposition() определяет позицию искомого сайта на странице // c результатами поиска в поисковой системе. // Передаваемые параметры: // server — имя поисковой системы // site — имя искомого сайта // text — содержимое страницы c результатами поиска в поисковой системе // startpattern и endpattern — параметры для регулярного выражения, они // определяются функцией pattern(). function findposition($server, $site, $text, $startpattern, $endpattern) { switch($server) { // Поиск позиции сайта в тексте страницы. // Для каждой поисковой системы применяется свой алгоритм поиска case YANDEX: // Регулярное выражение, осуществляющее поиск позиции сайта preg_match("/$startpattern$site$endpattern/isU", $text, $arr); return $arr['position']; case APORT: preg_match("/$startpattern$site$endpattern/isU", $text, $arr); return $arr['position']; case RAMBLER: preg_match('/<ol start="(\d*)">/isU', $text, $arr); $pos_begin = $arr[1]; $text = substr($text, strpos($text, '<ol start=')); // Находим текст относящийся к сайту и вырезаем его for($i=0; $i<20; $i++) { $pos = strpos($text,"<li>"); $posend = strpos($text, "<li>", ($pos+15)); if(preg_match("/$startpattern$site$endpattern/isU", substr($text,$pos,($posend-$pos)))) return $pos_begin; else $text = substr($text, $posend-1); $pos_begin++; } return 'Не определена'; case GOOGLE: $pos_begin = 1; // Находим текст относящийся к сайту и вырезаем его for($i = 0; $i < 10; $i++){ $pos = strpos($text,"<div class=g><h2 class=r"); $posend = strpos($text, "<div class=g><h2 class=r", ($pos+25)); if(preg_match("/$startpattern$site$endpattern/isU", substr($text,$pos,($posend-$pos)))) return $pos_begin; else $text = substr($text, $posend-1); $pos_begin++; } $pos = $posend; if(preg_match("/$startpattern$site$endpattern/isU", substr($text, $pos))) return $pos_begin; return 'Не определена'; case MAIL: preg_match("/$startpattern$site$endpattern/isU", $text, $arr); return $arr['position']; case MSN: $pos_begin = 1; $pos = strpos($text, '<div id="results"><h2 class="hide">Results</h2><ul>'); $posend = strpos($text, '</ul></div>', $pos + 60); $text = substr($text, $pos + 51, $posend - $pos - 12); // Находим текст относящийся к сайту и вырезаем его if (preg_match_all("/$startpattern.*$endpattern/isU", $text, $regs)){ foreach ($regs[0] as $key => $value) { if (preg_match("/.*$site.*/isU", $value)) return $key+1; } }else return 'Не определена'; case YAHOO: preg_match('/<ol start=(\d*)>/isU', $text, $arr); $pos_begin = $arr[1]; $text = substr($text, strpos($text, '<ol start=')); // Находим текст относящийся к сайту и вырезаем его for($i = 0; $i < 10; $i++) { $pos = strpos($text,"<li>"); $posend = strpos($text, "<li>", ($pos+4)) ? strpos($text, "<li>", ($pos+4)) - $pos : strlen($text); if(preg_match("/$startpattern$site$endpattern/iU", substr($text, $pos, $posend))) return $pos_begin; else $text = substr($text, $pos+$posend); $pos_begin++; } return 'Не определена'; default: return 'Не определена'; } } ?>
|
--------------------
Со мной можно связаться по скайпу или по аське. Занимаюсь продвижением сайтов - самой таргетированной рекламой.
|