Массовая проверка ТИЦ и PR

pr и тиц сайтаРазмышляя о том в каких белых каталогах зарегистрироваться, на каких площадках покупать ссылки, какие блоги комментировать или анализируя сайты конкурентов, Вы сталкиваетесь с необходимостью узнать тиц и pr не одного, а целого списка сайтов. Для таких целей существуют скрипты массового определения пузомерок. Как же они создаются и по каким принципам работают? Это будет темой сегодняшнего поста.

Признаюсь, в сети существует немало реализаций этой задачи, я решил для создать утилиту для личного пользования и поделиться с Вами нюансами ее реализации.

Цель:

Реализовать утилиту на php позволяющую определить тиц и pr списка сайтов, работающую в асинхронном режиме, т.е. запрос на получение тиц и pr очередного сайта отсылается не дожидаясь получения ответа от проверки предыдущего.

Проверка ТИЦ и PR

Детали реализации:

Утилита состоит из четырех файлов:
index.php – так называемый фронт-офис, содержит элемент <textarea> (id=”sites_list”) куда вводятся url адреса проверяемых сайтов. После нажатия кнопки “Узнать ТИЦ и PR” (id=”process”) выполняется множество ajax запросов к бэк-офисной части и результат отображается в слое ниже (id=”display_results_div”).
tcy_pr.php – бэк-офис, принимает поступающие запросы и возвращает пузомерки.
tcy_pr.class.php – класс, взятый с http://php-developer.ru/ , для получения тиц и pr, его использует tcy_pr.php. Для работы необходима библиотека CURL, которая должна входить в дистрибутив php на хостинге.
styles.css – файл стилей, в нем описаны свойства слоев, используется фронт-офисом index.php

Рассмотрим реализацию фронт-офисной части поподробнее, а точнее той части, которая занимается взаимодействием с сервером по технологии ajax. Вот она:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<script type="text/javascript">
$(document).ready(function()
{
//Создадим функцию-обработчик, которая вызовется при нажатии на ссылку "Узнать ТИЦ и PR" (у нее id="process")
$('#process').click(function()
	{
	//очистим слой, в который будет выводится результат
	$("#display_results_div").html('');
	//считаем все строки элемента textarea (его id="sites_list") в массив sites
	var sites = $('#sites_list').val().split(/\n/);
	//длину массива в sites_count
	var sites_count = sites.length;
	//вспомогательная итерационная переменная
	var i;
 
	for (i=0;i<sites_count;i++)
		{
		//заносим в слой (его id="display_results_div") отображения результатов слои с именами сайтов и слои для их ТИЦ и PR (пока там размещаем анимированную картинку, сигнализирующую о начале процесса)
		$("#display_results_div").append("<div class='site_name'>"+sites[i]+"</div> <div class='pr' id='l_pr_"+i+"'><img src='ajax_loading.gif'></div> <div class='tcy' id='l_tcy_"+i+"'><img src='ajax_loading.gif'></div><div class='clear'></div>");
		}
 
	for (i=0;i<sites_count;i++)
		{
		//в каждом ajax-запросе отсылает две переменные site - имя сайта и его порядковый номер i 
		$.post(
			"tcy_pr.php", 
			{'site': sites[i], 'i': i}, 
			function(data)
				{
				//выводим полученные от сервера ТИЦ и PR в соответствующих слоях. Внимание - переданная ранее на сервер переменная i помогает идентифицировать сайт и соответствующий ему слой.
				var res = data.split(' ');
				$("#l_pr_"+(res[0])).html(res[1]);
				$("#l_tcy_"+(res[0])).html(res[2]);
				}
		       );
		}
	});
});
</script>

Скрипт, обрабатывающий запросы на сервере и возвращающий пузомерки, будет примерно следующим:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
//подключаем класс для определения тиц и pr
include ("tcy_pr.class.php");
//создаем экземпляр класса
$tcy_pr = new TCY_PR();
 
if ($_POST["site"] == "") 	{ exit();	}
//проверки на корректность данных... кстати можно добавить и свои
if (strtolower(substr($_POST["site"],0,7)) != "http://" )
	{$_POST["site"]="http://".$_POST["site"]; }
$_POST["site"]=htmlspecialchars(trim(strip_tags(stripslashes($_POST["site"]))));
 
