parser_version2

Форк
0
/
osnovaTG.py 
141 строка · 6.4 Кб
1
import asyncio
2
from aiogram import Bot, Dispatcher, types
3
from aiogram.filters import Command
4
from aiogram.types import FSInputFile
5
from aiogram import Router
6
from test2 import parse_and_save
7

8
TOKEN = "7032031280:AAEjXQh-WNlqfY2el6a7cj0PtUvJNh-vLM0"
9
CHANNEL_ID = "-1002157028324"
10

11
bot = Bot(token=TOKEN, timeout=60)
12
dp = Dispatcher()
13

14
router = Router()
15
dp.include_router(router)
16

17
# Файлы для хранения ссылок и ключевых слов
18
LINKS_FILE = "links.txt"
19
KEYWORDS_FILE = "keywords.txt"
20
NAME_CHANNEL = "name.txt"
21

22
# Чтение данных из файлов при запуске
23
def read_file(file_path):
24
    try:
25
        with open(file_path, 'r', encoding='utf-8') as file:
26
            return [line.strip() for line in file.readlines() if line.strip()]
27
    except FileNotFoundError:
28
        return []  # Возвращаем пустой список, если файл не найден
29

30

31
# Запись данных в файл
32
def write_to_file(file_path, data):
33
    with open(file_path, 'a', encoding='utf-8') as file:
34
        file.write(data)
35

36
# Инициализация массивов ссылок и ключевых слов
37
a = read_file(LINKS_FILE)
38
poisk = read_file(KEYWORDS_FILE)
39
NameChannel = 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
# Инициализация массива названий (может остаться пустым или заполняться по мере добавления каналов)
48
nazvanie = []
49

50
# Асинхронная функция для отправки обработанных данных в канал
51
async def send_parsed_data():
52
    while True:
53
        try:
54
            # Передаем массивы a, nazvanie и poisk в функцию parse_and_save
55
            file_path = parse_and_save(a, nazvanie, poisk)
56

57
            # Отправляем Excel файл в канал
58
            document = FSInputFile(file_path)  # Используем FSInputFile для отправки файла
59
            await bot.send_document(CHANNEL_ID, document)
60
            print("Файл успешно отправлен в канал.")
61
        
62
        except Exception as e:
63
            print(f"Произошла ошибка: {e}")
64
        
65
        # Ожидание перед следующим выполнением (10 минут)
66
        await asyncio.sleep(900)
67

68
# Команда start для запуска бота
69
@router.message(Command(commands=["start"]))
70
async def start(message: types.Message):
71
    await message.answer("Бот запущен. Файлы будут отправляться каждые 15 минут.")
72
    await 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"]))
112
async def add_keyword(message: types.Message):
113
    try:
114
        await message.answer("Введите ключевое слово для добавления в поиск.")
115
    except Exception as e:
116
        await message.answer(f"Произошла ошибка: {e}")
117

118
# Обработка произвольного текста для добавления ключевых слов
119
@router.message(lambda message: not message.text.startswith('/') and message.text.strip() not in poisk)
120
async def process_keyword(message: types.Message):
121
    try:
122
        keyword = message.text.strip()
123
        poisk.append(keyword)  # Добавляем ключевое слово в массив
124

125
        write_to_file(KEYWORDS_FILE, keyword + '\n')  # Добавляем в файл с новой строки
126
        await message.answer(f"Ключевое слово '{keyword}' успешно добавлено!")
127
    except Exception as e:
128
        await message.answer(f"Произошла ошибка: {e}")
129

130
# Функция для запуска основного цикла с парсингом
131
async def on_startup():
132
    asyncio.create_task(send_parsed_data())  # Запуск парсинга в фоновом режиме
133

134
# Запуск бота
135
async def main():
136
    await bot.delete_webhook(drop_pending_updates=True)
137
    await on_startup()  # запуск фона для парсинга
138
    await dp.start_polling(bot)
139

140
if __name__ == "__main__":
141
    asyncio.run(main())
142

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.