Бд sqlalchemy + парсер в одном файле(Бд и парсер с прокси), не могу соединить с ботом aiogram телеграмм
Уже не могу пару дней ничего сделать, пришлось даже вернуться к старой версии бота, которую я написал ранее. Таблица вроде бы как работает, но как я включаю бота (связал их) вылазит ошибка:
AttributeError: 'ProactorEventLoop' object has no attribute '_ssock'
Пробовал что только можно, каждый раз мне показывает что ошибка в:
if __name__ == '__main__':
executor.start_polling(dp,
skip_updates=True)
Проблема в том, что раньше у меня все работало, пока я не решил добавить прокси, так как меня забанили за запросы на сайте, и как я добавил это прокси, всё пошло по не тому пути (этот прокси мне уже жизнь испортил, напоминаю прокси от Tor, это такой браузер).
Бот:
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
from confagig import TOKEN
from aiogram.types import ReplyKeyboardRemove, \
ReplyKeyboardMarkup, KeyboardButton, \
InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.dispatcher.filters import Text
from aiogram.types import CallbackQuery
from aiogram.dispatcher.filters import CommandStart
from aiogram.dispatcher import FSMContext
import asyncio
import logging
from aiogram.dispatcher.filters.state import StatesGroup, State
from aiogram.contrib.fsm_storage.memory import MemoryStorage
import logging
from aiogram.types import CallbackQuery
import confagig
import os
from aiogram.types import InputFile
import aiogram.utils.markdown as md
from aiogram.types import ParseMode
from aiogram.utils import exceptions
from aiogram.utils.markdown import text
from aiogram.types import ContentType
import aiogram
from sukabaka import UserData, UserDating, session
logging.basicConfig(level=logging.INFO)
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def cmd_start(message:types.Message):
await message.answer('Добро пожаловать в бота, скинь txt файл в формате Логин:Пароль')
@dp.message_handler(content_types=types.ContentTypes.DOCUMENT)
async def handle_text_document(message: types.Message, state: FSMContext):
"""
Обработчик файла .txt. Сохраняет файл, читает его содержимое и сохраняет логин и пароль в базу данных.
"""
# Проверяем, что файл .txt
if message.document.mime_type == "text/plain":
# Получаем информацию о файле
file_info = await bot.get_file(message.document.file_id)
file_path = file_info.file_path
# Скачиваем файл
file_name = message.document.file_name
await bot.download_file(file_path, f'./{file_name}')
# Читаем содержимое файла
with open(file_name, 'r') as file:
file_lines = file.readlines()
# Извлекаем логин и пароль из каждой строки файла
for line in file_lines:
login, passwd = line.strip().split(':')
# Проверяем, есть ли в базе данных объект с такими параметрами
user_data = session.query(UserData).filter_by(login_in_site_start=login, passwd_on_site_start=passwd).all()
if not user_data:
# Если объекта нет, то создаем его и добавляем в базу данных
user_data = UserData(login_in_site_start=login, passwd_on_site_start=passwd)
session.add(user_data)
session.commit()
if __name__ == '__main__':
executor.start_polling(dp,
skip_updates=True)
БД+парсер(парсер с прокси от Tor, забанило на сайте пытаюсь прокси внедрить, без прокси все работает):
import requests
import fake_useragent
from bs4 import BeautifulSoup
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import time
import socks
import socket
import logging
from aiogram import types
import os
logging.basicConfig(level=logging.ERROR)
logging.basicConfig(level=logging.INFO)
socks.set_default_proxy(socks.SOCKS5, "localhost", 9050)
socket.socket = socks.socksocket
os.environ['http_proxy'] = 'socks5h://localhost:9050'
engine = create_engine('sqlite:///mydatabase.db', echo=True)
Base = declarative_base()
class UserData(Base):
__tablename__ = 'dauns'
id = Column(Integer, primary_key=True)
login_in_site_start = Column(String)
passwd_on_site_start = Column(String)
user_id = Column(Integer)
class UserDating(Base):
__tablename__ = "dlya_si"
id = Column(Integer, primary_key=True)
name_on_site = Column(String)
which_group_on_site = Column(String)
how_many_comment = Column(String)
when_reg = Column(String)
here_was = Column(String)
user_id = Column(Integer)
user_agent = fake_useragent.UserAgent().random
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)
session = DBSession()
user_agent = fake_useragent.UserAgent().random
header = {'User-Agent': user_agent}
link = "https://anime1.animebesst.org/"
# Получаем все записи из таблицы UserData
users = session.query(UserData).all()
# Итерируемся по всем пользователям и выводим их логины и пароли
for user in users:
username = user.login_in_site_start
password = user.passwd_on_site_start
data = {
'login_name': username,
'login_password': password
}
session = requests.Session()
d = session.post(link, data=data, headers=header)
time.sleep(2)
link_on_profile = f'https://anime1.animebesst.org/user/{username}/'
print(link_on_profile)
response = session.get(link_on_profile)
time.sleep(2)
soup = BeautifulSoup(response.text, 'html.parser')
all_info = soup.find('ul', class_= 'ul-stat')
full_name1 = all_info.find_all('li')[0].text
full_name2 = all_info.find_all('li')[1].text
full_name3 = all_info.find_all('li')[2].text
full_name4 = all_info.find_all('li')[3].text
full_name5 = all_info.find_all('li')[4].text
time.sleep(2)
DBSession = sessionmaker(bind=engine)
db_session = DBSession()
# Ищем запись в базе данных
user_in_db = db_session.query(UserDating).filter_by(name_on_site=full_name1).first()
if user_in_db is None:
# Если записи нет, добавляем ее
user_in_sukaba = UserDating(name_on_site=full_name1, which_group_on_site=full_name2, how_many_comment=full_name3, when_reg=full_name4, here_was=full_name5)
db_session.add(user_in_sukaba)
db_session.commit()
else:
# Если запись уже существует, обновляем ее значения
user_in_db.which_group_on_site = full_name2
user_in_db.how_many_comment = full_name3
user_in_db.when_reg = full_name4
user_in_db.here_was = full_name5
db_session.commit()
db_session.close()
Помогите я вас прошу, я сейчас скинусь, я больше не могуууу.