Tobbot - многофункциональный инструмент вебмастера

TOBBOT
На сайте с 04.11.2014
Offline
41
#111

Сегодня утром я получил письмо с просьбой написать модуль для удаления страниц из индекса Яндекса: https://webmaster.yandex.com/delurl.xml Для решения данной задачи мне понадобилось не более 15 мин. При этом большая часть времени ушла на изучение и тестирование различных поведений сервиса.

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

Шаг 1.
Изучение сервиса.

Запускаем снифер запросов, которые передает браузер в процессе "общения" с сайтами. Я рекомендую использовать бесплатный снифер Fiddler2, но можно ограничиться и простым плагином HttpFox к браузеру Firefox.

Открываем страницу сервиса и вводим различные адреса (правильные и неправильные, проиндексированные и нет) и записываем ответы сервера на отправленные запросы.

Шаг 2.
Создание модуля.

Согласно справочнику разработчика модули должны иметь следующую архитектуру:

Обязательными являются файлы и директории выделенные на схеме красным цветом

Поэтому создаем следующие директории и файлы:

  • В директории modules/ программы создаем директорию с модулем Del URL Yandex/
  • Переходим в указанную директорию и создаем файл columns.txt и директорию actions/
  • Переходим в директорию actions/ и создаем файл действия Del.txt

В результате этого у нас получилось 2 текстовых файла:

  • columns.txt - содержит заголовки колонок модуля
  • del.txt - содержит кодом действия удаления URL из Яндекс

Для удаления адресов нам потребуется указать их URL, поэтому откроем файл columns.txt и вставим туда всего одну строку:

url

Теперь откроем файл Del.txt и запишем туда следующий код действия:


// устанавливаем случайный User-Agent
... "modules/Common Files/Actions/Set random useragent.txt"

// открываем форму запроса на удаление URL
URL_GET "https://webmaster.yandex.com/delurl.xml"

// парсим скрытые поля формы
VAR_RE form_key, http_body, "name=\"key\" type=\"hidden\" value=\"(.*?)\""
VAR_RE form_sk, http_body, "type=\"hidden\" name=\"sk\" value=\"(.*?)\""

// загружаем капчу в кодировке BASE64 и передаем ее на распознавание OCR сервису
CHARSET "BASE64", http_body
URL_GET "https://i.captcha.yandex.net/image?key=", form_key
CHARSET "", http_body
VAR_CAPTCHA captcha_text, http_body, "0","0","0","0","4","10","0"

// отправляем запрос на удаление
// переменные с префиксом row_ содержат значения данных из таблицы,
// т.е. переменная row_url содержит адрес страницы, которую нужно удалить
URL_POST "https://webmaster.yandex.com/delurl.xml"
"url", row_url
"do", "remove"
"rep", captcha_text
"key", form_key
"sk", form_sk

// проверяем ответ сервера на наш запрос
SCRIPT
// если задание выполнено
if ((http_body.indexOf('The URL will be removed shortly') > 0) ||
(http_body.indexOf('not indexed') > 0)) {
// выполняем команду DONE (выполнено успешно)
return 'DONE';
}
// если задание не может быть выполнено
if ((http_body.indexOf('There is no reason to delete this URL') > 0) ||
(http_body.indexOf('protocol is not supported') > 0) ||
(http_body.indexOf('Invalid URL') > 0)) {
// выполняем команду UNDONE (не может быть выполнено)
return 'UNDONE';
}
// если капча распознана неверно, то задание переносится на следующий цикл
if (http_body.indexOf('Incorrect CAPTCHA code') > 0) return 'LOG "Incorrect CAPTCHA code"';

Важно! Созраняем все файлы в кодировке UTF-8 без BOM.

Поздравляю! Ваш модуль готов к работе ☝

Скачать готовый модуль Del URL Yandex.

