Вторник , 19 Март 2024
ДомойПубликацииМассовая проверка ИКС: скрипт на PHP

Массовая проверка ИКС: скрипт на PHP

31 августа 2018 Яндекс официально отказался от традиционного тИЦ из-за его морального устаревания. При этом, пользователи были успокоены: на замену «плохому» показателю пришёл «хороший» — ИКС (индекс качества сайта).

Оставим в стороне моральную и этическую сторону вопроса замена одной пузомерки другой. Не будем рассуждать и строить теории относительно формулы расчёта — благо, это делают СЕО-гуру, до которых мне расти и расти. Мы остановимся на более приземлённом, а именно: получении значения параметра ИКС.

Параметр Яндекс ИКС

Если хотите просто получить скрипт — перейти к ссылке на скачивание.

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

Теперь представим, что Вы захотели проверить ИКС группы сайтов. Причём, не только своих (для этого достаточно добавить сайты в панель Webmaster), но и конкурентов. Можно воспользоваться одним из сервисом массовой проверки, но они (насколько мне известно) имеют некоторые ограничения на число одновременно проверяемых сайтов. Для решения данной проблемы я сделал небольшой скрипт. Его можно залить на свой хостинг и самостоятельно устраивать массовые проверки. Либо сделать ещё один сервис «массовой проверки ИКС», бесплатно и без регистрации.

Как это работает

Как я уже говорил, мне известны 2 способа: через запрос к панели Вебмастера и посредством получения картинки. В скрипте реализован второй вариант. Конечно, «в лоб» и через ЯВ-панель проще получить параметр, но там, если не ошибаюсь, может вылазить капча. Значит, нужно будет заставлять пользователей или расшифровывать эти самые капчи, или ожидать ответа, пока скрипт не обратится к одному из сервису-разгадывателю (порядка 15 секунд). Если запросов будет слишком много, Яндекс может просто заблокировать IP (да, это сервер, на котором расположен Ваш сайт).

Друзья, это моё предположение. Если Яндекс на самом деле не банит адреса при тысячах запросов, сообщите пожалуйста в комментариях. Реализация этого метода будет проще и поможет снизить нагрузку на хостинг при проверке.

Вариант с изображением картинок лишён данного недостатка. Пару лет назад у меня приводилось немного аналитики по тИЦу для русских доменов. Для написания статьи на сервера Яндекс было отправлено более 6 миллионов (!) запросов, при этом ни разу не получил бан по IP.

Итак, с скрипту. Он совершает запрос на получение «экс-денежки» и переводит графическое представление ИКС в текстовое. Эдакий FineReader в миниатюре. Ну да, всего-то.

Немного о реализации

Ранее я делал рабочий скрипт «расшифровки» тИЦ с картинки-денежки. Там использовался не очень хороший метод, который подразумевал предварительное «обучение» этого скрипта.

Сначала нужно было получить изображение, вырезать из него кусок, который может содержать значение. После этого к картинке применялось несколько фильтров, а затем пиксели переводились в такой вид:

тИЦ в текстовом виде

Далее, для каждого знака в расчёт брались только «важные пиксели» (составляющие символ), на основании чего формировались маски. Для указанного примера была такая штука:

'7,12,15,3,3,7,9'     => 'C',
'1,2,5,8,11,10,7,4,1' => 'Y',

Т. е. в первом ряду буквы C было 7 важных пикселей (единицы), во втором — 12, потом 15, 3 и т. д.

Главный недостаток этого подхода — при разных значениях тИЦ какие-то пиксели могли выпадать или появляться (классическое сглаживание + перевод картинки в формат .gif). Поэтому в процессе обучения для цифры 0 (ноль) появилось три маски:

'7,13,5,2,15,11' => '0',
'7,13,6,2,15,11' => '0',
'8,13,6,3,15,11' => '0',

Самой сложной оказалась цифра 8, она со временем разрослась до 8 масок.

Подход, который использую сейчас, более продвинутый. Сначала так же нужно получить картинку с параметром и вырезать оттуда определённую область. После чего изображение переводится в текст: фон помечается точкой, пиксели другого цвета — буквой x.

