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

    bravebug
    @bravebug
    Можно просто вызывать функцию из блока <script> перед закрывающим тегом </body>, т.е. после того как все элементы страницы уже загрузились:
    var myFunc = function (s) {
        console.log(s);
      };
    // вызов функции
    myFunc("Выполнил!");
    Ответ написан
    2 комментария
  • Как задать отношения в sqlalchemy что бы свойство было доступной в обеих моделях?

    bravebug
    @bravebug
    Не считаю код ниже решением, т.к. понять что требовалось я так до конца и не смог. Думаю что sqlalchemy в данной задаче нужно использовать немного иначе. И возможно код ниже окажется тем, что требовалось:
    #!/usr/bin/env python
    
    from datetime import datetime
    from sqlalchemy import ForeignKey
    from sqlalchemy import create_engine, delete, select, update
    from sqlalchemy.orm import DeclarativeBase, Mapped
    from sqlalchemy.orm import mapped_column, relationship, sessionmaker
    
    
    class Base(DeclarativeBase):
        pass
    
    class User(Base):
        __tablename__ = "user"
        id:                 Mapped[int]         = mapped_column(primary_key=True)
        address_first_id:   Mapped[int]         = mapped_column(ForeignKey('address.id'))
        address_first:      Mapped["Address"]   = relationship(foreign_keys=[address_first_id])
        address_second_id:  Mapped[int]         = mapped_column(ForeignKey('address.id'))
        address_second:     Mapped["Address"]   = relationship(foreign_keys=[address_second_id])
        is_available:       Mapped[bool]        = mapped_column(default=True)
        created_on:         Mapped[datetime]    = mapped_column(default=datetime.utcnow())
        updated_on:         Mapped[datetime]    = mapped_column(default=datetime.utcnow(), onupdate=datetime.utcnow())
    
    class Address(Base):
        __tablename__ = "address"
        id:                 Mapped[int]         = mapped_column(primary_key=True)
        comment:            Mapped[str]         = mapped_column(unique=True, nullable=False)
        is_available:       Mapped[bool]        = mapped_column(default=True)
        created_on:         Mapped[datetime]    = mapped_column(default=datetime.utcnow())
        updated_on:         Mapped[datetime]    = mapped_column(default=datetime.utcnow(), onupdate=datetime.utcnow())
    
    
    if __name__ == "__main__":
        engine = create_engine('sqlite:///:memory:', echo=True)
        Base.metadata.create_all(engine)
        Session = sessionmaker(engine)
        # добавим пользователя с двумя адресами
        with Session.begin() as session:
            address1 = Address(comment="Lenina 45")
            address2 = Address(comment="Sedina 5")
            user = User(address_first=address1, address_second=address2)
            session.add(user)
        # проверим, что пользователь был создан успешно
        with Session.begin() as session:
            user = session.query(User).first()
            print(user, user.address_first.comment)
        with Session.begin() as session:
            # находим первый адрес по части адреса
            adr = session.query(Address).where(Address.comment.like("%Sedina%")).first()
            print(adr, adr.comment)
            # находим первого пользователя у которого один из адресов соответствует найденному выше адресу
            usr = session.query(User).where(User.address_first == adr or User.address_second == adr).first()
            print(usr, usr.address_first.comment, usr.address_second.comment)

    Успехов!
    Ответ написан
    Комментировать
  • Как вывести разные вложенные списки в списке?

    bravebug
    @bravebug
    цикл 3 раза делает следующее:
    * генерирует случайное число от 1 до 10
    * добавляет это число в список lst
    * добавляет ссылку на список lst в список list

    Т.к. список в python - это изменяемый тип данных, добавленные в список lst данные отображаются по всем ссылкам на объект этого списка.
    Ответ написан
    Комментировать
  • Пишу телеграмм бота на python. Мне нужно, чтобы при нажатии кнопки(получения ботом определённого текста) бот останавливал свою работу?

    bravebug
    @bravebug
    У меня была подобная задача, нужно было перезапускать сервис по команде боту.
    Используя python-telegram-bot никаким образом завершить скрипт из него самого не получалось, я перезапускал бота внешней командой в оболочку (terminal/shell/bash).
    В моём случае бот запущен в Linux через systemd в качестве пользовательского сервиса.
    Функция выглядит там:
    def cmd_restart_service(update, context):
        if update.message.from_user.id == XXX:
            import subprocess
    
            update.message.reply_text("Будет исполнено...")
            subprocess.run("systemctl --user restart mybot.service".split())
        else:
            update.message.reply_text("Ай! Не делай так больше...")

    Вместо "XXX" указан мой id telegram, чтобы никто не баловался.
    Ответ написан
    Комментировать
  • Парсер не считывает все страницы и не все записывает в json, что делать?

    bravebug
    @bravebug
    Проблема во внимательности:
    div с атрибутом class="vehicle-card-vertical-body car-info-body" на одном уровне содержит два div'а:
    - div с атрибутом class="main-info"
    - div с атрибутом class="car-price-info"

    в переменную 'infos" изначально кладёте не те данные, в которых не возможно найти цену.

    Счётчик страниц нужно увеличивать в цикле while после выхода из цикла for, иначе вы скачиваете сначала первую страницу, потом 21ую, а 41ой уже не существует (в точных цифрах могу ошибаться)

    Настоятельно рекомендую поставить задержку на скачивание каждой последующей страницы:
    from time import sleep
    и в начале цикла while:
    sleep(1)

    По JSON нужно смотреть, что за ошибка.
    Если:
    ...
    TypeError: Object of type Tag is not JSON serializable

    Значит Вы скорее всего пытаетесь сохранить в JSON какой-то объект bs4, который JSON не поддерживает.
    Надо предварительно конвертировать его в поддерживаемый тип данных.
    Ответ написан
    4 комментария
  • Как сократить условие python?

    bravebug
    @bravebug
    Любое выражение при использовании с условными операторами приводится к его булеву значению (True или False)
    Исходя только из того что:
    >>> bool(0)
    False
    >>> bool(not 0)
    True

    ваше выражение уже может быть сокращено до:
    if a and a_2 and b and b_2 and c and c_2 or a and a_2 and not b and not b_2 and c and c_2 or not a and not a_2 and b and b_2 and c and c_2

    А вообще подобных условий никогда не пишите, уже завтра Вы сами не сможете понять, что написали.
    Наверняка эти условия можно структурировать разветвив на вложенные подусловия и сгруппировав функциями all и any.
    Ответ написан
    Комментировать
  • Как сгруппировать список получая данные из excel?

    bravebug
    @bravebug
    Применить встроенную функцию zip?:
    >>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
    ...     print(item)
    ...
    (1, 'sugar')
    (2, 'spice')
    (3, 'everything nice')

    * код взят отсюда: https://docs.python.org/3/library/functions.html#zip
    Ответ написан
    1 комментарий
  • В чём ошибка кода?

    bravebug
    @bravebug
    Что-то мне подсказывает, что переменные api_id, api_hash, phone, chat_id, user_id должны быть не взятыми с потолка данными.
    Ответ написан
  • Как написать сайт не веб-программисту без особых усилий?

    bravebug
    @bravebug
    Нет! С таким подходом лучше сразу отказаться от этой затеи.
    Ответ написан
  • Что использовать для бота в telegram для группы?

    bravebug
    @bravebug
    Существуют несколько популярных модулей для написания ботов telegram, они все реализуют полный функционал.
    Различия скорее во внутреннем устройстве самого модуля (архитектуре):

    pyTelegramBotAPI - нужно понимать декораторы https://github.com/eternnoir/pyTelegramBotAPI/blob...

    aiogram - вдобавок нужно понимать асинхронные функции https://github.com/aiogram/aiogram/blob/dev-2.x/ex...

    python-telegram-bot - самый многословный, но более понятный новичку код - https://github.com/python-telegram-bot/python-tele...

    * приложил примеры реализации эхо-бота с использованием каждого из этих модулей.

    Реализовать Вашу идею можно с любым модулем, и то как она будет работать, будет ли "сбиваться алгоритм" тоже полностью зависит только от Вас, только от того какой код будет написан.

    Выбирать Вам! К счастью, можно попробовать всё!
    Ответ написан
    Комментировать
  • Как можно с помощью регулярки или цикла исправить конкатенацию времени и программы?

    bravebug
    @bravebug
    В bs4 есть замечательный атрибут strings, он возвращает генератор с текстом всех вложенных тегов.
    Последние строки функции можно скорректировать так:
    items = program.find("div", class_="p-programms").strings
            joined_items = "\n".join(items)
            print(f"{section} | {joined_items}")

    Рекомендую поиграться c items, сделать print(list(items)).

    ** очень плохая практика использовать одно и то же имя переменной:
    for program in program:
    Чревато неведомой дичью, когда её совсем не ждёшь.
    Ответ написан
    Комментировать
  • Telebot Как заменить текст на фото?

    bravebug
    @bravebug
    Комментировать
  • Как записать внешний Json файл?

    bravebug
    @bravebug
    Имея только 2 файла: html и json - такое не возможно.
    Нужна backend часть на php, python или другом поддерживаемом хостингом языке и умение написать соответствующее приложение. Это несколько сложнее чем можно описать в подобного рода сообщении, обладая столь малой информацией о условиях.
    Ответ написан
    Комментировать
  • Как очистить ветку Master или создать новую для работы с новым проектом?

    bravebug
    @bravebug
    Почему бы не создать новую папку с новым проектом и новым репозиторием?
    mkdir my_new_project
    cd my_new_project
    git init

    ** не понял зачем трогать старый проект **
    Ответ написан
    Комментировать
  • Как это реализовать?

    bravebug
    @bravebug
    Получение данных о фильмах лучше реализовать с помощью готовых модулей, а прикручивание этого к бот будет неплохой себе задачей:
    https://pypi.org/search/?q=imdb
    https://pypi.org/search/?q=kinopoisk

    С символа "/" начинаются команды для бота telegram
    Если команда не зарегистрирована в качестве команды, то команда будет проигнорирована.
    Например для python-telegram-bot:
    def cmd_about_movie(update, context):
        # функция обработчик
        # может например обрабатывать имя команды, как идентификатор для вывода контента
        pass
    
    updater = Updater(TOKEN, use_context=True)
    updater.dispatcher.add_handler(CommandHandler("b739423", cmd_about_movie))

    Что имеем вы итоге:
    1) какая-то другая функция при формировании списка фильмов, должна динамически регистрировать новые команды, указанным выше способом
    2) Функция cmd_about_movie может формировать нужный контент
    3) Было бы неплохо удалять сообщение со списком после нажатия первой же команды и генерировать контент и удалять все созданные обработчики команд иначе они постепенно сожрут всю оперативку
    Ответ написан
    Комментировать
  • Возможно ли скачать видео с blob ссылки без выкрутасов вроде m3u8?

    bravebug
    @bravebug
    1) конкретно из этой ссылки мне кажется нет. Вероятно реальная ссылка на видео подменяется скриптами динамически и эту информацию можно найти на странице или понять алгоритм формирования ссылки на видео.
    2) m3u8 - это ведь файл плейлиста. Я не знаю откуда Вы его берёте, но не помешает разобрать находящиеся в нём ссылки.
    Ответ написан
    Комментировать
  • Как перезапустить бота?

    bravebug
    @bravebug
    У меня бот запускается сервисом supervisored, он умеет перезапускать скрипт при полном падении, но завершить бота из функции у меня не вышло, процесс не завершается.

    Пока использую для telegram (python-telegram-bot)*:
    def cmd_restart_service(update, context):
        if update.message.from_user.id == 777777777: # id пользователя
            import subprocess
    
            update.message.reply_text("будет исполнено...")
            subprocess.run("sudo supervisorctl restart mybotname".split())

    И нет мне за это чести :)
    * Внешние команды перезапуска и сама такая возможность зависит от операцинной системы/сервиса/служб/настроек, где запущен бот.
    Ответ написан
    Комментировать
  • Как сделать обновление сайта каждые 10 секунд?

    bravebug
    @bravebug
    такое обычно реализуют на JavaScript (Flask отдаст свежую страницу в любой момент, а браузер должно что-то заставлять автоматически перезагружать страницу)
    https://www.w3docs.com/snippets/javascript/how-to-...
    Ответ написан
    2 комментария
  • Как создать симметричную матрицу из списка?

    bravebug
    @bravebug
    Только обещай понять, как это получилось, хорошо?
    l = [1, 0.6, 0.8, 0.3]
    l_len = len(l)
    res = [[l[abs(x-y)] for y in range(l_len)] for x in range(l_len)]
    print(res) # [[1, 0.6, 0.8, 0.3], [0.6, 1, 0.6, 0.8], [0.8, 0.6, 1, 0.6], [0.3, 0.8, 0.6, 1]]
    Ответ написан
    1 комментарий