июля 18, 2010 | by Макс | Многие из вас наверняка используют для продвижения своих проектов, такую популярную вещь как покупка ссылок и статей “навсегда”. Этот метод имеет очень много плюсов и, в долгосрочной перспективе, несомненно, выгоден. Но у него есть один большой недостаток – ваша честно купленная ссылка может в один прекрасный день быть просто снята, разместившим её вебмастером. Что же делать? Ответ очевиден – нам необходимо средство контроля размещения ссылок. Не спешите бежать на биржу фрилансеров и искать и исполнителя, ведь написание этого скрипта – не такое сложное дело как кажется на первый взгляд. Постоянные читатели журнала наверняка помнят, что в одной из статей мы подробно разбирали процесс написания простого парсера на PHP. Настало время продолжить наши обучающие уроки для SEO-программистов и написать скрипт проверки ссылок на наличие. Давайте не будем оригинальничать и в качестве средства разработки выберем все тот же старый, добрый PHP. Итак, с чего начнем? Предлагаю для начала обсудить алгоритм работы скрипта. Что же он должен делать?
А ничего особенного: проверить наличие данной ему ссылки на всех страницах, которые мы ему предложим, сигнализируя нам, если вдруг на какой-то из страниц, вдруг её не окажется. А если её там не окажется, то что? Правильно, значит недобросоветсный вебмастер коварно снял её и должен понести за это суровое, но весьма справедливое наказание Начнем с разработки интерфейса. Не стоит изображать из себя Артемия Лебедева и пытаться сделать все красиво – это же обычный инструмент, от которого требуется только стабильная и корректная работа. Поэтому создадим файлик checker. php и впишем в него следующее содержимое, которое создаст нам форму и отрисует элементы управления: URL для поиска:
Проверяемые адреса:
У меня получилась вот такой разброс контролов: Принцип работы прост: вводим в верхнее поле URL, наличие которого мы будем проверять, а в нижнее – список URL, на которых мы покупали ссылки или статьи. Далее, нажимаем “Начать проверку” и скрипт пробегаясь по каждому URL из списка, пытается отыскать там нашу ссылку. Если это ему удается, то он выводит [OK], если нет – [NOT FOUND]. Двигаемся дальше. Под кодом формы добавляем следующий код. if (isset($_POST) and! empty($_POST['url'])) { if ($_POST['url']{strlen($_POST['url'])-1}!==”/”) $_POST['url'] .= “/”; // если адрес не оканчивается на слеш, то дописываем его в конец, тем самым унифицируя адрес $_POST['url'] = str_replace(“/”, “\/”, $_POST['url']); // экранируем слеши в адресе для последующей подстановки в строку $sites = explode(“\n”, $_POST['sites']); // разбиваем текст из “Проверяемых адресов” на отдельные URL и загоняем их в массив foreach ($sites as $site) // начинаем пробегаться по всему массиву проверяемых URL’ов if (!empty($site)) { // здесь будем скачивать страницу и проверять на ней искомый URL } } Теперь настало время написать самую важную часть кода, отвечающую, непосредственно, за скачивание проверяемой страницы и поиску в ней нашей ссылки. Этот код вам уже, скорее всего, знаком по старой статье про парсер на PHP, поэтому сильных трудностей он вызвать не должен. Его необходимо вставить в эту, уже имеющуюся у нас конструкцию: if (!empty($site)) { // здесь будем скачивать страницу и проверять на ней искомый URL } Вот, собственно, код, который нужно вставить $ch = curl_init (); // инициализация curl_setopt ($ch, CURLOPT_URL, $site); // адрес страницы для проверки curl_setopt ($ch, CURLOPT_USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7″); // каким браузером будем прикидываться curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1 ); // нам нужно вывести загруженную страницу в переменную $content = curl_exec($ch); // скачиваем страницу curl_close($ch); // закрываем соединение if(preg_match_all(”/.*/isU”, $content, $matches)) // ищем ссылку с нашим URL echo “[OK] $site ”; // найдена else echo “[NOT FOUND] $site ”; // не найдена flush(); // сразу выводим результат на экран, не дожидаясь окончания работы скрипта Отлично, самое время протестировать работу нашего скрипта. Введем несколько URL на которых точно имеются ссылки на наш сайт и пару адресов без ссылок на него. Вот такие результаты мы получили. В принципе все верно, но как всегда есть одно “но”. Дело в том, что я точно знаю, что на уканной для проверки статьи на блоге shakin. ru точно присутствует ссылка на блог maksis. ru! В чем же дело? Все просто – дело в том, что Михаил Шакин, когда составлял эту статью, сослался не на главную страницу блога WestSEO, а на одну из его статей, поэтому наш тестер и подумал, что ссылки нет. Можно, конечно, оставить все как есть, предположив, что этот чекер нам нужен для проверки точных адресов, но я, все же, предлагаю его немного доработать, добавив пару строчек кода. И очень желательно сделать проверку точного соответствия адреса опциональной, чтобы инструмент был гибче. Поэтому давайте добавим небольшой переключатель в код формы, как раз после контрола textarea.
искать дочерние URL сайта Так, с интерфейсом разобрались. Теперь перейдем к части кода, ответственной непосредственно за работу скрипта. Для корректного поиска ссылок на внутренние страницы нашего домена, нам необходимо изменить регулярное выражение, снабдив его, заодно, условием, которое будет обрабатывать положение переключателя “искать дочерние URL сайта”. Для этого заменим вот этот участок кода: if(preg_match_all(“/.*/isU”, $content, $matches)) // ищем ссылку с нашим URL на этот: if (isset($_POST[’deep_search’])) $regex_str = “/.*/isU”; // если галочка установлена – ищем как ссылки на главную, так и ссылки на внутренние страницы else $regex_str = “/.*/isU”; // в противном случае – только на главную. if(preg_match_all($regex_str, $content, $matches)) // ищем ссылку с нашим URL Проверяем, что у нас получилось и остаемся довольны результатом В принципе, скрипт закончен, но остается еще одна м