В данной версии скрипта цвет фона жёстко завязан на текущий — 0x878787. В дальнейшем, если Яндекс решит-таки его менять, можно будет добавить первичный проход по изображению с целью получить главенствующий цвет, который и является фоном.

После следует выбрасывание пустых (не значимых) рядов, состоящих целиком из фона. А далее формируется «вытянутая» последовательность для очередного символа. Каждый символ имеет размер 8×11, кроме цифры 1 — у неё 5×11.

Осталось довольно простое действо: «набираем» очередной символ и сравниваем его с эталонными — YandexIks::$reference. Для сравнения используется встроенная в PHP функция similar_text(). Функция возвращает количество совпадающих символов. В качестве граничного значения принимаю отклонение в 9%, что составляет 81+ для всех символов, кроме единицы — для её «узнавания» нужно 51 или больше. Если мои разъяснения не понятны, читайте подробности по ссылке выше или смотрите код.

Скачать PHP скрипт для массовой проверки ИКС

Отказ от ответственности
Скачивая данный скрипт Вы соглашаетесь, что все возможные последствия от его использования берёте на себя. Скрипт поставляется «как есть», без каких-либо гарантий. Автор ни в коей мере не несёт ответственности за любой возможный ущерб — как прямой, так и косвенный. Если Вы с этим не согласны, не скачивайте файлы и не устанавливайте их на свои сервера.

Скрипт тестировался в PHP версий 5.4+ и 7.0+

Для скачивания нажмите кнопку ниже:

Скачать скрипт массовой проверки ИКС

Актуальная версия — 1.1

После этого распакуйте архив и залейте его на свой хостинг. Содержание архива:

  • YandexIks.php — главный класс, с помощью которого можно получать значения параметра ИКС.
  • example.php — пример работы со скриптом.
  • readme.txt — отказ от ответственности.

Пример использования

Для получения значения ИКС нужно скопировать YandexIks.php на свой хостинг, после чего подключить его. Для работы следует использовать метод getValueFromImage(), а в качестве параметра передать домен.

Если класс расположен в директории с рабочим скриптом, для вывода значения параметра ИКС код будет такой:

include_once 'YandexIks.php';
echo 
YandexIks::getValueFromImage('google.ru');

Либо распакуйте скачанный архив и залейте его на сервер. После чего скрипт вызывается через адресную строку браузера:
vash.site/put/do/skripta/example.php

Пример работы со скриптом:
Параметр Яндекс ИКС

По сути, всё просто до безобразия: в текстовое поле вводится группа доменов, нажимается кнопка ok и… всё, ожидается результат.


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


Об ошибках и пожеланиях можете писать в комментариях. Как первое, так и второе, не факт что окажется реализованным, но 100% будет прочитано.

Рейтинг: 1

Автор публикации

2 070
не в сети 11 месяцев

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (9 голосов, в среднем: 4,67 из 5)
Загрузка...

