сравнивание текста

linmsqn

Участник
Автор темы
337
9
как сделать отправку уведомления при изменении одного параметра?

Python:
URL_TEMPLATE = "ссылка"
read = requests.get(URL_TEMPLATE)
soup = bs(read.text, "html.parser")
t_info = soup.find_all('p', class_='one')
for info in t_info:
    print(info.text)

принт info.text вывод текущее время указанное на странице, но мне надо сделать сравнивание по типу если время на странице совпадает с текущим временем на пк - отправлять определенное уведомление, либо также отправить принт. но как это осуществить - я не знаю, есть предположения через while True, но мне кажется это хрень

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

linmsqn

Участник
Автор темы
337
9
В каком формате время в переменной info.text?

ДД.ММ.ГГГГ ЧЧ:мм:сс? Или там без даты, просто часы, минуты и секунды?
Вообще юниксе, но я не смог сравнить время с питона и сайта, потому что в питоне там юникс типа с точностью до каких-то там миллисекунд

чуть позже отвечу короче
 
D

deleted-user-494704

Гость
Вообще юниксе, но я не смог сравнить время с питона и сайта, потому что в питоне там юникс типа с точностью до каких-то там миллисекунд

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

linmsqn

Участник
Автор темы
337
9
Накидай тогда примеров, какое время ты парсишь с сайта и какое должно быть на компе)
время с сайта в формате чч:мм:сс
PHP:
date("H:i:s", $row['time']) 
#время с сайта, в time - в unix-формате

Python:
t = time.localtime()
current_time = time.strftime("%H:%M:%S", t)
print(current_time)

#в том же формате получаю и уже на самом компе
 
D

deleted-user-494704

Гость
Так, окей, с временем понятно.

Теперь нужно больше подробностей про отправку уведомлений.
Как выполняется программа? Парсим один раз, собираем время и потом каждый раз нужно отправлять уведомление в это время? Сколько может быть таких нотифов? Может ли быть дубликат времени? Если есть возможность описать весь процесс(не вдаваясь в детали, если это необходимо) - будет круто.
 
  • Нравится
Реакции: linmsqn

linmsqn

Участник
Автор темы
337
9
Так, окей, с временем понятно.

Теперь нужно больше подробностей про отправку уведомлений.
Как выполняется программа? Парсим один раз, собираем время и потом каждый раз нужно отправлять уведомление в это время? Сколько может быть таких нотифов? Может ли быть дубликат времени? Если есть возможность описать весь процесс(не вдаваясь в детали, если это необходимо) - будет круто.

смотри, время которое берется на сайте - время из бд(там это время идет как последнее отправленное сообщение). типо если время = времени которое на компе - отправляется уведомление, это работает так скажем как проверка чисто.

со сравнением времени я уже разобрался, просто не разобрался с отправкой уведомлением именно когда ВРЕМЯ С САЙТА = ВРЕМЯ НА КОМПЕ

так как время с сайта меняется там через какое-то время(в зависимости когда след. пост будет), то мне нужно чтобы это работало всегда, а не только когда я сам скрипт запущу. то есть тупо 24/7 сравнивалось время с сайта со временем на пк
 
D

deleted-user-494704

Гость
Окей, тогда под этот флоу нужно другой подход)
Если время рендерится на сайте, как "последнее редактированеи" - нет смысла сравнивать с текущей датой на компьютере.
Мы можем хранить последнюю дату в переменной и сравнивать каждый раз с ней.

Python:
last_datetime = None

while True:
    # тут парсим сайт
    date_time = "12:44:15" # допустим, мы получили такую строку после парсинга

    if last_datetime != date_time and last_datetime is not None:
        send_notification()
        last_datetime = date_time
    # Ждем секунд 5 и повторяем
    time.sleep(5)

Я так понимаю, что у тебя там, условно, форум с темами. И дат может быть много. Есть возможность тянуть урлу/идентификатор темы?
Если да, то лучшим вариантом будет такой:

Python:
import time  # не забыть для time.sleep

# Пишем все в дикт. Ключ - идентификатор, значение - последнее изменение
topic_updates = {}

while True:
    URL_TEMPLATE = "ссылка"
    read = requests.get(URL_TEMPLATE)
    soup = bs(read.text, "html.parser")
  
    # тут мы тянем блок "темы"
    topics = soup.find_all('div', class_='topic')  # Селектор поменять на свой
    for topic in topics:
        unique_identifier = topic.find('a', class_='redirect')  # тут тоже нужно посмотреть где там ссылка лежит внутри
        topic_update = topic.find('p', class_='one')
        previous_topic_update = topic_updates.get(unique_identifier.text, None)
        if previous_topic_update != topic_update.text:
            topic_updates[unique_identifier.text] = topic_update.text
            send_notification()  # тут логика нотификаций, лучше отдельной функцией. Туда сразу можно передать название темы, ссылку и т.д.
    # Ждем 5 секунд, можно больше, главное чтоб сайт не увалил тебя за ботинг)
    time.sleep(5)

Тут может рейзится какой-то еррор, потому что я не проверял код, но алгоритм работы я думаю понятен)
Если что - пиши, будем чинить)
 
  • Нравится
Реакции: linmsqn