/**
* Скрипт проверки уникальности.
*
* Разбивает введённый в него текст на куски по 10 слов, создаёт из них 10-словные запросы
* для Yandex и Google, разбирает выдачу и формирует отчёт о частоте упоминания комбинаций
* слов в интернете.
* Перед началом использования этого скрипта рекомендуется ознакомиться с правилами Яндекса.
* Автор скрипта не несёт ответственности за любой ущерб причинённый его неправильным использованием.
*
* @see rules.yandex.ru/termsofuse.xml
* @author agronom
* @version $Id$
*
*/
ob_start();
?>
<html>
<head>
<title>Проверка уникальности текста</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<h1>Проверка уникальности текста в интернете.</h1>
<form method="post">
<b>Текст для проверки </b>
<small>(Скопируйте сюда текст веб-страницы)</small><b>:</b><br>
<textarea name="query" cols="80" rows="5"></textarea><br>
<input type="submit" value="Проверить">
</form>
<?php
/**
* Выбирает доменное имя
* @param $a
*/
function handle_info($a){
$a = explode("\n", trim(strip_tags($a)));
$a = preg_replace("/^(www\.)?([\w\-\.]+):?([\d]+)?\/?([\s\S]*)?/i", "$2", strtolower($a[0]));
return $a;
}
/**
* Получает информацию о выдаче яндекса по запросу
*
* @param string $query текст запроса без URL кодирования
* @return array $a
* $a[0][1] — число найденных страниц
* $a[0][2] — число найденных сайтов
* $a[1] — массив найденных доменов
*/
function top_10($query) {
$url = " yandex.ru/yandsearch?text=".urlencode($query);
$txt = file_get_contents($url);
//echo "Ответ Яндекса";
//echo nl2br(htmlspecialchars(print_r($txt, true)));
$brief = get_brief($txt);
if (!is_array($brief)) {
return false;
}
// Получаем список сайтов yandex top 10
preg_match("/\<ol[\s\S]*?\>[\s\S]*?\<\/ol[\s\S]*?\>/", $txt, $results);
// Из списка ссылок делаем массив
preg_match_all("/\<li[\s\S]*?\>[\s\S]*?\<div class=\"info\">([\s\S]*?)\<\/div\>[\s\S]*?\<\/li[\s\S]*?\>/", $results[0], $results);
$results[1] = array_map("handle_info", $results[1]);
return array($brief, $results[1]);
}
/**
* Получает информацию о выдаче Google по запросу
*
* @param string $query текст запроса без URL кодирования
* @return array
*/
function top_10_g($query) {
$url = " www.google.com/search?hl=ru&q=".urlencode($query);
$txt = file_get_contents($url);
$brief = get_brief_g($txt);
if (!is_array($brief)) {
return false;
}
return array($brief, false);
}
/**
* Получает краткую информацию о числе результатов поиска в Yandex
*
* @param string $text текст страницы
* @return array $a $a[1] — число страниц, $a[2] — число сайтов
*/
function get_brief($text){
preg_match("/\<title\>[\s\S]+?:[\s\S]+?(\d+)[\s\S]+?\<\/title\>/i", $text, $ref);
$ref[1] = (@$ref[1])? $ref[1]: 0 ;
return $ref;
}
/**
* Получает краткую информацию о числе результатов поиска в Google
*
* @param string $text текст страницы
* @return array $a $a[1] — число страниц
*/
function get_brief_g($text){
$exp = "/\<div id=ssb\>\<div id=prs>\<b\>[\s\S]*?\<\/b\>\<\/div>\<p\>[\s\S]*?\<b\>[\d]*?\<\/b\> — \<b\>[\d]*?\<\/b\>[\s\S]*?\<b\>([\d\s]*?)\<\/b\>[\s\S]*?\<\/p\><\/div\>/i";
if (!preg_match($exp, $text, $ref)) {
return false;
}
$ref[1] = (isset($ref[1]))?(int)str_replace(" ", "", $ref[1]):0;
return $ref;
}
if (isset($_POST['query'])) {
$log = array();
$log['query'] = $_POST['query'];
$queries = (get_magic_quotes_gpc())?stripslashes($_POST['query']):$_POST['query'];
$queries = preg_replace("/[?!\(\)'\",]/", "", $queries);
$queries = preg_replace("/[- ]{2}/", " ", $queries);
$queries = preg_replace("/ +/", " ", $queries);
$queries = str_replace(".", "\n", $queries);
$queries = explode("\n", trim($queries)); // Разбиваем на предложения
?>
<h2>Яндекс</h2>
<table border="1">
<tr><td>Страниц</td><td>Запрос</td></tr>
<?php
foreach ($queries as $q) {
if (strlen($q) > 30) {
$q = preg_replace("/(([\S]+?[\s]+){3,9}[\S]+)[\s\S]*/", "$1", $q);
$top = @top_10("\"".trim($q)."\"");
$log["yandex"][] = array($top[0][1], $q);
?><tr><td><span title="<?php echo implode("\r\n", $top[1]); ?>"><?php echo $top[0][1]; ?></span></td><td><a href=" www.yandex.ru/yandsearch?text=<?php echo urlencode("\"$q\""); ?>" target="_blank"><?php echo $q; ?></a></td></tr><?php
}
}
?></table>
<h2>Google</h2>
<table border="1">
<tr><td>Сайтов</td><td>Запрос</td></tr>
<?php
foreach ($queries as $q) {
if (strlen($q) > 30) {
$q = preg_replace("/(([\S]+?[\s]+){3,9}[\S]+)[\s\S]*/", "$1", $q);
$top = @top_10_g("\"".trim($q)."\"");
$log["google"][] = array(@$top[0][1], $q);
?><tr><td><?php echo (is_int(@$top[0][1]))? $top[0][1]: "N/A"; ?></td><td><a href=" www.google.com/search?hl=ru&q=<?php echo urlencode("\"$q\""); ?>" target="_blank"><?php echo $q; ?></a></td></tr><?php
}
}
?></table><?php
}
?>
<head>
<title>Проверка на плагиат</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<?php
$text=GetParam ($_POST, 'text', $default = '');
$len=GetParam ($_POST, 'len', $default = 5);
$per=GetParam ($_POST, 'per', $default = 2);
if(!$text){
?>
<form name="formkey" method="post" >
<p>Текст для анализа на плагиат<br>
<textarea name="text" rows="15" cols="60"></textarea><br>
<input type="text" name="len" value="5" size="2">
<input type="text" name="per" value="2" size="2"> Длина/перекрытие паттернов<br>
<input type="submit" value="Проверить"></p>
</form>
<?
}
else
{
$text_pat=slice_text($text,$len,$per);
foreach ($text_pat as $key => $value)
{
$zapros=urlencode('"'.$value.'"');
$http=getPage("http://search.tut.by/?status=1&ru=1&encoding=1&page=0&how=rlv&query=".$zapros);
preg_match("/страниц[^<]+<b>[\d]+<\/b>, сайтов[^н]+не менее[^<]+<b>([\d]+)<\/b>/is",$http,$rez_tut);
if(@$rez_tut[1])
{
echo $value."<b><a href='http://search.tut.by/?status=1&ru=1&encoding=1&page=0&how=rlv&query=".$zapros."'> (".$rez_tut[1].") </a></b><br>";
}
else
{
echo $value."<br>";
}
}
}
?>
</body>
</html>
<?php
function getPage($url)
{
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec ($ch);
curl_close($ch);
return $result;
}
function GetParam ($array, $value, $default = '')
{
return (isset($array[$value]))? $array[$value]: $default;
}
function slice_text($text,$len,$pk)
{
////// текст, длинна фразы, перекрытие слов
$text=preg_replace("/[\s]+/is", " ",$text);
$text=preg_replace("/[\!\?\.]+/is", ".",$text);
$text=preg_replace("/[^ёйцукенгшщзхъфывапролджэячсмитьбюa-z0-9\.]+/is", " ",$text);
preg_match_all("/[^\.]+/is", $text,$predl); ///на предложения
for ($i=0; $i<count($predl[0]); $i++)
{
preg_match_all("/[^\s]+/is", $predl[0][$i],$slov); ///на слова
///////////если количество слов >= шингла то берем/////////
if (count($slov[0])>=$len)
{
$ravnye_chasti=array_chunk($slov[0], $len);
for ($k=0; $k<count($ravnye_chasti); $k++)
{
if(count($ravnye_chasti[$k])>=$len)
{
$rez_array[]=implode(" ",$ravnye_chasti[$k]);
}
}
$perekrytie = array_slice($slov[0], ($len-$pk));
$ravnye_chasti_p=array_chunk($perekrytie, $len);
for ($r=0; $r<count($ravnye_chasti_p); $r++)
{
if(count($ravnye_chasti_p[$r])>=$len)
{
$rez_array[]=implode(" ",$ravnye_chasti_p[$r]);
}
}
}
}
return $rez_array;
}
?>