• Как из админки запустить php-скрипт по клику?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я бы использовал плагин, с личной админкой и кнопкой на панели меню:
    /*
    Plugin Name: Супер плагин
    Description: Невероятный плагин, взламывает пентагон по клику!
    Version: 0.1
    Author: Михаил Р.
    */
    
    function super_plugin_menu() {
        add_menu_page('Супер плагин', 'Супер плагин', 'manage_options', 'custom-php-executor', 'super_plugin');
    }
    
    function super_plugin() {
        if(isset($_POST['custom_php_code'])) {
            $code = stripslashes($_POST['custom_php_code']);
            update_option('super_plugin_custom_code', $code);
        } else {
            $code = get_option('super_plugin_custom_code', '');
        }
    
        ?>
        <div class="wrap">
            <h2>Супер плагин</h2>
            <form method="post">
                <textarea
                    name="custom_php_code"
                    style="width:100%;height:200px;"
                ><?php echo htmlspecialchars($code); ?></textarea>
                <input type="submit" value="Выполнить, как следует!" class="button button-primary">
            </form>
        </div>
    
        <?php
        if(!empty($code)) {
            eval($code);
        }
    }
    
    add_action('admin_menu', 'super_plugin_menu');

    КартинкО

    65ca1aaf1a6e2384036131.png
    65ca1ab6114ec549148365.png
    65ca1abcca92b540993230.png
    65ca1ac2ceaff186880778.png
    Ответ написан
    2 комментария
  • Почему не устанавливается nodemon?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Запустите консоль под админом. Ну и саму ошибку тоже можно было прочитать, там Вам предлагают решение.
    Ответ написан
    Комментировать
  • Как получить уровни вложенности для всех вложенных объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Функции добавить параметр - глубину вложенности.

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

    const addDepth = (val, depth = 0) =>
      val instanceof Object
        ? Object.entries(val).reduce((acc, n) => (
            acc[n[0]] = addDepth(n[1], depth + 1),
            acc
          ), { depth })
        : val;
    Ответ написан
    Комментировать
  • Есть ли в питоне в стандартной библиотеке под типы целочисленные(знаковый\безнаковый, byte, short)?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли в питоне в стандартной библиотеке под типы целочисленные(знаковый\безнаковый, byte, short)?

    Нет.
    Вопрос как без бубна и доп.библиотек реализовать ограничение на целочисленную переменную,
    данные берутся из БД и тудаже сохраняются, в БД к примеру стоит тип поля byte[0..255] or byte[-128...+128] как кроме проверок обеспечить заданные параметры для переменной в питоне, что бы она не выходила за рамки заданного типа?

    - Использовать библиотеку (рекомендую), например Pydantic (используется в самом быстром (из популярных) веб-фреймворке FastAPI по дефолту).
    - Класс (с инкапсуляцией такого действия).
    - Простые проверки.
    Ответ написан
    3 комментария
  • Почему не могу установить 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
    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
    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
    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)
    Ответ написан
    Комментировать