Zennoposter Рандомное Условие

А когда добавим туда данные - получим примерно такую табличку с данными: Естественно, что эти SQL запросы можно выполнить и в Зеннопостере как с использованием стандартных действий, так и используя "Свой C код". Раньше я всегда использовал стандартные кубики, так как знаний, как работать с своим кодом было недостаточно.

Когда же разобрался маленько - начал использовать эту возможность - оказалось, что так куда удобнее, так как прямо в одном кубике можно и сформировать запросы и отправаить их и обработать результат. Ниже я предоставлю фрагменты кода с описанием действий - их можно будет просто скопировать и вставить в один кубик "Свой C код", не смотря на то, что здесь он будет разбит на логические блоки.

При выполнении запросов в Зеннопостере есть возможность отправлять запросы, которые не требуют возврата значения - например запросы, которые добавляют данные возвращают количество добавленных строк, запросы которые обновляют данные - возвращают количество измененных строк. Так вот переменная rezult будет хранить в себе это значение как результат выполненного запроса.

ExecuteNonQuery query, null, ZennoLab. Это делается для того, чтобы не появилась ошибка при попытке создания этой таблички в следующих запросах. После этого выполняется уже сам запрос к базе данных, результат выполнения которого сохранится в переменной rezult. И уже в конце выводится уведомление в лог с содержимим переменной rezult.

Сейчас уже мы будем отправлять запрос, который будет в нашей базе данных создавать табличку site с полями id, url, timestamp, status, positive, negative, messages. Каждый элемент массива - это данные в виде id, url, timestamp, status, positive, negative, messages, которые необходимо подготовить заранее. В запросе для добавления данных в базу данных мы будем использовать всегда только один элемент массива - а значит в любой момент этот массив можно заменить просто на переменную, которая будет содержать значения в этой же последовательности.

Конечно, в базу данных данные можно было бы добавить и по другому - сформировать строку в виде елемент массива для каждого элемента массива, после чего соединить их через запятую и уже потом добавить в SQL запрос. Это отлично работает и экономит количество запросов к базе данных, но, если этот массив с данными будет например на строк - тогда этот запрос может не выполняться такое количество данных можно разбить например по строк, и добавлять их одним запросом - тогда все данные получится добавить всего запросов.

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

Пример многопоточного парсинга в MySQL И так, выше мы подготовили уже для себя табличку с данными в нашей базе данных MySQL и можно приступать к написанию шаблона, который будет работать с базой данных в многопоточном режиме. Так вот одной из проблем, при работе в многопоточном режиме является тот факт, что каждый поток берет одну и ту же строку с базы данных.

И сложно сразу понять, как настроить это смещение. В своих шаблонах я использую несколько "хитростей" которые позволяют мне работать в многопоточном режиме. Одна из них рассчитана на то, что мы можем запустить например 5 потоков одновременно, и необходимо чтобы потоки выстроились в очередь. Добиться этого возможно путем добавления рандомной паузы перед выполнением запроса, которой достаточно для того, чтобы обращения к базе данных разных потоков были не одновременными.

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

Очередная хитрость заключается в том, что сразу же после того, как я получил данные с базы данных я изменяю поле статус для полученной строки например с 0 на 1 или с 1 на 2 или с 2 на 0. В момент изменения данных обновляется поле timestamp и тогда очередные потоки отсортировав табличку уже не смогут сразу получить эту же строку.

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

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

Наверно сложно понять написанный выше текст - давайте рассмотрим сам код шаблона, который решает поставленную в начале статьи задачу.

Возле каждого фрагмента я постараюсь описать зачем он нужен и как это работает - может тогда будет проще разобраться.

Данные фрагменты кода также необходимо будет вставлять в один кубик "Свой C код" смотря на то, что изложил я его здесь на несколько - так проще его прокомментировать. Next 10, , rand.

Next , ; Для того, чтобы когда мы запустим шаблон в многопоточном режиме он сразу не бросился всеми потоками к одной строке необходимо сгенерировать случайную паузу. Делается это кодом, который предложен выше. После его выполнения каждый отдельный поток Зеннопостера будет задерживаться на это значение перед отправкой первого запроса к базе данных.

Не исключаю, что есть какие-то другие способы - но моя цель показать как я пишу шаблоны для Зеннопостера и как выстраиваю логику их корректной работы. Если же Вы считаете что я заблуждаюсь и есть вариант проще и удобнее - добро пожаловать в комментарии. Получили с базы данных site. ExecuteQuery query, null, ZennoLab. Данный запрос берет с базы данных site. Так вот, если этот сайт использовался больше 0 минут назад можно поставить например 1 или 2 или 60 в зависимости от переодичности парсинга новых данных , тогда мы получим site.

Значит, мы должны проверить это и завершить работу выходом по красной ветке. В таком случае, если например пойдет 10 красных срабатываний подряд мы сможем остановить шаблон и запустить его в работу снова через несколько минут расписанием. Но мы не можем быть уверенными, что другой поток уже не использует эту строку из базы данных. Если все успешно - значение 1, если не успешно - значение 0. В этом случае нам необходимо завершить работу шаблона выходом по красной ветке. Именно эту проверку и выход по красной ветке делает данный код.

Если статус изменился Если мы действием выше не вышли по красной ветке, это значит, что статус изменился, а значит мы можем приступить к нашим целевым действиям - например изменить статус с 1 на 2 чтобы иметь возможность отслеживать состояния работы шаблона с каждым конкретным сайтом и после этого уже отправить запрос на получения данных с ВебПроверки. С полученных данных мы сформируем запрос в базе данных, и обновим данные в базе для данного сайта.

Добавляем его в свой Зеннопостер и наблюдаем в логе примерно такую картину: Переписывать данный шаблон можно под любые разные задачи - начиная с парсинга чего-либо и заканчивая ботами для сбора криптовалюты на кранах. Надеюсь, что данная информация по работе Зеннопостером и базой данных MySQL была для Вас полезной - если это так, отправляйте ссылку на статью в социальные сети и оставляйте комментарии.

ZennoPoster SEO многостаночник

Теперь предстояло принять решение. Бросить все и ехать в аэропорт. Вопрос национальной безопасности.

Данный софт выполнен в виде шаблона под ZennoPoster, но он может работать Шаблон берет строку с удалением из входного файла zennoposter.club, заходит на рандомный сайт из файла zennoposter.club, Условия продажи. Я занимаюсь разработкой на ZennoPoster более 5-ти лет и . десятками и сотнями аккаунтов, с рандомными задержками, . Мне интересен момент как ваш шаблон может перестраиваться под условия баунти?. Конструкции языка. if условие · else альтернатива условию · elseif альтернатива условию · switch множественный выбор · for цикл · while цикл · break.

Предыдущая статья: атакуют боты вконтакте

Следующая статья: настройка бота вконтакте