if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.create_task(all_monitoring())
executor.start_polling(dp, on_startup=on_startup)
conn = await asyncio.open_connection('google.com', 443)
, тормозит при потере соединения секунд на 40 иногда. Можно ли это исправить?from aiogram import executor
from loader import dp
from utils.notify_admins import on_startup_notify
from utils.set_bot_commands import set_default_commands
import handlers
async def on_startup(dispatcher):
await set_default_commands(dispatcher) # Устанавливаем дефолтные команды
await on_startup_notify(dispatcher) # Уведомляет админов про запуск
if __name__ == '__main__':
executor.start_polling(dp, on_startup=on_startup)
как я только не пытался запустить, в итоге или бот работает или мониторинг. import asyncio
import logging
from icecream import ic
ic.configureOutput(includeContext=True)
logger = logging.getLogger("name") # Создаем логгер
fileHandler = logging.FileHandler('logs.log') # создаем хэндлер и формат для записи в файл
fileFormat = logging.Formatter("[%(asctime)s] %(message)s")
fileHandler.setLevel(logging.WARNING) # устанавливаем уровень хэндлера и добавляем к логгеру
fileHandler.setFormatter(fileFormat)
logger.addHandler(fileHandler)
async def ping_google():
try:
conn = await asyncio.open_connection('google.com', 443)
ic()
except Exception as ex:
logger.warning(ex)
await asyncio.sleep(1)
ic()
return False
else:
await asyncio.sleep(1)
ic()
return True
async def start_monitoring():
ic("Мониторинг сетевого подключения начат.")
logger.warning(f"\n Мониторинг сетевого подключения начат.")
async def mon_net_connection(ping_freq=3):
ping = asyncio.create_task(ping_google())
if await ping:
await asyncio.sleep(ping_freq)
ic("True - Сетевое соединение установлено")
logger.warning("True - Сетевое соединение установлено")
else:
ic("False - Сетевое соединение недоступно")
logger.warning("False - Сетевое соединение недоступно")
await asyncio.sleep(ping_freq)
reply = asyncio.create_task(mon_net_connection())
await reply
async def testing(sec=5):
while True:
await asyncio.sleep(sec)
print(f'---- 5 секунд прошло')
async def main():
tasks = [
start_monitoring(),
mon_net_connection(),
testing()
]
await asyncio.gather(*tasks)
asyncio.run(main())
async def ping_google():
try:
conn = await asyncio.open_connection('google.com', 443)
except Exception as ex:
print(ex)
return False
else:
return True
ping = asyncio.run(ping_google())
import sqlite3
from sqlite3 import Error
import requests
from bs4 import BeautifulSoup
# РАБОЧИЙ ВАРИАНТ
def create_connection(db_file):
"""
create a database connection to the SQLite database
:param db_file: database file
:return: Connection object or None
"""
connection = None
try:
connection = sqlite3.connect(db_file)
except Error as e:
print(e)
return connection
def execute(connection, query, param=None, many=False):
"""
Create a new project into the projects table
:param many: executemany()
:param connection: connect object
:param query: sql query to execute
:param param: tuple of values
"""
cursor = connection.cursor()
if param is None:
cursor.execute(query)
else:
if many:
cursor.executemany(query, param)
else:
cursor.execute(query, param)
connection.commit()
def parsing(url):
"""
Parsing URL to get product name, price, link
:param url: connect object
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 '
'Safari/537.3'}
response = requests.get(url, 'html.parser', headers=headers)
soup = BeautifulSoup(response.text, features='html.parser') # TODO: features='lxml'
category_site = soup.find_all('span', class_="inline-title")
all_items = soup.find_all('div', class_='porto-products wpb_content_element')
result = []
for n, i in enumerate(category_site):
db_category = i.text
items = all_items[n].find_all('h3')
price = all_items[n].find_all('span', class_='woocommerce-Price-amount amount')
link = all_items[n].find_all('a', class_='product-loop-title')
for m, q in enumerate(items):
db_item = q.text
db_price = price[m].text.replace("руб.", "")
db_url = link[m].get('href')
db_list = (db_category, db_item, db_price, db_url)
result.append(db_list)
return result
def run_parsing():
target_url = 'https://pri****'
database = "identifier.sqlite"
create_query = "CREATE TABLE IF NOT EXISTS goods(category TEXT,item TEXT, price TEXT,url TEXT);"
insert_query = "INSERT INTO goods(category, item, price, url) VALUES (?, ?, ?, ?) ;"
conn = create_connection(database)
with conn:
execute(conn, create_query)
r = parsing(target_url)
# вставляем по одной строке за раз
# for elem in r:
# execute(connection=conn, query=insert_query, param=elem)
# вставляем весь список кортежей за раз
execute(connection=conn, query=insert_query, param=r, many=True)
# if __name__ == '__main__':
# run_parsing()
from aiogram import types
from aiogram.dispatcher import FSMContext
from loader import dp
@dp.message_handler(state=None)
async def bot_echo(message: types.Message):
await message.answer(f"Инфа:\n"
f"{message.from_user}")