Инструменты интернет-маркетинга - JLAB (http://jlab.io/) Бесплатная автоматизация с программой TOBBOT (http://tobbot.com/)
Petrz
На сайте с 05.04.2011
Offline
107
#112

Не работает AddURL модуль в Яндекс... ошибка в логах

? 1;2;3;Error at line #26 (Captcha: ERROR_ZERO_CAPTCHA_FILESIZE)

? Error at line #7 (CP-1251)

Прокси отличные, ********а оплачена, но в нее даже ничего не предается. Аккаунты рабочие (проверил) Что-то не так. Посмотрите пожалуйста. Возможно причина в том, что яша перед входом в акк стал выводить капчу.

TOBBOT
На сайте с 04.11.2014
Offline
41
#113

Petrz, Яндекс стал просить капчу на вход если страна входа отличается.

В текущей версии модуля нет распознавания капчи на вход, вот и не видит капчу.

Поскольку вводить по 2 капчи вместо 1 - затратно, то сейчас пишется новая версия программы, где будут добавлены API функции по работе с сессиями (IP адрес, юзерагент, куки), что позволит запоминать хорошие сессии и значительно сократить расходы на капчу.

Релиз ожидается в течение этой недели.

Petrz
На сайте с 05.04.2011
Offline
107
#114
TOBBOT:
Petrz, Яндекс стал просить капчу на вход если страна входа отличается.
В текущей версии модуля нет распознавания капчи на вход, вот и не видит капчу.

Поскольку вводить по 2 капчи вместо 1 - затратно, то сейчас пишется новая версия программы, где будут добавлены API функции по работе с сессиями (IP адрес, юзерагент, куки), что позволит запоминать хорошие сессии и значительно сократить расходы на капчу.

Релиз ожидается в течение этой недели.

Возможно ли реализовать тогда как-то иначе подключение аккаунтов яндекс? А то неудобно каждый раз вставлять акки для каждой ссылки, которую нужно добавить в addurl. Ну чтобы логин-пароль модуль брал из файла допустим, а пользователю единственное что необходимо было для старта, это добавить URL's списком...

Удивительно
На сайте с 07.07.2009
Offline
216
#115
TOBBOT:
если страна входа отличается

отличается от чего?

Качественная семантика недорого ( https://moab.tools/ )
Petrz
На сайте с 05.04.2011
Offline
107
#116
Удивительно:
отличается от чего?

Ну прокси с разных стран если, как я понимаю.

Удивительно
На сайте с 07.07.2009
Offline
216
#117
Petrz:
Ну прокси с разных стран если, как я понимаю.

Это если страна регистрации аккаунта и страна авторизации отличаются? Об этом речь?

TOBBOT
На сайте с 04.11.2014
Offline
41
#118
Petrz:
Возможно ли реализовать тогда как-то иначе подключение аккаунтов яндекс? А то неудобно каждый раз вставлять акки для каждой ссылки, которую нужно добавить в addurl.

В такой схеме при проблемах с частью аккаунтов довольно сложно будет изменинь задание и продолжить работу.

Удивительно:
Это если страна регистрации аккаунта и страна авторизации отличаются? Об этом речь?

Да, об этом.

TOBBOT
На сайте с 04.11.2014
Offline
41
#119

Добавлена функция SESSION: разрешает/запрещает потоку использовать текущую сессию (cookie + proxy) при работе над следующим заданием.

Добавлена функция VAR_SESSION: позволяет узнать кол-во выполненых заданий через текущую сессию.

Где же это может пригодится? При выполнении заданий где требуется предварительная авторизация, например:


// проверка сессии: новая или старая
// а) если начата новая сессия, то идет авторизация в админку
// б) если продолжается старая, то этап авторизации пропускается
VAR_SESSION sessions_counter
SCRIPT if (sessions_counter > 0) return 'GOTO "Already authorized"'

// авторизация в админку
URL_POST "http://example.com/wp-login.php"
"log", "admin"
"pwd", "qwerty"
"wp-submit", "Войти"
"redirect_to", ""http://example.com/wp-admin/"
"testcookie", "1"

LABEL "Already authorized"

// устанавливаем флаг передачи текущей сессии в следующее задание
SESSION+

// выполнение работ внутри админки
//...
//...

Появилась новая версия модуля Add URL Yandex.

В работе модуля использованы функции конроля сессии, что позволило сократить расходы на капчу и увеличить скорость.

J
На сайте с 25.12.2009
Offline
87
#120

что-то сайт не работает

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий