Не работает парсинг цен на акции python

Есть бот по парсингу цен акций, сама функция парсинга работает, проверял отдельно, но почему-то когда функцию парсинга вставляю в общий код, по непонятной причине не происходит обновление цены на любую акцию, цены на акции хранятся в mysql. Может быть проблема и вовсе не в парсинге, помогите пожалуйста найти в чём причина.

Основной код бота:

from config import API_TOKEN#, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB


import MySQLdb

conn = MySQLdb.connect('', '', '', '')
conn.autocommit(True)
cursor = conn.cursor()

import logging
from aiogram import Bot, Dispatcher, executor, types

import requests
from bs4 import BeautifulSoup

logging.basicConfig(level=logging.INFO)

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

cursor.execute('SELECT * FROM `stocks`')
names_and_links = {}
rows = cursor.fetchall()
for row in rows:
    names_and_links[row[1]] = { 'link' : row[2], 'current' : row[4] }

# conn.close()

def is_digit(string):
    if string.isdigit():
       return True
    else:
        try:
            float(string)
            return True
        except ValueError:
            return False

def get_price(name):
    link = names_and_links[name]['link']
    page = requests.get(link)
    soup = BeautifulSoup(page.text, 'html.parser')
    allsoup = soup.find('div', class_='BNeawe iBp4i AP7Wnd')
    return (allsoup.text).split(" ")[0]

main_menu_btns_text = (
    'узнать цену',
    'установить сигнал',
    'посмотреть сигналы',
)

@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):

    keyboard_markup = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True)
    keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
    await message.reply('Что вы хотите сделать?', reply_markup=keyboard_markup)

@dp.message_handler()
async def echo(message: types.Message):

    keyboard_markup = types.ReplyKeyboardMarkup(row_width=3, resize_keyboard=True)
    button_text = message.text

    cursor.execute('SELECT `action` FROM `users` WHERE `user_id` = ' + str(message.from_user.id))
    dialog_action = cursor.fetchone()

    if dialog_action:
        dialog_action = dialog_action[0]

    # 861791417

    if button_text in names_and_links:

        if dialog_action == None:
            await bot.send_chat_action(message.chat.id, 'typing')
            keyboard_markup.add(*(types.KeyboardButton(text) for text in names_and_links))
            keyboard_markup.add('Вернуться в главное меню')

            cursor.execute('SELECT `current_price` FROM `stocks` WHERE `name` = %s', [ button_text ])

            price = cursor.fetchone()[0]
            reply_text = 'Цена акции «' + button_text + '» — ' + str(price)
            return await message.reply(reply_text, reply_markup=keyboard_markup)
        else:
            if dialog_action == 'del_signal':
                cursor.execute('DELETE FROM `users` WHERE `action` = %s AND `user_id` = %s', ['del_signal', str(message.from_user.id)])
                cursor.execute('DELETE FROM `signals` WHERE `user_id` = %s AND `stock_id` = (SELECT `stock_id` FROM `stocks` WHERE `name` = %s)', [str(message.from_user.id), button_text])
                reply_text = 'Сигнал «' + button_text + '» был успешно удален!'
                keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
                return await message.reply(reply_text, reply_markup=keyboard_markup)
            elif dialog_action == 'set_signal':
                cursor.execute('SELECT `current_price` FROM `stocks` WHERE `name` = %s', [ button_text ])
                price = cursor.fetchone()[0]
                cursor.execute('INSERT INTO `users` SET `action` = %s, `user_id` = %s, `extra_data` = %s ON DUPLICATE KEY UPDATE `action` = %s, `extra_data` = %s', ['set_signal_last_step', str(message.from_user.id), button_text, 'set_signal_last_step', button_text])
                reply_text = 'Текущее значение акции «' + button_text + '» — ' + str(price) + '\nОтправьте минимальное значение акции, с которого будут приходить уведомления об изменении:'
                keyboard_markup.add('Вернуться в главное меню')
                return await message.reply(reply_text, reply_markup=keyboard_markup)

    elif button_text == 'узнать цену':
        
        keyboard_markup.add(*(types.KeyboardButton(text) for text in names_and_links))
        keyboard_markup.add('Вернуться в главное меню')
        return await message.reply('Выберите необходимую акцию', reply_markup=keyboard_markup)

    elif button_text == 'установить сигнал':

        reply_text = 'Выберите, на какую акцию хотите установить сигнал и нажмите на соответствующую кнопку:'
        cursor.execute('INSERT INTO `users` SET `action` = %s, `user_id` = %s ON DUPLICATE KEY UPDATE `action` = %s', ['set_signal', str(message.from_user.id), 'set_signal'])
        keyboard_markup.add(*(types.KeyboardButton(text) for text in names_and_links))
        keyboard_markup.add('Вернуться в главное меню')
        return await message.reply(reply_text, reply_markup=keyboard_markup)

    elif button_text == 'посмотреть сигналы':

        cursor.execute('SELECT * FROM `signals` JOIN `stocks` ON `signals`.`stock_id` = `stocks`.`stock_id` WHERE `user_id` = %s', [str(message.from_user.id)])
        rows = cursor.fetchall()

        if not rows:
            reply_text = 'У Вас нет установленных сигналов!'
        else:
            cursor.execute('INSERT INTO `users` SET `action` = \'del_signal\', `user_id` = ' + str(message.from_user.id) + ' ON DUPLICATE KEY UPDATE `action` = \'del_signal\'')

            reply_text = 'Установленные Вами сигналы:\n\n'
            for row in rows:
                reply_text += row[4] + ' - ' + str(row[2]) + '\n'
            reply_text += '\nЧтобы удалить ненужный сигнал, нажмите на соответствующую кнопку!'
            keyboard_markup.add(*(types.KeyboardButton(row[4]) for row in rows))
            keyboard_markup.add('Вернуться в главное меню')
            return await message.reply(reply_text, reply_markup=keyboard_markup)

    else:

        if dialog_action == 'set_signal_last_step' and button_text != 'Вернуться в главное меню':

            if is_digit(button_text):

                cursor.execute('SELECT `stock_id`, `name` FROM `stocks` WHERE `name` = (SELECT `extra_data` FROM `users` WHERE `user_id` = %s)', [str(message.from_user.id)])
                stock = cursor.fetchone()

                signal = None

                if stock:
                    stock_id = stock[0]
                    stock_name = stock[1]
                    cursor.execute('SELECT * FROM `signals` WHERE `stock_id` = %s', [ stock_id ])
                    signal = cursor.fetchone()
                else:
                    keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
                    return await message.reply('Произошла непредвиденная ошибка, возвращаем Вас в главное меню!', reply_markup=keyboard_markup)

                if signal:
                    reply_text = 'Вы успешно обновили сигнал акции «' + stock_name + '» на ' + str(button_text) + '!'
                    cursor.execute('DELETE FROM `users` WHERE `action` = %s AND `user_id` = %s', ['set_signal_last_step', str(message.from_user.id)])
                    cursor.execute('UPDATE `signals` SET `value` = %s WHERE `stock_id` = %s AND `user_id` = %s', [button_text, stock_id, str(message.from_user.id)])
                    keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
                else:
                    reply_text = 'Вы успешно установили сигнал акции «' + stock_name + '» на ' + str(button_text) + '!'
                    cursor.execute('DELETE FROM `users` WHERE `action` = %s AND `user_id` = %s', ['set_signal_last_step', str(message.from_user.id)])
                    cursor.execute('INSERT INTO `signals` SET `stock_id` = %s, `user_id` = %s, `value` = %s', [ stock_id, str(message.from_user.id), button_text])
                    keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))

                cursor.execute('DELETE FROM `users` WHERE `user_id` = %s', [ str(message.from_user.id) ])

                return await message.reply(reply_text, reply_markup=keyboard_markup)
            else:
                reply_text = 'Значением может быть только число!'
                return await message.reply(reply_text, reply_markup=keyboard_markup)

        elif button_text == 'Вернуться в главное меню':

            cursor.execute('DELETE FROM `users` WHERE `user_id` = %s', [ str(message.from_user.id) ])
            keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
            return await message.reply('Что Вы хотите сделать?', reply_markup=keyboard_markup)

        else:
            cursor.execute('DELETE FROM `users` WHERE `user_id` = %s', [ str(message.from_user.id) ])
            keyboard_markup.add(*(types.KeyboardButton(text) for text in main_menu_btns_text))
            return await message.reply('К сожалению, я не знаю такой команды, возвращаю Вас в главное меню!', reply_markup=keyboard_markup)

    #if reply_text:
        #await message.answer(reply_text)

#conn.close()

if __name__ == '__main__':
    executor.start_polling(dp, skip_updates=True)

Ответы (0 шт):