Задать вопрос
  • Почему не могу установить redux-thunk?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    А самому прочитать ошибку?
    41 http fetch GET 200 https://registry.npmjs.org/redux-thunk 398ms (cache hit)
    42 silly fetch manifest redux@^4.2.1
    43 http fetch GET 200 https://registry.npmjs.org/redux 6ms (cache hit)
    44 silly fetch manifest redux@^5.0.0

    redux-thunk требует, чтобы в проекте был redux: ^5.0.0, а у Вас ^4.2.1, либо ставить указанный npm install redux@^5.0.0, либо использовать в режиме совместимости (возможна, нестабильная работа):npm install redux-thunk --legacy-peer-deps

    Бодрящий шрифт консоли, зачет!
    Ответ написан
    3 комментария
  • Telethon - как пересылать видео/фото при этом скрывая имя пользователя?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    везде искал - не нашел

    А в официальной документации искали?
    В в телеграмме есть возможность скрыть автора при пересылке,я хочу чтобы скрипт пользовался ей

    Можно использовать метод forward_messages().

    Forwards the given messages to the specified entity.
    If you want to “forward” a message without the forward header (the “forwarded from” text), you should use send_message with the original message instead. This will send a copy of it.
    Ответ написан
    2 комментария
  • Как сохранить результат функции в отдельную переменную?

    Kentavr16
    @Kentavr16
    long cold winter
    ответ здесь. Даже с примером по твоему вопросу.
    Проблема в том что ты пытаешься получить асинхронное значение в синхронном коде. Это не будет работать. Почитай про промисы и колбеки в контексте асинхронности джаваскрипт. Будет куда полезнее за строчку кода в ответе на твой вопрос.
    Ответ написан
    Комментировать
  • Как убедиться в том что хотя бы одно из нескольких полей не None?

    Zagir-vip
    @Zagir-vip
    Web dev, Game dev, app dev, Разработчик на Python!
    Давайте вместе почитаем документацию

    from pydantic import BaseModel, ValidationError, field_validator
    
    
    class Model(BaseModel):
        x: int
    
        @model_validator(mode='before')
        @classmethod
        def validate_x(cls, v: int) -> int:
            if x is None:
               raise ValueError('X is None')
               return cls
    
    
    try:
        Model(x=None)
    except ValidationError as e:
        print(e)
    
       """X is None"""
    Ответ написан
    1 комментарий
  • Как отменить правила в .htaccess для Logout ( Wordpress )?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как сделать исключение для Logout?

    Отменяем любые правила, если обнаружен url /wp-login.php:
    # .htaccess
    RewriteEngine On
    
    # if url /wp-login.php
    RewriteCond %{QUERY_STRING} action=logout [NC]
    RewriteRule ^wp-login\.php$ - [L]
    
    # else other rulles
    RewriteCond %{THE_REQUEST} \?
    RewriteCond %{QUERY_STRING} !^p=
    RewriteCond %{REQUEST_URI} !^/wp-admin
    RewriteRule .? https://site.com%{REQUEST_URI}? [R=301,L]
    Ответ написан
    2 комментария
  • В какой программе лучше делать верстку сайта?

    miraage
    @miraage
    Старый прогер
    vscode или webstorm, другие варианты выкиньте.

    vscode - как vim, текстовый редактор, простой. Может превратиться в мощную машину через плагины. Кажется идеальным вариантом в Вашем случае.

    webstorm - мощная машина, "громоздкий" инструмент для профессиональных разработчиков. Умеет почти все, если не все, однако для простой верстки это как стрелять с пушки по воробьям.
    Ответ написан
    1 комментарий
  • Как сейчас работает закон о маркировке рекламы в интернете?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Если вкратце, то алгоритм следующий:
    1. Находишь какого-нибудь ОРД (оператор рекламных данных)
    2. Регистрируешься у него (договор, можно даже с физ.лицом)
    3. Он выдает тебе инструкцию, как подключить рекламу на сайт

    Он тебе и ERID представит и статистику по кампании в РКН отправит.
    Самое простое, подключиться к яндекс директу - тебе только ставить нужный скрипт на сайт надо будет.

    Если хочешь свое запилить, то никто не мешает - главное, чтобы ERID был виден:
    - В изображении (в углу баннера)
    - В тексте (подпись внизу)
    Сами рекламные кампании создаются ОРД, список которых ведет РКН.

    Вот есть описание этого всего
    https://vc.ru/legal/963878-markirovka-reklamy-erir...

    Например, для яндекса все просто - надо только зарегистрироваться у них, а остальное сделают за тебя (вкладка "Паблишеры") - https://ord.yandex.ru/
    Ответ написан
    Комментировать
  • Как получить описание устройства в системе через python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    У вас виндузятников там есть вроде консольная команда driverquery
    Можно её выполнять из питона и парсить результат. Там есть в выхлопе нужное устройство?
    Можно попробовать подключаться перебирая все порты, если есть возможность определить при успешном подключении нужное это устройство или нет.
    Искать нужно как найти нужные данные через консоль, а потом искать как выполнить консольную команду из питона и получить консольный выхлоп, а потом искать нужную строчку в выхлопе.
    Примерно такой путь.
    Ответ написан
    Комментировать
  • Как проскролить в определенной облачи экран в selenium?

    Mike_Ro
    @Mike_Ro Куратор тега Selenium
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Переход в дискорд.
    2. Ручная авторизация.
    3. Клик по кнопке с друзьями, для открытия боковой панели.
    4. Перемещение курсора и скролл боковой панели с друзьями путем внедрений js скрипта конкретному элементу (не настоящий скролл колесиком или свайпом).
    5. Выход.

    Если элемент не будет найден, то будет выброшено исключение и распечатана соответствующая ошибка, а значит необходимо будет подкорректировать xpath до этого элемента.

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import NoSuchElementException
    import time
    
    url = 'https://discord.com/channels/1097401827202445382/1097674067601010709'
    
    # driver
    driver = webdriver.Chrome()
    driver.get(url)
    
    print('your manual authorization, the script is waiting for 30 seconds')
    time.sleep(30)
    
    try:
        print('find and click element button friends')
        button_element = driver.find_element(By.XPATH, '//*[@id="app-mount"]/div[2]/div[1]/div[1]/div/div[2]/div/div/div/div/div[3]/section/div/div[2]/div[4]')
        button_element.click()
    except NoSuchElementException:
        print('error: element button friends not found')
        time.sleep(5)
        driver.quit()
        exit()
    
    time.sleep(5)
    
    try:
        print('find scroll element')
        element = driver.find_element(By.XPATH, '//*[@id="app-mount"]/div[2]/div[1]/div[1]/div/div[2]/div/div/div/div/div[3]/div[2]/div[2]/aside/div')
    except NoSuchElementException:
        print('error: scroll element not found')
        time.sleep(5)
        driver.quit()
        exit()
    
    print('move cursor to element')
    action = ActionChains(driver)
    action.move_to_element(element).perform()
    
    print('scroll down')
    driver.execute_script('arguments[0].scrollTop += 300', element)
    
    print('mission complete, thanks to Uncle Misha')
    time.sleep(5)
    
    print('exit')
    driver.quit()
    
    # your manual authorization, the script is waiting for 30 seconds
    # find and click element button friends
    # find scroll element
    # move cursor to element
    # scroll down
    # mission complete, thanks to Uncle Misha
    exit
    Ответ написан
    5 комментариев
  • Инфоблоки как у битрикс, но в wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    имеется ли у wp что-то похожее на инфоблоки битрикса? Куда нужно копать, чтобы их найти?

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

    Вам нужны кастомные типы постов - Custom Post Types.

    Пример создания костюмного типа поста, register_post_type():
    function true_register_post_type_init() {
     
    	$labels = array(
    		'name' => 'Лиды',
    		'singular_name' => 'Лид',
    		'add_new' => 'Добавить лид',
    		'add_new_item' => 'Добавить лид',
    		'edit_item' => 'Редактировать лид',
    		'new_item' => 'Новый лид',
    		'all_items' => 'Все лиды',
    		'search_items' => 'Искать лиды',
    		'not_found' =>  'Лидов по заданным критериям не найдено.',
    		'not_found_in_trash' => 'В корзине нет лидов.',
    		'menu_name' => 'Лиды'
    	);
     
    	$args = array(
    		'labels' => $labels,
    		'public' => true,
    		'publicly_queryable' => false,
    		'has_archive' => false,
    		'menu_icon' => 'dashicons-email-alt2',
    		'menu_position' => 2,
    		'supports' => array( 'title', 'editor' )
    	);
     
    	register_post_type( 'lead', $args );
    }
    
    add_action( 'init', 'true_register_post_type_init' );
    Ответ написан
    Комментировать
  • Зачем комментарии на сайте оборачивать в тег article?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега HTML
    его рекомендуют оборачивать тегом article
    Тут нужно дать ссылку на эту рекомендацию, чтобы мы могли её оценить не на уровне "Рабинович по телефону напел".

    его можно использовать в любом другом месте, а как использовать комментарий на другом сайте
    Когда говорят об использовании "в любом месте", подразумевают "любое место данного сайта". И в рамках сайта комментарий действительно может быть оторван от условного рецепта: например, в профиле пользователя может выводиться список всех его комментариев (как здесь) или в сайдбаре может выводиться список всех последних комментариев (как на vc.ru).

    На самом деле все эти семантические теги, введённые в HTML5, не оказывают абсолютно никакого влияния ни на что (за исключением небольшого количества функциональных тегов, которые упрощают доступность), так что вы можете не заморачиваться слишком сильно. Это не говоря про то, что семантика этих тегов жёстко привязана к конкретному сайту - то, что будет логично на одном, будет бредом на другом. Универсальных правил использования семантических тегов нет, есть рекомендации, которые вы вольны игнорировать.

    если мы отрываем комментарий от статьи он ведь теряет весь смысл
    На основе многих лет модерирования этого сайта могу вам сказать, что комментарий комментарию рознь. Некоторые жемчужины, наоборот, непонятно как оказались под каким-нибудь посредственным вопросом, и их можно хоть в Лувр вешать отдельно от всего.

    TLDR: Не хотите - не оборачивайте, не случится ровным счётом ничего. Это всего лишь рекомендация и примеры в них для семантических тегов иногда притянуты за уши, потому что эти теги в большинстве своём не решали какие-то реальные проблемы, а были введены для красоты, которая у каждого своя.
    Ответ написан
    7 комментариев
  • Где и как хранить файлы пользователей?

    xez
    @xez
    TL Junior Roo
    1. Адреса должны быть относительными всегда
    2. Место хранения следует задавать переменной
    Ответ написан
    8 комментариев
  • Как узнать на каком этапе присваиваются cookies?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    было бы неплохо понять на каком этапе присваиваются эти ключи и перезаписать имеющиеся куки на новые

    Можно сравнивать старые с новыми печеньками, т.к. у нас python в тегах, то буду использовать лишь его (а не внешние инструменты):
    import requests
    from http.cookiejar import CookieJar
    
    # initial cookies
    initial_cookies = {}
    
    session = requests.Session()
    session.cookies = CookieJar()
    
    # set cookies
    session.cookies.update(initial_cookies)
    
    # post
    response = session.post(
        'https://seller-supply.wildberries.ru/ns/sm-supply/supply-manager/api/v1/supply/listSupplies',
        headers=headers,
        json=json_data,
    )
    
    # get updated cookies
    updated_cookies = session.cookies.get_dict()
    
    # check new cookies
    if initial_cookies != updated_cookies:
        print("Свежее печенье.")
        print("Старье:", initial_cookies)
        print("Новье:", updated_cookies)
    else:
        print("Свежее печенье не завозилось, расходимся.")

    был бы рад если кто-нибудь объяснит как в принципе присваиваются куки

    1. Запрос к серверу > возврат данных (html, json итп.) + возврат печенек (заголовок Set-Cookie).
    2. Повторный запрос (повторяем п1), но уже с печеньками. Если сервер сочтет, что пора обновить печеньки (авторизация, например), то вернет новые с заголовком Set-Cookie, соответственно приложение (отправившее запрос) мониторит такой заголовок.
    HTTP-куки
    Ответ написан
    4 комментария
  • Почему не получается заполнить базу данных sqlite через телеграмм бота?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    У Вас создается таблица login_id, но затем, Вы используете user_id... Так же, в таблице всего 1 столбец id, так и задумано?
    Ответ написан
    1 комментарий
  • Автоматизация гостиницы — реальность или фантазия?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Возможно, вопрос лишь в деньгах и рациональности, ибо преждевременная оптимизация не всегда хорошо, т.к. порой эффективнее нанять 10 рабочих вместо 1 робота, и наоборот.
    Ответ написан
    4 комментария
  • Как реализовать базовый класс для динамического создания подклассов без вызова рекурсии в Python?

    Vindicar
    @Vindicar
    RTFM!
    Пусть родительский класс имеет классовую переменную, храняющую список известных классов потомков и ассоциированные с ними данные.
    Потомки должны будут регистрировать себя в этой коллекции - либо явно (через метод или декоратор), либо неявно, через метакласс. Тогда родительский класс будет перебирать эту коллекцию в поисках "подходящего" класса-потомка и создавать его.

    Пример:
    class Parent:
        known_children = []  # список классов-потомков Parent
        @staticmethod
        def register(klass):  # декоратор для регистрации классов-потомков
            Parent.known_children.append(klass)
            return klass
        @classmethod
        def can_handle(cls, data):  # "эй, потомок, ты можешь себя создать из этих данных?"
            raise NotImplementedError()
        @staticmethod
        def make(data):  # создаёт экземпляр одного из потомков
            for child in Parent.known_children:
                if child.can_handle(data):  # потомок согласился обработать данные?
                    return child(data)  # вызываем конструктор класса-потомка 
            else:  # относится к for ... in !
                raise TypeError(f'Никто не знает, что делать с этим:\n{data!r}')
        # тут остальная начинка класса
        ...
    
    # а это пример потомка
    @Parent.register  # явная регистрация потомка через декоратор
    # так удобнее, потому что так можно создавать промежуточных потомков,
    # которые не будут реально использоваться - только в наследовании
    class SomeChild(Parent):
        @classmethod
        def can_handle(cls, data):
            return data.get('name', None) == 'SomeChild'  # критерий для определения - наш случай или нет?
        
        def __init__(self, data):
            self.x = data['x']
            self.y = data['y']
    
    c = Parent.make({'name': 'SomeChild', 'x': 42, 'y': 69})  # создаст экземпляр SomeChild
    print(c)
    try:
        Parent.make({'name': 'invalid'})  # потерпит неудачу
    except TypeError as err:
        print(err)
    Ответ написан
    Комментировать
  • Нужно ли обычную форму обратной связи лендинга защищать от спам-ботов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Нужно ли обычную форму обратной связи лендинга защищать от спам-ботов?

    Нужно.
    Если да, что можете посоветовать?

    От самопала, вроде скрытых полей, которые человек не увидит, зато увидит глупый спам-бот, до нормальных решений вроде reCAPTCHA или Yandex SmartCaptcha.

    Я использую именно reCAPTCHA (но не показываю ее, чтобы народ не злить), затем проверяю, если риски спама велики - шлю письма с высокими рисками на email с дополнительной пометкой (спам), письма автоматом сортируются в почтовом ящике по наличию спам метки, где приоритетные обрабатываются приоритетно (внезапно), а все остальные - если успеем.
    Ответ написан
    3 комментария
  • Что выбрать WP или Python+Django для сайта?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Короткий ответ (с учетом указанного ТЗ) - WP.

    Длинный ответ:
    публиковать страницы, создавать иерархию страниц, чпу url, какой то слайдер с картинками

    Учитывая типовое ТЗ, ответ - WP (все это уже реализовано, преимущественно бесплатно и в большом количестве).
    небольшое количество услуги в регионе

    Вы на старте выхода в интернет, предположу, что количество оказываемых услуг оффлайн - будет примерно равнозначно количеству оказываемых услуг онлайн, а значит производительность инструмента не первостепенна, ответ - WP.
    Нашли компанию, предлагает разработку сайта на WP или на Python+Django (дороже и дольше)

    Начнем с того, что это не равнозначные инструмент, ибо WP - это готовый движок/CMS для сайта + сам сайт (готовые шаблоны), развернул на хостинге и готово. А вот Django - это фреймворк, т.е. некий набор инструментов, да он позволяет сделать из него что угодно (ах*енно сделать (на правах отвечающего)), но потом. Соответственно, если вопроса в функционале и производительности не стоит (и предположу - сделать быстро) - выбираем WP, будет дешевле и быстрее.

    Что обычно я использую (от начального проекта к финальному):
    1. WP в стоке + сборка фронта (webpack) с оптимизацией + кэширование.
    2. Докупка железа и горизонтальное масштабирование п1 балансировщиком.
    3. Профилирование и переписывание определенных запросов под конкретные задачи в самом WP, обычно добавляет производительности в 2-3 раза (от wp там мало что остается, но ценник и сроки еще не такие, как в п4).
    4. Python + Django + кэширование (если нужно быстрее любого WP и более специфический функционал).
    5. П4 + FastAPI (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Что выбрать WP или Python+Django для сайта?

    YBB
    @YBB
    Смотрите в будущее. Сможете ли сами поддерживать и/или дорабатывать? Если не сами, то насколько легко будет найти приличного специалиста, причем не за все деньги мира.
    Ответ написан
    2 комментария
  • Python, что правильнее использовать, запуск бота на прямую или крон?

    @q2digger
    никого не трогаю, починяю примус
    правильнее сервис systemd нарисовать
    Ответ написан
    1 комментарий