Revert "add queue to bot"

This reverts commit a3bd93d854b26a0e7802d8558dad7f53437d7c49.
This commit is contained in:
Dmitry Afanasyev 2022-08-23 00:57:22 +03:00
parent da55da9584
commit c01a163d1c
2 changed files with 30 additions and 51 deletions

View File

@ -1,20 +1,25 @@
import asyncio import asyncio
from concurrent.futures import ThreadPoolExecutor
from aiogram import Bot, types from aiogram import Bot, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher from aiogram.dispatcher import Dispatcher
from aiogram.utils.callback_data import CallbackData from aiogram.utils.callback_data import CallbackData
from app.core.parse_web import get_driver, parse_site from app.core.logger import logger
from app.core.parse_web import (
configure_firefox_driver,
download_gecko_driver,
parse_site,
)
from app.settings import API_TOKEN from app.settings import API_TOKEN
bot = Bot(token=API_TOKEN) bot = Bot(token=API_TOKEN)
dispatcher = Dispatcher(bot) dispatcher = Dispatcher(bot)
dispatcher.middleware.setup(LoggingMiddleware()) dispatcher.middleware.setup(LoggingMiddleware())
stations_cb = CallbackData('station', 'direction') download_gecko_driver()
driver = configure_firefox_driver()
executor = ThreadPoolExecutor(10) stations_cb = CallbackData('station', 'direction')
def get_keyboard() -> types.InlineKeyboardMarkup: def get_keyboard() -> types.InlineKeyboardMarkup:
@ -39,16 +44,12 @@ async def home_office(
query: types.CallbackQuery, callback_data: dict[str, str] query: types.CallbackQuery, callback_data: dict[str, str]
) -> types.Message: ) -> types.Message:
driver = get_driver() text = parse_site(
driver=driver,
url = ( url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
'https://yandex.ru/maps/213/moscow/stops/stop__9640740/' '?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21',
'?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21' message='Остановка Б. Академическая ул, д. 15',
) )
message = 'Остановка Б. Академическая ул, д. 15'
loop = asyncio.get_running_loop()
text = await loop.run_in_executor(executor, parse_site, url, message, driver)
return await bot.send_message( return await bot.send_message(
query.message.chat.id, text, reply_markup=get_keyboard() query.message.chat.id, text, reply_markup=get_keyboard()
@ -60,16 +61,12 @@ async def office_home(
query: types.CallbackQuery, callback_data: dict[str, str] query: types.CallbackQuery, callback_data: dict[str, str]
) -> types.Message: ) -> types.Message:
driver = get_driver() text = parse_site(
driver=driver,
url = ( url='https://yandex.ru/maps/213/moscow/stops/stop__9640288/?'
'https://yandex.ru/maps/213/moscow/stops/stop__9640288/' 'l=masstransit&ll=37.505338%2C55.800160&tab=overview&z=211',
'?l=masstransit&ll=37.505338%2C55.800160&tab=overview&z=211' message='Остановка Улица Алабяна',
) )
message = 'Остановка Улица Алабяна'
loop = asyncio.get_running_loop()
text = await loop.run_in_executor(executor, parse_site, url, message, driver)
return await bot.send_message( return await bot.send_message(
query.message.chat.id, text, reply_markup=get_keyboard() query.message.chat.id, text, reply_markup=get_keyboard()
@ -89,16 +86,12 @@ async def echo(message: types.Message) -> types.Message:
async def morning_bus_mailing(chat_ids: list[int]) -> None: async def morning_bus_mailing(chat_ids: list[int]) -> None:
driver = get_driver() text = parse_site(
driver=driver,
url = ( url='https://yandex.ru/maps/213/moscow/stops/stop__9640740/'
'https://yandex.ru/maps/213/moscow/stops/stop__9640740/' '?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21',
'?l=masstransit&ll=37.527754%2C55.823507&tab=overview&z=21' message='Остановка Б. Академическая ул, д. 15',
) )
message = 'Остановка Б. Академическая ул, д. 15'
loop = asyncio.get_running_loop()
text = await loop.run_in_executor(executor, parse_site, url, message, driver)
await asyncio.gather( await asyncio.gather(
*[ *[
bot.send_message( bot.send_message(

View File

@ -7,14 +7,10 @@ import wget
from app.core.logger import logger from app.core.logger import logger
from app.settings import BASE_DIR, GECKO_DRIVER_VERSION from app.settings import BASE_DIR, GECKO_DRIVER_VERSION
from selenium import webdriver from selenium import webdriver
from selenium.common.exceptions import ( from selenium.common.exceptions import NoSuchElementException, WebDriverException
NoSuchElementException,
StaleElementReferenceException,
WebDriverException,
)
from selenium.webdriver.firefox import options from selenium.webdriver.firefox import options
from selenium.webdriver.firefox.service import Service from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.webdriver import RemoteWebDriver, WebDriver from selenium.webdriver.firefox.webdriver import WebDriver
def download_gecko_driver() -> None: def download_gecko_driver() -> None:
@ -56,7 +52,7 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
logger.error('Driver is not configured') logger.error('Driver is not configured')
return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.' return 'Что-то пошло не так. :( Драйвер Firefox не сконфигурирован.'
driver.get(url) driver.get(url)
time.sleep(5) time.sleep(1)
elements = driver.find_elements( elements = driver.find_elements(
by='class name', value='masstransit-vehicle-snippet-view' by='class name', value='masstransit-vehicle-snippet-view'
) )
@ -72,6 +68,9 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
bus_300_arrival = element.find_element( bus_300_arrival = element.find_element(
by='class name', value='masstransit-prognoses-view__title-text' by='class name', value='masstransit-prognoses-view__title-text'
) )
except NoSuchElementException:
pass
try:
bus_t19 = element.find_element( bus_t19 = element.find_element(
by='css selector', value='[aria-label="т19"]' by='css selector', value='[aria-label="т19"]'
) )
@ -80,9 +79,6 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
) )
except NoSuchElementException: except NoSuchElementException:
pass pass
except StaleElementReferenceException:
pass
answer = f'{message}\n\n' answer = f'{message}\n\n'
if not all([bus_300, bus_t19]) or not all([bus_300_arrival, bus_t19_arrival]): if not all([bus_300, bus_t19]) or not all([bus_300_arrival, bus_t19_arrival]):
return 'Автобусов 300 или Т19 не найдено. \n\nСмотри на карте :)' return 'Автобусов 300 или Т19 не найдено. \n\nСмотри на карте :)'
@ -90,14 +86,4 @@ def parse_site(url: str, message: str, driver: WebDriver | None = None) -> str:
answer += f'Автобус {bus_300.text} - {bus_300_arrival.text}\n' answer += f'Автобус {bus_300.text} - {bus_300_arrival.text}\n'
if bus_t19 and bus_t19_arrival: if bus_t19 and bus_t19_arrival:
answer += f'Автобус {bus_t19.text} - {bus_t19_arrival.text}' answer += f'Автобус {bus_t19.text} - {bus_t19_arrival.text}'
print(answer)
return answer return answer
def get_driver() -> RemoteWebDriver:
opt = options.Options()
opt.headless = True
driver = RemoteWebDriver(
command_executor='http://main-server.lan:4444/wd/hub', options=opt
)
return driver