49 комментариев

  1. Хороший скрипт. Параметр ИКС совсем новый и ещё не все сервисы реализовали проверку данного значения. Но думаю, что в будущем на сервисах можно будет проверять ИКС без каких либо ограничений по количеству. smile

    Рейтинг: 2
    • Александр, спасибо на добром слове smile
      Честно говоря, мне не очень понятно, для чего люди пользуются какими-то сервисами для определения такого рода параметров. Ладно PR от Гугл, там, если не ошибаюсь, подобного не было. Но что ТИЦ раньше, что ИКС сейчас, можно получить с помощью сервисов Яндекса. Если требуется массовая проверка… а зачем? Свои сайты почти наверняка в панели Вебмастера есть, а чекать сотни/тысячи конкурентов в сервисах — долго, вряд ли кто согласится бесплатно предоставить неограниченную проверку доменов.
      В любом случае, со скриптом появилось чуть больше выбора. Хочешь — пользуешься панелью Вебмастера. Хочешь — заливаешь скрипт себе на хостинг и проверяешь домены в количествах, которое позволит система.

      Рейтинг: 1
  2. Вы меня заинтересовали smile , нужно будет установить скрипт на сайт!

    Рейтинг: 2
  3. Анди, а в сайтбаре можно данный скрипт подключить?

    Рейтинг: 2
    • Андрей,
      доброго дня.
      Самый простой способ — через айфрейм. Залить скрипт на хостинг, после чего подключить (совсем как ролики с ютуба):

      <iframe src="/путь/к/скрипту/example.php" width="100%" height="300"></iframe>

      Тогда будет даже без перезагрузки страницы работать. Собственно, в этой статье так и сделано)
      Если хотите полноценно интегрировать, то понадобится чутка поколдовать, что можно сделать с помощью одного из плагинов, позволяющих выполнять PHP-код, либо править файл темы и интегрировать туда.
      Но я всё же рекомендую iframe юзать, как более простое решение. Просто заходите в виджеты, добавляете новый, и меняете example.php под себя, чтобы надпись/текстовая область влезали без горизонтального скролла.

      Рейтинг: 1
  4. Так и хочется сказать про ТИЦ и ИКС — хрен редьки не слаще. Но может, все к лучшему? И еще. Почему Анди — может делать толковые скрипты, а сервисы — нет? smile

    Рейтинг: 2
    • Дима,
      вот и я думаю, зачем этот ИКС нужен) Может, Яндекс с бирж имеет-таки процент какой.
      Сервисы делать скрипты могут, но им главное, чтобы люди по рекламе кликали, а с бесплатных скриптов, в таком случае, не заработать.

      Рейтинг: 1
  5. Молодец, респектую) Технология отгадывания капчи в такой насущной проблеме)) drinks

    Рейтинг: 1
  6. Огромное спасибо за статью и скрипт, пригодятся.

    Рейтинг: 1
  7. Привет, дружище, огромное спасибо за скрипт. Но у меня две просьбы 1) можешь сделать так, чтобы домены без икс вообще не показывались ? 2) нельзя ли организовать выгрузку доменов в excel ?

    Рейтинг: 1
  8. Залил всё на хостинг и не чего не заработало.

    Рейтинг: 1
  9. Пасаны? Как сделать что б с нулевым ИКСОМ не отображалось домены? А то так шлака много пересматривать надо.

    Рейтинг: 1
  10. Может быть кому-то будет полезно,

    1. Для работы не подойдёт PHP старой версии. Если вы получаете ошибку «Parse error: syntax error, unexpected ‘[‘ in» — обновите PHP.
    2. Если у вас скрипт не получает параметры, удостоверьтесь, что вы подключили библиотеку php_openssl.dll в php.ini, подробнее: stackoverflow.com/questions/5444249/unable-to-find-the-wrapper-https-did-you-forget-to-enable-it-when-you-config
    3. Ограничение времени, если проверка проходит не до конца, необходимо создать файл .htaccess и в нём написать: php_value max_execution_time 10000 или любое другое значение в секундах. Сам я поменял значение глобально в php.ini -> max_execution_time.

    Я столкнулся сразу с двумя проблемами, и раз решение бесплатное, решил так же поделиться решениями возможных проблем. Наверняка ведь кто-то ещё будет ставить по старинке на денвер или xampp.

    Успехов! И спасибо за бесплатное решение.

    Рейтинг: 2
    • Здравствуйте.
      Огромное спасибо за дополнение!
      Касательно символа [ — да, решил что уже можно использовать. С выхода PHP 5.4 прошло более 6.5 лет, и конструкцию array() можно заменить «новой» — []
      Про ssl — как-то даже не подумал; ситуации же и правда разные бывают.
      А по ограничению времени несколько ранее обсуждали. Правда, не всегда настройки разрешают правки лимита в скрипте или .htaccess или php.ini запилить,(

      Рейтинг: 1
  11. Благодарю!

    Рейтинг: 2
  12. Спасибо за скрипт smile

    Рейтинг: 1
  13. Евгений Молдовану

    example_to_csv.php работает только для 1 домена. Первого. Остальные не хочет проверять.

    Рейтинг: 2
    • Евгений, здравствуйте!
      Тут 2 варианта вижу: либо Вы используете ось от Apple, где перевод строки \r, либо ИКС есть только у одного домена.
      По первому пункту — добавил замену разных переводов строки на один универсальный.
      По второму — специально так делал, чтобы домены без параметра не попадали в результирующий файл, для некоторых это было важно. Но Вы правы, подобное поведение не особо интуитивно, поэтому тоже исправил, чтобы выводилось всё. Тем более, что сортировку в Экселе никто не отменял.

      Рейтинг: 1
      • Евгений Молдовану

        Нет у меня Хром и Windows. Проблема возникает не всегда.

        Такой вопрос — вчера пару часов убил на попытку понять как сформировать POST запрос для скрипта example_to_csv.php
        Думал как обычно отслежу в консоли, но почему то там запрос не отображается.
        Как передать POST с внешнего источника, к примеру программы
        пробовал типа example_to_csv.php?domainlist=devvver.ru&submit=ok и другие варианты но что то не работает.

        Рейтинг: 1
        • Здравствуйте.
          POST-запрос с помощью ссылки или адресной строки браузера отправить невозможно. В вебе для этого исторически используют формы) Другой вариант — AJAX, т. е. запрос с помощью JavaScript, но придётся заморочиться с кроссдоменными запросами.
          Из пыха проще отправлять post-запросы с помощью curl. На страничке есть соответствующие примеры.

          Рейтинг: 1
  14. Евгений Молдовану

    Для Яндекса не выдает значение

    Рейтинг: 2
  15. Здравствуйте. Этот скрипт проверяет только рабочие сайты? Если домен заблочен или удалённый, то результатов не будет?

    Рейтинг: 1
    • Валерий, здравствуйте.
      С праздником! smile

      Скрипт обращается к Яндексу. Если в его базе содержится — результат будет.
      Другой вопрос, насколько часто Яндекс обновляет/подчищает базу. Но, тут уже подсказать не могу.

      Рейтинг: 1
  16. Здравствуйте. Подскажите, куда именно вставлять строки:

    set_time_limit(0); // снять ограничение времени
    ignore_user_abort(TRUE); // если пользователь отсоединился — игнорировать

    И как ограничить количество проверяемых доменов — если использовать скрипт как сервис для пользователей. Например, прописать, что за один раз проверка не более 1000 доменов.

    Спасибо большое!

    Рейтинг: 0
    • Здравствуйте.
      В идеале — перед кодом, который должен выполняться очень долго. В каждый скрипт пихать не нужно, мало ли где ошибка зацикливания окажется, в результате каждая копия будет работать вечно, а потом и до лимитов дойдёт, так что сайты слягут.
      Ограничить просто: подсчитывать количество уже прочеканных доменов, и когда их станет 1000 — сделать в цикле break. Или сразу оставить только 1000 доменов, остальные отбросить.

      Рейтинг: 0
  17. Извините, но я не силен в Ваших терминах. Что значит: «сделать в цикле break», объясните по простому — что и куда нужно внести. И в какой файл скрипта вносить строки ограничения времени перед кодом?

    Рейтинг: 0
  18. Если вы получаете ошибку «Parse error: syntax error, unexpected ‘[‘ in» — как выше сказали, у вас старая версия PHP.
    Для запуска на старой версии заменить строки в файле YandexIks.php :

    строка 14 private static $reference = заменить на private static $reference = array
    строка 15 [ заменить на (
    строка 25 ]; заменить на );
    строка 54 $arr = []; заменитьна $arr = array();

    удачи!

    Рейтинг: 1
    • Здравствуйте.
      Спасибо за дополнение.
      Вы правы, конструкция [] появилась почти 8 лет назад, в пыхе 5.4, так что на древних версиях языка такого рода несовместимость можно словить. Правда, уже пых 7.4 зарелизили. Пора бы с ≤5.3 слезать)

      Рейтинг: 0
  19. Я поставил скрипт на 000webhost и скрипт не работает, даже страница не появляется. Подскажите что нужно сделать?

    Рейтинг: 0
  20. Все заработало. Но когда я загружаю домены 100 и более, то выдает ошибку:»504 Gateway Time-out»
    То-есть время вышло, но я изменил файл .htaccess на время 10000000000 секунд но все равно ошибка «504 Gateway Time-out». Как поступать с такой ошибкой

    Рейтинг: 0

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять