ZennoPoster + Mysql

VERTUS

Client
Регистрация
20.06.2018
Сообщения
7
Благодарностей
0
Баллы
1
Здравствуйте, возможно ли реализовать такой функционал:
ZennoPoster чекает базу данных mysql и в случае если добавлена новая строка (к примеру с web проекта) берет оттуда информацию и выполняет задачу, после чего заносит результат работы в базу в указанную таблицу и это должно происходить циклично.
Большое спасибо!
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113
возможно. Только нужно определиться с тем, по каким критериям шаблон будет определять новую строку
 

VERTUS

Client
Регистрация
20.06.2018
Сообщения
7
Благодарностей
0
Баллы
1
возможно. Только нужно определиться с тем, по каким критериям шаблон будет определять новую строку
Спасибо за ответ, понял вопрос. К примеру если строка которая поступила с WEB проекта имеет статус false но после обработки скриптом он ей навесит статус true, это будет хорошее решение?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113
Спасибо за ответ, понял вопрос. К примеру если строка которая поступила с WEB проекта имеет статус false но после обработки скриптом он ей навесит статус true, это будет хорошее решение?
как вариант. Работа подразумевается в один поток?
 

VERTUS

Client
Регистрация
20.06.2018
Сообщения
7
Благодарностей
0
Баллы
1
Да, для моих текущих задач одного потока хватит.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Ребята, дай теплиз пару примеров кубика.
Нужно брать данные из таблицы mysql, после работы с ними ставить им метку. что бы повторно не использовать.

Как заносить данные в бд я разобрался:
2020-04-18_163220.png


Вот так выглядит таблица:

2020-04-18_163205.png



2020-04-18_163146.png





Короче нужна таже задача что описана в первом посте.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Нужно добавить поле status, которое будет обозначать работал-ли шаблон уже со строкой или еще нет.

Соответственно берете в работу только строки где status=0. а после работы устанавливаете status=1 ( что бы больше эту строку не брать)

Изменить статус строки можно SQL запросом UPDATE ... примерно так:

UPDATE work SET status=1 WHERE id=123
 
  • Спасибо
Реакции: Kostass

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
P.S описанное выше - это подойдет только для однопоточной работы (!)

Если же потоков может быть много, то менять статус нужно сразу при взятии строки в работу + позаботиться о том что бы разные потоки одновременно не взяли одну и ту же строку в работу. Для этого можно использовать, например, LOCK TABLE, но делать это из стандартного кубика врядли получиться
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
У меня пока что один поток только.

Подскажите пожалуйста еще как взять строку из БД, со статусом "0", и как игнорировать со статусом "1" ?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
У меня пока что один поток только.

Подскажите пожалуйста еще как взять строку из БД, со статусом "0", и как игнорировать со статусом "1" ?
SELECT id, login, pass FROM work WHERE status=0 LIMIT 1
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
  • Спасибо
Реакции: WebBot

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Подскажите пожалуйста еще, после выполнения, мне нужно помимо смены значения status, обновить 10 полей в таблице новыми данными.
Как правильно выполнить UPDATE work SET (10 переменных) WHERE id=0 ?
За ранее огромное спасибо.
 

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Редактор форума не дает вставить, поэтому картинкой
Посмотреть вложение 54117
Спасибо. Сейчас еще столкнулся со сложностью.

Код:
UPDATE `work` SET  `q1`='{-Variable.q1-}', `q2`='{-Variable.q3-}', `q3`='{-Variable.q3-}', `q4`='{-Variable.q4-}', WHERE `id`='{-Variable.id-}';
Можно ли как то не заменять значение если переменная пустая?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Можно ли как то не заменять значение если переменная пустая?
предварительно проверять переменные на пустоту и формировать запрос только с непустыми переменными
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
WebBot огромное вам спасибо, практически все реализовал.
Осталось только определится с тем как лучше всего чекать БД на новые данные со статусом "0".

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

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
Пока реализовал таким образом!

2020-04-19_161203.png


Скажите если работа бота планируется 24/7, имеет ли смысл, делать какие-то паузы цикле запросов к БД, + хотя бы раз в час полностью перегружать шаблон или просто инстанс?
Обновления БД, будет не часто, может раз в 2-5 минут.
 

Crucifer

Client
Регистрация
23.06.2014
Сообщения
120
Благодарностей
82
Баллы
28
Скажите если работа бота планируется 24/7, имеет ли смысл, делать какие-то паузы цикле запросов к БД, + хотя бы раз в час полностью перегружать шаблон или просто инстанс?
Обновления БД, будет не часто, может раз в 2-5 минут.
У вас я так понял быстро выполняется шаблон. Используйте просто планировщик встроенный в зеннопостер, раз в минуту запуск шаблона. Запустится, проверит базу, если надо перезапишет данные, закончит работу. Каждую минуту будет запускаться снова.

Я не вижу все действия вашего шаблона, но если сложная логика и длительное выполнение то можно сделать проверку времени выполнения, например на unixtime.
При первом запуске получаете значение в переменную unixtime и потом в процессе выполнения периодически сравнивайте изменение на нужную величину и если оно будет превышено то остановка шаблона через:

C#:
ZennoPoster.StopTask(Guid.Parse(project.TaskId));
А планировщик так же будет запускать его.
 
Последнее редактирование:
  • Спасибо
Реакции: Kostass

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Если обновления как вы написали раз в 2-5 минут, то обычным расписанием ZP запускайте шаблон, например, каждую минуту. Если шаблон обнаруживает что есть новая запись со статусом 0, то делает все что должен делать, если нет, то просто завершает работу.
 
  • Спасибо
Реакции: Kostass

Kostass

Client
Регистрация
20.12.2010
Сообщения
144
Благодарностей
9
Баллы
18
С планировщиком вобще нечего не понятно.
Шаблон у меня сложный, выполнятся может до 3 минут.

Пока сделал вот такой костыль. Обращение к БД раз в 1 сек. Если за час в бд небыло не одного обновления, успешное завершение / полный перезапуск шаблона.

2020-04-21_001638.png
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)