Ответы пользователя по тегу Python
  • Как правильно получить API Google для проверок сайта на безопасность?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    API токен должен передаваться в заголовке X-goog-api-key
    Ответ написан
    Комментировать
  • Как сделать постоянную запись с новой строки Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Он не меняет первую строку, а переписывает файл. Режим открытия файла w подразумевает под собой сначала очистку файла, а потом запись в него. Если хотите дозаписывать данные, есть режим a, соответственно, он и нужен
    test = open("save.txt", 'a', encoding = 'utf-8')

    копипаста режимов

    r - открывает файл только для чтения,
    w - открыт для записи (перед записью файл будет очищен),
    x - эксклюзивное создание, бросается исключение FileExistsError, если файл уже существует.
    a - открыт для добавления в конец файла (на некоторых Unix-системах пишет в конец файла вне зависимости от позиции курсора)
    + - символ обновления (чтение + запись).
    t - символ текстового режима.
    b - символ двоичного режима (для операционных систем, которые различают текстовые и двоичные файлы).
    Ответ написан
    1 комментарий
  • Зачем в примере нужны фигурные скобки и функция format?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    По сути, я так же могу поменять значение в переменной без всяких кавычек и функции format


    Имеется в виду зачем применили два способа форматирования? Скорее всего для демонстрации того, что строки можно объединить несколькими способами. Зачем конкретно это сделал автор - вопрос скорее к нему.

    А вообще, строки через + как правило не объединяют. Лучше это делать через format или f-строки. Но знать все способы всё равно полезно
    Ответ написан
    1 комментарий
  • Разные часовые пояса в питоне, как сделать чтоб менялось не только время но и дата (день недели)?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Может можно и проще сделать, но если надо пояс числом, то монжо так

    from datetime import datetime, timedelta, timezone
    import time
    
    
    # Сначала находим смещение локального времени по UTC в часах
    delta = -time.timezone//3600
    
    # Потом прибавляем к нашему локальному поясу разницу и передаем это в таймзону
    offset = timedelta(hours=delta+difference)
    tz = timezone(offset)
    
    # получаем время с учетом таймзоны
    now = datetime.now(tz=tz)


    Соответственно, все даты, время и дни недели будут сами пересчитаны, поэтому можно удалить все блоки if
    Ответ написан
    1 комментарий
  • Как словить параметр в ошибке в Telethon?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    from telethon import errors
    
    try:
        messages = await client.get_messages(chat)
        print(messages[0].text)
    except errors.FloodWaitError as e:
        print('Have to sleep', e.seconds, 'seconds')
        time.sleep(e.seconds)


    https://docs.telethon.dev/en/stable/concepts/error...
    Ответ написан
    1 комментарий
  • Почему код из книги Эрика Метиза "Изучаем Python" не работает?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В английской версии всё ок между прочим.
    eng
    645355141213d133294531.jpeg


    При этом чуть ниже написано что определение функции модифицировали, добавив age, просто в самом фрагменте кода этого нет почему-то:
    В определение функции добавляется новый необязательный параметр age, которому присваивается специальное значение по умолчанию None


    Естественно, правильный код будет
    def build_person(first_name, last_name, age=None):
        """Возвращает словарь с информацией о человеке."""
        person = {'first': first_name, 'last': last_name}
        if age:
            person['age'] = age
        return person
    musician = build_person('jimi', 'hendrix', age=27)
    print(musician)
    Ответ написан
    4 комментария
  • Почему выдает ошибку Ошибка входа в систему при запросе на сайт через requests python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Добавить заголовок Referer в запрос
    headers = {
        'User-Agent': f'{user}',
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'Referer': 'https://sg.lyceum130.ru'
    }
    Ответ написан
    Комментировать
  • Как вставить картинку в telegraph api?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Параметр params отвечает за отправку URL параметров. Для POST запросов тело как правило либо application/json (параметр json), либо application/x-www-urlencoded (параметр data)

    result = rq.post("https://api.telegra.ph/createPage",
                    json={
                        "access_token": database["access_token"],
                        "title": "Test",
                        "content":[
                            {"tag":"img", "attrs":{"src":"https://telegra.ph/file/b2de01b***6928d6.jpg"}}
                        ]
                    })
    Ответ написан
    Комментировать
  • Не работает функция, что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Значит нет такого столбца, как и говорит ошибка.

    Почему нет? Наверное под этим же именем уже существует другая БД, где такого столбца нет. Удалить старый файл и заново код запустить, с исправлениями выше, чтоб все операции были не через format, f строки, конкатенацию и что там еще можно придумать, а через ?, как написано в доке
    https://docs.python.org/3/library/sqlite3.html#how...
    Ответ написан
    Комментировать
  • Как сделать файл, отправляемый пользователем, доступным для ВК–бота?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Вообще, для этого есть дополнительно поле access key
    spoiler
    644d556e2ebd5963989217.jpeg


    В vk_api не приходит это поле в лонгполл, может так должно быть, может это упущение vk_api, но в любом случае, придется дернуть сообщение по его ID, и там уже будет и access key который можно добавить в запрос docs.getById, так и будет там url, по которому можно файл загрузить (не знаю для всех ли видов файлов есть url)

    for event in VkLongPoll(vk_session).listen():
        if event.type == VkEventType.MESSAGE_NEW and event.to_me:
            if event.attachments:
                if event.attachments["attach1_type"] == "doc":
                    vk.messages.getById(message_ids=event.message_id)['items'][0]['attachments'][0]


    Дальше уже от ваших нужд. Либо берете url из ответа и делаете с файлом ваши задачи, либо достаете accesskey и пробуете
    document = event.attachments["attach1"] + '_' + access_key
    response = vk.docs.getById(docs=document)
    Ответ написан
    Комментировать
  • Как создать свой JSON и получить доступ к значению по ключу?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Зачем-то превращаете словарь (из которого уже можно взять ключ) в строку, затем строку в байты, затем байты обратно в строку.
    answer = {
            "id": "12",
            "status": "Готов",
            "url": "vk.com"
        }
    print(answer['id'])
    Ответ написан
    Комментировать
  • Как убрать эту ошибку?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Если проблема в том, что возвращается анимация, я думаю можно попробовать следующее: у avatar_image тип Asset

    Можно проверять что аватар является анимацией, и делать что нибудь в духе
    • Брать default аватар
    • Менять формат изображения


    Плюс, disnake естественно даёт возможность читать файл сразу, не нужно слать доп. запросы (он так же даёт возможность делать ресайзы)

    Для первого варианта как-то так:
    avatar_obj = memb.display_avatar if memb.display_avatar.is_animated() else memb.default_avatar
    avatar_obj = avatar_obj.read()
    
    avatar_image = Image.open(BytesIO(avatar_obj)).resize((90, 90))


    Для второго варианта можно попробовать брать аватар, ресайзить, и сразу менять формат. По-идее это будет универсальным решением, я бы наверное использовал его

    Не знаю какие должны быть правильные format и size, сам не пишу под дискорд, но по логике как-то так наверное:
    avatar_obj = memb.display_avatar.replace(size=90, format='jpg').read()
    avatar_image = Image.open(BytesIO(avatar_obj))
    Ответ написан
  • Один и тот же код Python на win 11 работает, а на Debian - нет, версия 3.10, библиотеки есть, что не так?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Разные версии библиотек, на винде старая

    https://github.com/python-telegram-bot/python-tele...
    https://github.com/python-telegram-bot/python-tele...

    В последней версии class telegram.ext.Updater(bot, update_queue)
    Ответ написан
    Комментировать
  • Код не выдает желаемый результат при парсинге страницы на selenium python, что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Не должно быть точки в имени класса
    Ответ написан
    Комментировать
  • Как получить данные из строки?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    import re
    
    strings = [
        '[ex.endermen](profile_url1) got killed by [og.[(Z)]arcus(0.43k/d)](profile_url2) (FN Evolys, 56.83m)',
        '[ex.endermen](profile_url1) got killed by [platina](profile_url2) (FN Evolys, 56.83m)'
    ]
    
    regex = r'^\[(?P<name1>.+?)\]\((?P<name1_url>.+?)\).+?\[(?P<name2>.+)\]\((?P<name2_url>.+?)\)'
    
    string_parser = re.compile(regex)
    
    for string in strings:
        print(string_parser.match(string).groupdict())


    out:
    {'name1': 'ex.endermen', 'name1_url': 'profile_url1', 'name2': 'og.[(Z)]arcus(0.43k/d)', 'name2_url': 'profile_url2'}
    {'name1': 'ex.endermen', 'name1_url': 'profile_url1', 'name2': 'platina', 'name2_url': 'profile_url2'}
    Ответ написан
    Комментировать
  • Какой код нужно добавить к парсеру через python чтобы не удалял блоки инстаграмма и твитера?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Подобные вставки сделаны через iframe теги. Данные генерируются во время рендера страницы в браузере. Если делать обычный GET запрос на страницу, этих данных не будет в коде страницы.

    Смотря что нужно с этим сделать, можно текст допустим вытащить через API Twitter / Instagram, предварительно достав ID нужной записи.
    Можно поменять тип парсинга, и собирать данные через условный Selenium.
    Ответ написан
    Комментировать
  • Python скачать файл из ссылки формата blob:?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    blob url ссылаются на данные, которые лежат в памяти браузера, в его текущем инстансе, они недоступны вне этого контекста. Если нужны данные по такой ссылке, их можно достать через JS, через Selenium, например. Но тогда и эти данные должны быть изначально сгенерированы в окне селениума
    Ответ написан
    2 комментария
  • Не играет музыкальный бот disnake.py?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ну, в принципе, как пишет, так и есть. У класса ApplicationCommandInteraction нет такого метода.
    Не знаю откуда его взяли чтобы добавить в код, но это явно неправильно

    https://docs.disnake.dev/en/stable/api.html#disnak...
    Ответ написан
    Комментировать
  • Как открыть первую ссылку на странице в Selenium Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Находите все теги а
    driver.find_elements(By.TAG_NAME, ‘a’)
    Берем рандомный элемент, получаем его атрибут href и открываем
    Ответ написан
    Комментировать
  • Как сконвертировать проект в пайчарм в exe файл?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Скачать установочник нужной версии. Написать батник, который установит Python из этого инсталлера (по-моему даже есть специальные флаги для тихой установки); затем через батник ставим все зависимости через pip; и запускаем .py

    Создаем архив из нужных файлов и батника (можно даже два сделать: один устанавливает все, второй запускает)

    По итогу будет и быстрей и легче чем собирать exe. Тем более никаких IDE устанавливать клиенту не надо, только сам питон и либы. Для пользователя запустить start.bat будет ничуть не сложней чем start.exe, зато получится нормальный готовый проект, а не попытка собрать несобираемое
    Ответ написан