Я думаю, что у вашего заголовка есть ответ: используйте базу данных. Простой способ достижения sh вашей цели - создать таблицу, в которой URL-адрес перечисления используется в качестве первичного ключа таблицы, и ограничить таблицу таким образом, чтобы это значение было уникальным (если предпочитаемая БД уже не требует, чтобы первичный ключ был уникальным). Для простоты здесь я буду предполагать, что вы будете go с sqlite3
, поскольку с ним легко начать работу, и он имеет хорошую поддержку python с обширной документацией .
Также, для простоты, я предполагаю, что у вас есть два процесса: один, который сканирует списки и добавляет их в вашу базу данных, и один процесс, который сканирует новые записи и отправляет их в виде уведомлений.
Отсюда есть ряд подходов, которые вы могли бы предпринять для достижения sh вашей цели только отправки новой информации. Если у вас есть только один процесс, сканирующий вашу базу данных и отправляющий уведомления, достаточно просто добавить столбец, который отслеживает, был ли вам отправлен конкретный листинг или нет. В качестве схемы вы можете определить таблицу со столбцами:
CREATE TABLE listings(
url TEXT PRIMARY KEY,
title TEXT,
image_link TEXT,
sent_to_notifications INT);
Поскольку SQLite изначально не поддерживает логические значения, вы можете просто использовать 1/0 как True / False в поле sent_to_notifications
. Теперь, когда вы захотите просмотреть новые списки в вашей базе данных, вы можете получить список всех из них, например: SELECT * FROM listings WHERE sent_to_notifications=0;
. Затем, после отправки уведомления для конкретной записи, UPDATE listings SET sent_to_notifications=1 WHERE url="url_that_was_just_sent";
. Конечно, вы можете настроить это так, чтобы обновлять весь пакет сразу, но я просто даю один из возможных вариантов того, как атаковать такую проблему.