parser_version2
/
osnovaTG.py
141 строка · 6.4 Кб
1import asyncio2from aiogram import Bot, Dispatcher, types3from aiogram.filters import Command4from aiogram.types import FSInputFile5from aiogram import Router6from test2 import parse_and_save7
8TOKEN = "7032031280:AAEjXQh-WNlqfY2el6a7cj0PtUvJNh-vLM0"9CHANNEL_ID = "-1002157028324"10
11bot = Bot(token=TOKEN, timeout=60)12dp = Dispatcher()13
14router = Router()15dp.include_router(router)16
17# Файлы для хранения ссылок и ключевых слов
18LINKS_FILE = "links.txt"19KEYWORDS_FILE = "keywords.txt"20NAME_CHANNEL = "name.txt"21
22# Чтение данных из файлов при запуске
23def read_file(file_path):24try:25with open(file_path, 'r', encoding='utf-8') as file:26return [line.strip() for line in file.readlines() if line.strip()]27except FileNotFoundError:28return [] # Возвращаем пустой список, если файл не найден29
30
31# Запись данных в файл
32def write_to_file(file_path, data):33with open(file_path, 'a', encoding='utf-8') as file:34file.write(data)35
36# Инициализация массивов ссылок и ключевых слов
37a = read_file(LINKS_FILE)38poisk = read_file(KEYWORDS_FILE)39NameChannel = read_file(NAME_CHANNEL)40
41
42#Инцилизация для записи данных в txt документ
43# a1 = write_to_file(LINKS_FILE)
44# poisk1 = write_to_file(KEYWORDS_FILE)
45# NameChannel1 = write_to_file(NAME_CHANNEL)
46
47# Инициализация массива названий (может остаться пустым или заполняться по мере добавления каналов)
48nazvanie = []49
50# Асинхронная функция для отправки обработанных данных в канал
51async def send_parsed_data():52while True:53try:54# Передаем массивы a, nazvanie и poisk в функцию parse_and_save55file_path = parse_and_save(a, nazvanie, poisk)56
57# Отправляем Excel файл в канал58document = FSInputFile(file_path) # Используем FSInputFile для отправки файла59await bot.send_document(CHANNEL_ID, document)60print("Файл успешно отправлен в канал.")61
62except Exception as e:63print(f"Произошла ошибка: {e}")64
65# Ожидание перед следующим выполнением (10 минут)66await asyncio.sleep(900)67
68# Команда start для запуска бота
69@router.message(Command(commands=["start"]))70async def start(message: types.Message):71await message.answer("Бот запущен. Файлы будут отправляться каждые 15 минут.")72await message.answer("""Всего есть три команды:73/start - Запуск бота
74/add_keyword - добавление ключевых слов в поиск
75
76Если бот не отвечает, то он скорее всего парсирит данные из телграмм каналов.""")77
78# # Команда для добавления ссылки на канал и его названия
79# @router.message(Command(commands=["add_channel"]))
80# async def add_channel(message: types.Message):
81# try:
82# # Ожидаем, что пользователь введет данные в формате: ссылка, название
83# await message.answer("Введите ссылку и название канала через запятую.")
84# except Exception as e:
85# await message.answer(f"Произошла ошибка: {e}")
86
87# # Обработка сообщения с текстом, содержащим запятую (для добавления канала)
88# @router.message(lambda message: ',' in message.text and not message.text.startswith('/'))
89# async def process_channel(message: types.Message):
90# try:
91# # Разделяем введенные данные
92# data = message.text.split(',')
93# if len(data) == 2:
94# link, name = data[0].strip(), data[1].strip()
95# a.append(link) # Исправлено с a1 на
96# nazvanie.append(name)
97
98# # Записываем ссылку в файл
99# write_to_file(LINKS_FILE, link)
100
101# # Записываем название канала в файл
102# write_to_file(NAME_CHANNEL, name)
103
104# await message.answer(f"Канал '{name}' успешно добавлен!")
105# else:
106# await message.answer("Ошибка ввода. Пожалуйста, введите данные в формате: ссылка, название.")
107# except Exception as e:
108# await message.answer(f"Произошла ошибка: {e}")
109
110# Команда для добавления ключевого слова
111@router.message(Command(commands=["add_keyword"]))112async def add_keyword(message: types.Message):113try:114await message.answer("Введите ключевое слово для добавления в поиск.")115except Exception as e:116await message.answer(f"Произошла ошибка: {e}")117
118# Обработка произвольного текста для добавления ключевых слов
119@router.message(lambda message: not message.text.startswith('/') and message.text.strip() not in poisk)120async def process_keyword(message: types.Message):121try:122keyword = message.text.strip()123poisk.append(keyword) # Добавляем ключевое слово в массив124
125write_to_file(KEYWORDS_FILE, keyword + '\n') # Добавляем в файл с новой строки126await message.answer(f"Ключевое слово '{keyword}' успешно добавлено!")127except Exception as e:128await message.answer(f"Произошла ошибка: {e}")129
130# Функция для запуска основного цикла с парсингом
131async def on_startup():132asyncio.create_task(send_parsed_data()) # Запуск парсинга в фоновом режиме133
134# Запуск бота
135async def main():136await bot.delete_webhook(drop_pending_updates=True)137await on_startup() # запуск фона для парсинга138await dp.start_polling(bot)139
140if __name__ == "__main__":141asyncio.run(main())142