@cosmo__energy

Нужна помощь в написание граббера для Telegram на Python?

Здравствуйте, есть написанный код для граббера постов из чужих каналов в свой. Хотелось бы добавить фильтрацию постов. Ибо часто происходит так, что в двух каналах публикуется одна и та же новость, ну и граббер публикует 2.
Как лучше организовать фильтрацию?

from telethon import TelegramClient, events
from telethon import errors
import asyncio
import re
# ----
api_id = *
api_hash = *
# ----
channels = *
# -----
KEYS = {
    *
}
# ----
Bad_Keys = ['биткоин', 'биток', 'ставки', 'казино']
# ----
tags = *
# добавление текста к посту, если не надо оставить ковычки пустыми ""
# ----
with TelegramClient('myApp13', api_id, api_hash) as client:
    print("~Activated~")

    @client.on(events.NewMessage(chats=channels))
    async def Messages(event):
        if not [element for element in Bad_Keys
                if event.raw_text.lower().__contains__(element)]:
            text = event.raw_text
            for i in KEYS:
                text = re.sub(i, KEYS[i], text)
            if not event.grouped_id\
                    and not event.message.forward:
                try:
                    await client.send_message(
                        entity=my_channel,
                        file=event.message.media,
                        message=text + tags,
                        parse_mode='md',
                        link_preview=False)
                except errors.FloodWaitError as e:
                    print(f'[!] Ошибка флуда ждем: {e.seconds} секунд')
                    await asyncio.sleep(e.seconds)
                except Exception as e:
                    print('[!] Ошибка', e)
            elif event.message.text and not event.message.media\
                and not event.message.forward\
                    and not event.grouped_id:
                try:
                    await client.send_message(
                        entity=my_channel,
                        message=text + tags,
                        parse_mode='md',
                        link_preview=False)
                except errors.FloodWaitError as e:
                    print(f'[!] Ошибка флуда ждем: {e.seconds} секунд')
                    await asyncio.sleep(e.seconds)
                except Exception as e:
                    print('[!] Ошибка', e)
            elif event.message.forward:
                try:
                    await event.message.forward_to(my_channel)
                except errors.FloodWaitError as e:
                    print(f'[!] Ошибка флуда ждем: {e.seconds} секунд')
                except Exception as e:
                    print('[!] Ошибка', e)

    @client.on(events.Album(chats=channels))
    async def Album(event):
        text = event.original_update.message.message
        print(text)
        if not [element for element in Bad_Keys
                if text.lower().__contains__(element)]:
            for i in KEYS:
                text = re.sub(i, KEYS[i], text)
            try:
                await client.send_message(
                    entity=my_channel,
                    file=event.messages,
                    message=text + tags,
                    parse_mode='md',
                    link_preview=False)
            except errors.FloodWaitError as e:
                print(f'[!] Ошибка флуда ждем: {e.seconds} секунд')
                await asyncio.sleep(e.seconds)
            except Exception as e:
                print('[!] Ошибка', e)

    client.run_until_disconnected()
  • Вопрос задан
  • 594 просмотра
Пригласить эксперта
Ответы на вопрос 2
@MaxKra1985
разработчик java, python
Подключить базу данных и сохранять сграбленные посты в неё.
Перед публикацией сграбленной новости проверять на её наличие в базе данных.

Если с базой данных сложно - сделай глобальный список и работай с ним.
Отличие в том что после перезапуска граббера он будет чиститься.
Ответ написан
Комментировать
@georg2005
Я не программист, но я должен подключить эту прогу, нашел ее на lolz в посте еще от 2017 года. Я вставляю все данные, запускаю и мне выдают такую ошибку:

Подскажите пожалуйста, что это значит, я уже весь интернет просмотрел, надежда на форум
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы