Задать вопрос
  • Как записать переменную перед отправкой формы на сервер?

    SemanticMoscow
    @SemanticMoscow
    если данные необходимо накапливать, а потом отправить всё скопом,
    то можно использовать локальное хранилище.
    или сессию, куда записывать получаемые по одному ответы из формы.
    Ответ написан
    Комментировать
  • Как исправить проблемы с jitsi meet?

    @Drno
    Оо браатт..... я задоблабся его настраивать)))

    Как ставил? докер или вручную? порты для него открыты? VPS справляется? Есть ли обратный прокси?
    Ответ написан
  • Python Requests - Как авторизоваться на сайте?

    @anoninmer Автор вопроса
    Много чего вынужден был прочитать, но ничего не работало как нужно.
    В итоге вручную пришлось понять что, как и зачем передает и ждет получить cp.mchost.ru.
    На это ушло полдня, но результатом остался доволен. Пользовался инструментарием Google Chrome.

    Тут я думаю проблем нет, он не любит запросы не от браузера, юзаю любой первый попавшийся в интернете хедер.
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                             '(KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}


    Дальше открываем сессию, делаем обычный GET запрос по ссылке для логина.
    Это нужно для того, чтобы сайт вернул MCHOSTID, который возвращается в виде cookie и что примечательно в строке браузера, но он не обязательный (проверил).
    session = requests.Session()
    session.get(url, headers=headers)
    session.headers.update(headers) # обновим хедеры в сессии


    Дальше хитрое. Как оказалось, логин и пароль сайт принимает в виде закодированной строки через BASE64, в которой через двоеточие перечислен логин и пароль.
    Auth = base64.b64encode('LOGIN:PASSWORD'.encode('utf-8')).decode('utf-8')


    Далее берем MCHOSTID, а также обновляем строку с авторизацией
    cookie = session.cookies.get('MCHOSTID', domain='.mchost.ru')
    session.headers.update({'Authorization': 'Basic ' + Auth})


    Ну и наконец запрос POST, в который мы передаем MCHOSTID в виде строки (именно так ее передает Chrome).
    post_request = session.post(url, {'Cookie': 'MCHOSTID=' + cookie})
    Ответ написан
    Комментировать
  • Недесятичные дроби и Python, как?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Для этого в Python есть модуль sympy

    Я не соображу какое вам выражение нужно составить, - но с символьной математикой он справляется:
    import sympy as sym
    
    x = sym.Symbol('x')
    sym.simplify(sym.sin(x)/sym.cos(x))
    # tan(x)
    
    a = sym.Symbol('a')
    b = sym.Symbol('b')
    c = sym.Symbol('c')
    sym.simplify((a/c)/(b/c))
    # a/b

    5fc0c9813bf11264540641.png
    Ответ написан
    1 комментарий
  • Как заставить телеграм бота ждать сообщения от пользователя и записывать его в переменную на питоне?

    Danya_Violet
    @Danya_Violet
    CTO/CIO
    сделайте по аналогии

    для передачи текста в другую функцию используйте bot.register_next_step_handler().
    например этот код сначала запросит домен, после ФИО должность и номер телефона, и в итоге создаст корпоративный email с указанными параметрами
    
    @bot.message_handler(commands=['emailcreate'])
    def email_create_request_domain(message):
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Зьдати емейлъ\nПочтовый ящикъ:\n'
                                                 'example.ru, example1.ru, example2.ru, example3.ru, example4.ru ')
        bot.register_next_step_handler(send, email_create_request_data)
    
    
    def email_create_request_data(message):
        global domain_uis
        domain_uis = message.text.lower()
        if message.text.lower() == 'отмена':
            bot.send_message(message.from_user.id, 'На нетъ и суда нетъ')
            return
        send = bot.send_message(message.chat.id, 'Введите: ФИО должность нумеръ')
        bot.register_next_step_handler(send, email_create)
    
    
    def email_create(message):
        first = message.text.split()[1]
        last = message.text.split()[0]
        middle = message.text.split()[2]
        phone = message.text.split()[4]
        position = message.text.split()[3]
    
        uis_login = create_nickname(first, last, middle, 'email_create')
        bot.send_message(message.chat.id, '✅ логинъ')
    
        uis_password = create_password()
        bot.send_message(message.chat.id, '✅ шифръ')
    
        id_yc = create_email(first, last, middle, phone, position, uis_password, uis_login, domain_uis)
        if 'Response' in str(id_yc):
            bot.send_message(message.chat.id, '❌ емейлъ' + '\n' + id_yc)
            return
        else:
            bot.send_message(message.chat.id, '✅ емейлъ')
            bot.send_message(message.chat.id, uis_login + '@' + domain_uis + '\n' + uis_password)
    Ответ написан
    1 комментарий
  • Как настроить webhook для Telegram-бота (python3 + pyTelegramBotAPI) на хостинге Heroku?

    @keshamin Автор вопроса
    johny2308, @gavrilka
    В общем в итоге еще весной 2017-го, когда был создан этот тикет, я все-таки справился с этой проблемой путем долгих проб и постоянных нерабочих пушей на Хероку...
    Уже не помню весь свой путь к этому решению, но в итоге вот как в итоге у меня это работает:
    import telebot
    import os
    from flask import Flask, request
    import logging
    
    bot = telebot.TeleBot(token)
    
    # Здесь пишем наши хэндлеры
    
    # Проверим, есть ли переменная окружения Хероку (как ее добавить смотрите ниже)
    if "HEROKU" in list(os.environ.keys()):
        logger = telebot.logger
        telebot.logger.setLevel(logging.INFO)
    
        server = Flask(__name__)
        @server.route("/bot", methods=['POST'])
        def getMessage():
            bot.process_new_updates([telebot.types.Update.de_json(request.stream.read().decode("utf-8"))])
            return "!", 200
        @server.route("/")
        def webhook():
            bot.remove_webhook()
            bot.set_webhook(url="https://min-gallows.herokuapp.com/bot") # этот url нужно заменить на url вашего Хероку приложения
            return "?", 200
        server.run(host="0.0.0.0", port=os.environ.get('PORT', 80))
    else:
        # если переменной окружения HEROKU нету, значит это запуск с машины разработчика.  
        # Удаляем вебхук на всякий случай, и запускаем с обычным поллингом.
        bot.remove_webhook()
        bot.polling(none_stop=True)


    Насчет настройки переменной окружения в Хероку - заходим в настройки приложения в Хероку и видим пункт "Config Variables". И добавляем туда переменную HEROKU, чтобы наш бот отличал - запущен он на сервере или на локальной машине. Но это уже не обязательно, это вкусовщна. Просто для меня это удобно.

    Надеюсь, у вас все получится!
    Ответ написан
    3 комментария
  • Логгирование Python, как быстро сделать вывод ошибок в файл?

    qlkvg
    @qlkvg
    python backend developer
    прикрутите logging, пока не поздно. Один раз создать логгер и поменять все print на logger.info - дело где-то 5 минут. Взамен получите возможность быстрого переключения логирования в файл/консоль, разбивку сообщений по уровням (очень удобно отделять дебажные сообщения от информационных и диагностических), полноценное логирование исключений и еще кучу всяких плюшек.
    Ответ написан
    Комментировать
  • Как сохранить текущую сессию python при парсинге json?

    @noremorse_ru
    Ну вам конечно надо подразобраться в теории http, если это api, то скорее всего авторизация вернется токен в теле и его нужно будет добавить в headers, токенов может быть и 2, поэтому нужно смотреть документацию к апи, с которым вы общаетесь. Т.е. сессия вам тут не поможет скорее всего как таковая, она просто делает часть работы за вас, а именно хранит куки и заголовки, чтобы не подмешивать их каждый раз. Сам объект инициализируется так: requests.Session()

    P.S. В print можно писать строки через запятую, а не плодить их десятками. И если вы делаете проверку по статус коду ответа, то лучше делать это через assert, ибо код будет выполняться дальше, а в вашем случае код зависит от response, продолжать что-то делать если в response не то что мы ожидаем смысла нет
    Ответ написан
    Комментировать