Работа с Датами публикаций и ее вставкой через ZennoPoster. ( Как бы вы продумали логику?)

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Всем доброго времени суток. Хочу сделать один проект, но застрял на датах и их вставкой. Постараюсь объяснить суть - на примере публикаций в YouTube.

Я походу криво объяснил... В день боту нужно публиковать на месяц вперед - главной задачей есть то, что бы даты публикаций были на каждый день в одно и то же установленное время ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ) по 4 видео в сутки. Если сегодня бот опубликовал - 4 видео - и начинает прямо сейчас грузить 5тое видео, то он дату публикации ставит на завтра, если сегодня же мы загрузили уже 8 видео ( 4 видео на сегодняшнее указанное время + 4 на завтрашнее время), то если бот сегодня будет снова грузить видео - даты должны проставляться на послезавтра - меняется дата - а время остается как прежде ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ) .
При загрузке видео на YouTube - там есть функция - опубликовать в заданное время. У меня стала задача, продумать логику бота так, что бы бот постил 4 видео в день в заданное время (после чего, начинал задавать публикации на след. день ( 12:00, 15:00, 21:00 , 23:00 ) - и так на каждый день.
51633
И тут стал вопрос, как продумать логическую цепочку - что бы бот знал, что он уже допустим сегодня (Mar 8, 2020) загрузил 4 видео и установил время публикаций ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ). Как его заставить понять, что он уже опубликовал все видео за Mar 8, 2020, а теперь нужно - если он загружает след. видео - отталкиваться в установке даты от Mar 9, 2020 ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ) и т.д. ?

Мои варианты построение логики:

1 Вариант
(геморный) Каким-то образом спарсить в блокнот все дни каждого месяца и редактируя список - добавлять строки в формате:

Mar 9, 2020 12:00
Mar 9, 2020 15:00
Mar 9, 2020 21:00
Mar 9, 2020 23:00

Mar 10, 2020 12:00
Mar 10, 2020 15:00
Mar 10, 2020 21:00
Mar 10, 2020 23:00
После чего брать эту строку, разбивать на части и такой переменной - устанавливать дату публикации. - Но это, мне кажется - очень трудозатратно...

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

Суть вопроса: Как бы вы решили данную задачу и с помощью чего? Заранее, очень благодарен за ответ!
 
Последнее редактирование:

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Можно сделать проверку на соответствие промежутку времени, сравнив текущее время и необходимый промежуток.
Если условие между 11:30 и 12:30, то даешь зеленый свет. Если не в этом промежутке, то просто выводишь по "зеленой ветке". И так делаешь 4-ре условия для каждого из временных интервалов.
В планировщике ставишь запуск каждый час.