//вызов методов непосредственно определения тиц и pr
$pr = $tcy_pr->check_pr($_POST["site"]);
$tcy = $tcy_pr->check_tcy($_POST["site"]);
 
if ($pr == "") {$pr="0";}
if ($tcy == "") {$tcy="0";}
 
//выводим результат
echo($_POST["i"]." ".$pr." ".$tcy);
?>

Описание самого класса (tcy_pr.class.php) приводить не буду, с ним вы можете ознакомиться, скачав скрипт по ссылке в конце поста. Отмечу, что работу утилиты можно сделать “еще более асинхронной” :-) , ведь на данный момент при выполнении каждого запроса к серверу по каждому сайту определяются последовательно ТИЦ и PR, а можно отправлять по каждой пузомерке отдельный запрос! Это я оставляю для домашнего задания. :-)

Скачать утилиту массовой проверки ТИЦ и PR
Утилита массовой проверки ТИЦ и PR в действии

P.S. Как видите оказалось не так сложно было реализовать асинхронное взаимодействие, ведь на самом деле библиотека JQuery работает по-умолчанию в этом режиме. Для лучшего понимания этих процессов советую ознакомиться со статьей jQuery и Ajax: запросы. У меня на сегодня все.

Комментарии:

  1. Сергей

    Можно было и не внедрять ajax, эх было бы у меня свободное время… так хочется покодить :)

  2. Юрий

    Спасибо большое. Буду использовать

  3. Pensioner

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

  4. Diz

    Проще взять уже готовый скрипт, вот например здесь:
    http://www.samborsky.com/news/298/

  5. Николай

    Pensioner за ваши деньги любой каприз )))

  6. пошив штор

    спасибо будем пользоваться

  7. Pipe

    Спасибо отличный скрипт, хорошо раскоментирован и все понятно…

  8. саша

    спасибо!! только бы сортировку еще и кликабельные ссылки с открытием в новой вкладеке.

  9. Diz

    Ок! Замечания принимаются, сделаю.

  10. Sliper

    Просмотрел много скриптов, описанный выше подошол больше всего, спасибо автору. Только вот скрипт нужен был для бесплатного хостинга, а там проблема с CURL. В итоге пришлось доработать, теперь этот скрипт работает через сокеты, также быстро и красиво, кому интересно взять можно здесь: http://sliper.webservis.ru/tcy_pr.ZIP

  11. Игорь

    Спасибо будем юзать.

  12. Андрей

    Описание неплохое, попытаюсь понять теперь принцип работы кода.

  13. Korzh

    И что, гугл не банит никого после первой 1000 url’ов?

  14. seo-roma

    Спасибо, попробую, оценю

  15. seo-roma

    Жаль, что не программка онлайн, я так бы был бы рад)

  16. World-networks

    Файл удалён с сервера, выручайте, перезалейте.
    Очень нужен класс определения тица, если возможно, вышлите на mail.
    Спасибо

  17. Александр

    Скриптом можо парсить через прокси (чтоб небыло бана после первой 1000 url’ов), для этого вместо курл запросов или как некоторые предлагают через сокеты, нужно грабить через file_get_contents.

    Вот кусочик переделанной функции (програмисты даже любители разберутся):

    function getpr($url,$proxy) {
    global $googlehost,$googleua;
    $ch = getch($url);
    if($proxy!=”)$aContext = array(‘http’ => array(‘proxy’ => ‘tcp://’.$proxy,’request_fulluri’ => True,),);
    else $aContext = array(‘http’ => array(‘request_fulluri’ => True,),);
    $cxContext = stream_context_create($aContext);
    $fp = file_get_contents(‘http://’.$googlehost.’/search?client=navclient-auto&ch=’.$ch.’&features=Rank&q=info:’.$url, False, $cxContext);
    $prprom=explode(‘:’, $fp);
    $pr=trim($prprom[2]);
    return $pr;
    }

  18. Spy Mobile

    Через file_get_contents пост запросы принимают порядка 60% сайтов, надежнее всетаки курл или сокеты, для тех у кого и с тем и с другим проблемы есть очень старый SNOPPI клас, работает почти как курл, поддерживает и прокси и куки – работает через сокеты.