Проверка обратной ссылки по данных Яндекс.Вебмастер средствами PHP

Здравствуйте, уважаемые посетители моего блога Курилка.co.ua. Несмотря на развитие алгоритмов поисковых систем, индекс цитирования — остается актуальным. Обмен ссылками не теряет своей привлекательности, как и ухищрения в этом процессе.

В своей заметке: «Скрипт проверки наличия обратной ссылки» — я предлагал одно из решений, которое позволяет проверить наличие обратной ссылки. В тоже время, говорить, что оно позволит вам «спать спокойно» будет не правдой.

Понятно, что нам необходимо более надежное решение. Одно из таковых я и предлагаю. Компания Яндекс, идя на встречу веб-мастерам, предоставила такой сервис как Яндекс.Вебмастер. Кликнув по ссылке «Мои сайты» и авторизовавшись, вы имеете возможность получить доступ к весьма полезные данным добавленных и прошедшим подтверждение «прав на управление» сайтам. В нашем случае это «внешние ссылки на страницы сайта»: Индексирование сайта > Входящие ссылки > Внешние.

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

http://webmaster.yandex.ru/site/indexed/links_from.xml?host=[ID хоста]&path=*&fromhost=[хост сайта]

где ID хоста — уникальный идентификатор сайта в системе Яндекс.Вебмастер, а хост сайта — хост (домен) сайта на котором производится проверка наличия ссылки. Всё это конечно хорошо, но не столь удобно как хотелось бы.

Разработчики компании Яндекс это тоже понимаю. Потому предоставили возможность получения всех внешних ссылок в виде одного архива. Для этого нужно зайти на страницу «Настройки» (ссылка в верхнем правом углу, сразу под вашим логином). В левой колонке найдите ссылку «Выгрузка внешних ссылок» — кликаем. На открывшейся странице установите галочку «Я хочу выгружать внешние ссылки в виде архива» и кликаем «Сохранить». Архив сформируется в течение недели и в дальнейшем будет обновляться еженедельно. Адрес доступа к архиву имеет следующий вид:

http://webmaster.yandex.ru/downloads/offline_links.gz.xml?host=[ID хоста]

К слову, ссылка на архив у меня появилась несколько раньше, чем сформировался архив, так что не спешите жаловаться в службу поддержки из-за того, что архив не качается. Просто подождите ещё пару дней.

Но вот архив сформирован и мы его скачали. Для одного из моих сайтов такой архив весит 3,5 Мб, а содержащийся в нем файл все 44 Мб. Дело в том, что в нем содержатся все внешние ссылки: со всех сайтов, со всех страних — плюс адреса и тексты ссылок. Понятно, что обработка такого файла несколько затруднительна. Особенно если речь идет о том же виртуальном хостинге.

Извечный вопрос: «что делать?» — я решил путем создания php-скрипта предварительной обработки, позволивший уменьшить объем данных до вменяемых 33 Кб. Не вдаваясь в подробности, скажу лишь, что скрипт читает исходный файл ($source) и записывает обработанные данные – фрагментами, небольшими кусочками длинной в 8192 байт. Основная фишка заключается в отслеживании так называемого «переноса каретки» и отсечения обработанных данных. В результате скрипт формирует файл ($resource) из названий хостов (доменов) сайтов, разместивших ссылку на ваш сайт.

Следует учесть, что исходный файл данных предоставлен в кодировке UTF-8. Для корректной работы php-скрипта я использую mbstring функции. Если вы тоже используете сборку Денвер, для своего локального сервера, то возможно вам будет полезным знать, что для подключения этих функций вам понадобиться раскомментировать следующую строку:

;extension=php_mbstring.dll

т.е. убрать перед ней знак точки с запятой (;). Ко всему прочему, есть еще и соответствующие настройки для этого модуля. Я использовал только две из них, привожу уже с установленными значениями:

mbstring.language = Russian
mbstring.internal_encoding = UTF-8

Если не ошибаюсь, то для установки кодировки прямо в php-скрипте можно воспользоваться функцией:

mb_internal_encoding("UTF-8");

Также, стоит обратить внимание на время обработки скрипта. У меня это заняло несколько секунд, но тем не менее. Как я понимаю, за время обработки отвечает опция:

max_execution_time = 30

В данном случае – 30 секунд. Однако, можно увеличить это время и из php-скрипта используя функцию:

set_time_limit(30);

В данном случае к 30 имеющимся секунда добавляется ещё 30.

Сам же скрипт предварительной обработки данных по внешним ссылкам Яндекс.Вебмастер можно скачать здесь. Спасибо за внимание.