C#:
if (DateTime.Now.TimeOfDay > new TimeSpan(11, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(12, 30, 0))
{
    //
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(15, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(16, 30, 0))
{
    //
}
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Спасибо, но из-за отсутствия изучения С# - я не понимаю как действуют ваши строчки и как их применить. Есть возможность показать более детально, если отталкиваться от моих часов публикации?
Я даже представить не могу, зачем отсчитывать время которое сейчас - для того, что бы понять на когда делать след. публикацию и как это использовать - тем более сложно понять, что по той зеленой ветке разместить и как в результате узнать, что на сегодня и на завтра уже в очереди стоят видео, что нужно публиковать на послезавтра...
Но если будет тяжело объяснять, то спасибо большое за уже сделанную попытку донести ко мне вашу логику, буду стараться перечитывать много раз и найти закономерность.


Можно сделать проверку на соответствие промежутку времени, сравнив текущее время и необходимый промежуток.
Если условие между 11:30 и 12:30, то даешь зеленый свет. Если не в этом промежутке, то просто выводишь по "зеленой ветке". И так делаешь 4-ре условия для каждого из временных интервалов.
В планировщике ставишь запуск каждый час.

C#:
if (DateTime.Now.TimeOfDay > new TimeSpan(11, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(12, 30, 0))
{
    //
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(15, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(16, 30, 0))
{
    //
}
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
Логика следующая, если тебе необходимо публиковать только в определенное время, то можешь проверять на соответствие этому времени, и если оно не соответствует, то не публиковать.
Если делать на кубиках, то можно построить с помощью свича, на скрине показал, и одной переменной в которую будем передавать значение.
Ставишь запуск шаблона на каждый час, и если он стартанет не в нужное время, то просто выйдет по красной ветке "Red".

Код в условии, берет текущее время "DateTime.Now.TimeOfDay" и сравнивает его с известным временем "new TimeSpan(11, 30, 0)" - это 11:30. И так он делает для каждого интервала. Если ни одно из условий времени не сработало, то отправляем в переменную "n" или выводим по ошибке. А по "зеленой ветке" уже пускаешь постинг, т.к. это соответствует времени постинга.
Если тебе необходимо постить конкретное видео в конкретное время, то просто расширяй свич и отправляй в переменную "result" необходимое значение.
check.png

C#:
if (DateTime.Now.TimeOfDay > new TimeSpan(11, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(12, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(15, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(16, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(20, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(21, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(22, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(23, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else project.Variables["result"].Value = "n";
 

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Я походу криво объяснил... В день боту нужно публиковать на месяц вперед - главной задачей есть то, что бы даты публикаций были на каждый день в одно и то же установленное время ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ) по 4 видео в сутки. Если сегодня бот опубликовал - 4 видео - и начинает прямо сейчас грузить 5тое видео, то он дату публикации ставит на завтра, если сегодня же мы загрузили уже 8 видео ( 4 видео на сегодняшнее указанное время + 4 на завтрашнее время), то если бот сегодня будет снова грузить видео - даты должны проставляться на послезавтра - меняется дата - а время остается как прежде ( 1- 12:00, 2 - 15:00, 3 - 21:00 , 4 - 23:00 ) .



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

Код в условии, берет текущее время "DateTime.Now.TimeOfDay" и сравнивает его с известным временем "new TimeSpan(11, 30, 0)" - это 11:30. И так он делает для каждого интервала. Если ни одно из условий времени не сработало, то отправляем в переменную "n" или выводим по ошибке. А по "зеленой ветке" уже пускаешь постинг, т.к. это соответствует времени постинга.
Если тебе необходимо постить конкретное видео в конкретное время, то просто расширяй свич и отправляй в переменную "result" необходимое значение.
Посмотреть вложение 51639

C#:
if (DateTime.Now.TimeOfDay > new TimeSpan(11, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(12, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(15, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(16, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(20, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(21, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else if (DateTime.Now.TimeOfDay > new TimeSpan(22, 30, 0) && DateTime.Now.TimeOfDay < new TimeSpan(23, 30, 0))
{
    project.Variables["result"].Value = "y";
}
else project.Variables["result"].Value = "n";
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
В день боту нужно публиковать на месяц вперед
Тогда можно создать список дат и времени публикаций, разместить его в списке проекта и брать из этого списка строку с удалением.

C#:
string [] time = new String[]{"11:00","15:00","21:00","23:00"}; // Строка с таймингами

IZennoList lst = project.Lists["lst"]; // Список проекта

for (int d = 1; d < 31; d++) {
    for (int t = 0; t < 4; t++) {
        lst.Add(string.Format("{0} - {1}",d,time[t]));
    }
}
 
  • Спасибо
Реакции: Gunjubasik

Gunjubasik

Client
Регистрация
30.05.2019
Сообщения
3 526
Благодарностей
1 323
Баллы
113
Только дальше другая проблема возникает - каждый месяц имеет свое количество дней 28-30-31, как бы с этой стороны выкрутить ситуацию? Если в итоге мне нужно получить вот такой формат для вставки Mar 9, 2020.


Тогда можно создать список дат и времени публикаций, разместить его в списке проекта и брать из этого списка строку с удалением.

C#:
string [] time = new String[]{"11:00","15:00","21:00","23:00"}; // Строка с таймингами

IZennoList lst = project.Lists["lst"]; // Список проекта

for (int d = 1; d < 31; d++) {
    for (int t = 0; t < 4; t++) {
        lst.Add(string.Format("{0} - {1}",d,time[t]));
    }
}
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
550
Баллы
93
C#:
string [] time = new String[]{"11:00","15:00","21:00","23:00"}; // Строка с таймингами
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US"); // Устанавливаем US стиль
IZennoList lst = project.Lists["lst"]; // Список проекта

for (int d = 1; d <= DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month); d++) {
    for (int t = 0; t < 4; t++) {
        lst.Add(string.Format("{0} {1}, {2} - {3}",DateTime.Now.ToString("MMM"),d,DateTime.Now.Year,time[t]));
    }
}
В общий код необходимо добавить using
C#:
using System.Globalization;
 
  • Спасибо
Реакции: Gunjubasik

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
524
Баллы
93
Нагенерил в текстовой файл длинный список дат, до 2030 года, точнее распарсил календарь (в интернете их достаточно). Формат соблюден, который потом отдельными кубиками брал из строки время и дату. Работа шаблона начиналась с очистки списка до строки с сегодняшней датой, далее каждый поток брал строку с удалением, проверял насколько дней взятая дата отличается от сегодняшней, чтобы соблюдать лимиты запланированной публикации сайта.
 
  • Спасибо
Реакции: Gunjubasik

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