• Почему не получается заполнить базу данных sqlite через телеграмм бота?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    У Вас создается таблица login_id, но затем, Вы используете user_id... Так же, в таблице всего 1 столбец id, так и задумано?
    Ответ написан
    1 комментарий
  • Как узнать на каком этапе присваиваются 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 комментария
  • Как применять разные настройки Django в зависимости откуда был запрос?

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

    Как вариант, можно создать новый класс в middleware с проверкой источника запроса и использованием другого конфига по условию. В wsgi.py (если используется wsgi) пишем примерно так:
    class CustomMiddleware:
        def __init__(self, get_response):
            self.get_response = get_response
    
        def __call__(self, request):
            d = request.get_host().split(':')[0]
    
            if d == 'www.prod.com':
                settings = importlib.import_module('project.config_prod')
            elif d == 'www.test.com':
                settings = importlib.import_module('project.config_test')
            else:
                settings = importlib.import_module('project.config')
    
            request.settings = settings
    
            response = self.get_response(request)
            return response

    Django не рекомендует изменять настройки в рантайме (после запуска Django), так как это может привести к нестабильной работе и непредсказуемым результатам, особенно в многопоточной среде. А так же, импортирование разных настроек внутри middleware не обязательно повлияет на уже инициализированные компоненты Django, такие как модели, представления и т.д., так как большинство настроек читается Django один раз при запуске.
    Ответ написан
  • Как отменить правила в .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 комментария
  • Как реализовать часть сайта на react (корзина избранные сравнения)?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть потребность сделать часть функционала сайта на react, реализуется такое вообще или нет?)

    Реализуется, Add React to an Existing Project и еще пример. В моем случае частая связка WordPress + часть функционала на React.
    Ответ написан
    1 комментарий
  • Как после клика по кнопке, которая копирует текст показать сообщение "Скопировано"?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    execCommand() is deprecated, поэтому предлагаю navigator.clipboard:
    <script>
      const text = document.getElementById("promocode");
      const btn = document.getElementById("copy");
    
      btn.addEventListener('click', () => {
        if (navigator.clipboard) {
          navigator.clipboard.writeText(text.value)
            .then(() => {
              btn.textContent = "Скопировано";
            })
            .catch(err => {
              console.error('ОшибкО: ', err);
            });
        } else {
          text.select();
          document.execCommand("copy");
          btn.textContent = "Скопировано";
        }
      });
    </script>
    Ответ написан
  • Как правильно настроить перенаправление несуществующих страниц?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Или другими словами. Как сделать так, чтобы Вебмастер и поисковая система не ругались на то, что они не могут найти уже проиндексированные страницы ?

    Не удалять страницы, а вместо возможности заказать товар или услугу писать - товар/услуга временно не доступны. Если же товар/услуга больше не будут предоставляться вообще, то делать 301 редирект на ближайшего родителя.
    Я настроил 423 ошибку на такие страницы

    Это жестко конечно...
    Ответ написан
    Комментировать
  • Как задать плееру автоматическое воспроизведение при нажатии на сылку?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    https://developers.google.com/youtube/iframe_api_r...
    https://developers.google.com/youtube/player_param...
    let player;
    
    function onYouTubePlayerAPIReady() {
        player = new YT.Player('player', {
            videoId: '123',
            playerVars: {
                autoplay: 1,
                fs: 0
            },
            events: {
                'onReady': onPlayerReady
            }
        });
    }

    Так же учитывайте тот факт, что многие браузеры блокируют авто-воспроизведение звуков и видео без явного действия пользователя.
    Ответ написан
    Комментировать
  • Как захостить телеграм бота на хостинге для сайтов?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Изучив их руководство? Спросить у их поддержки?
    Вот их пример установки Django, делайте так же, только Django не ставьте.
    Ответ написан
    Комментировать
  • Какой тип Redis выбрать для высоконагруженного сайта WP?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Все очень субъективно, но некоторые особенности для каждого из решений можно выделить:
    • PhpRedis - это расширение, которое необходимо ставить вручную на Ваш сервер. Это может потребовать дополнительных технических знаний и доступа к серверу, но зато оно обеспечивает более высокую производительность.
    • Predis - простая установка через Composer, он не так быстр, как PhpRedis, но его легче добавить в проект.
    • Relay не рассматриваю, т.к. слишком новый (May 26, 2021).

    Если вам нужна максимальная производительность и Вы уверены в своих способностях по настройке сервера - выбирайте PhpRedis. Если же Вы цените простоту установки и удобство использования, Predis будет отличным выбором. Мой выбор для PHP сайтов - PhpRedis.
    Ответ написан
    1 комментарий
  • Инфоблоки как у битрикс, но в 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' );
    Ответ написан
    Комментировать
  • Как интегрировать vue 3 с этапом сборке на проекте с bitrix?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Как интегрировать vue 3 с этапом сборке на проекте с bitrix?

    Вариантов не много:
    1. Использовать тот подход, который используете сейчас.
    2. Писать отдельно фронт, а данные получать по api от битрикса.
    Ответ написан
  • Проблемы с циклом?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    // for (let i = 0; i = expenses_without_first.length; i += 8) {
    for (let i = 0; i < expenses_without_first.length; i += 8) {

    work_id_array[i / 8]

    Интересная конструкция, а если поделить 8/8, то что получится?
    Ответ написан
    9 комментариев
  • Нужно ли обычную форму обратной связи лендинга защищать от спам-ботов?

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

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

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

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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    wp_after_insert_post?
    Fires actions after a post, its terms and meta data has been saved.
    Ответ написан
    Комментировать
  • Как получить тег из закомментированного блока?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    суть вопроса это вообще реально сделать силами BS?

    Реально, если DOM не динамический. Попробуйте, как то так:
    from bs4 import BeautifulSoup, Comment
    
    html = '''
    <div class="detail-product-buy__declaration-data delivery">
    <!--p><a href="#callback-modal-delivery" data-toggle="modal">Самовывоз</a><span> "ВОТ ЭТО ДОСТАТЬ" </span></p-->
    </div>
    '''
    
    bs = BeautifulSoup(html, 'html.parser')
    div = bs.find('div', class_='detail-product-buy__declaration-data delivery')
    
    c = div.find(string=lambda text: isinstance(text, Comment))
    
    if c:
        cs = BeautifulSoup(c, 'html.parser')
        ex = cs.get_text()
        print(ex)
    else:
        print("Не найдено нихрена")
    Ответ написан
    1 комментарий
  • Как правильно наполнять интернет магазин?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    И как искать то что нужно, если артикулов нет и иногда даже соответствие артикулов не гарантирует что это идентичные товары.

    Никак. "Серебряной пули" нет, придется балансировать между "парсит робот" и "исправляет человек". Подсчитайте, что дешевле, затем, выберите наилучший из вариантов.
    Ответ написан
    Комментировать
  • Как через JS проверить что пользователь пользуется встроенным браузером?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли какой-то media query для этого?

    Нет.
    Или всякими browser detector-ами пользоваться надо?

    Только косвенно, по User-Agent или отсутствию некоторых функций, например serviceWorker.

    Пример проверки "встроенных браузеров", используя User-Agent:
    function isEmbedded(userAgent) {
      const userAgents = ['FBAV', 'Instagram', 'Snapchat', 'Twitter'];
      return userAgents.some(id => userAgent.includes(id));
    }
    
    console.log(isEmbedded(window.navigator.userAgent)); // true

    Пример проверки "встроенных браузеров", используя отсутствие функции serviceWorker:
    if (!('serviceWorker' in navigator)) console.log('Embedded?');

    Библиотека Bowser позволяет проще получать данные о браузере.
    Ответ написан
    Комментировать
  • Как отправить решение капчи?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Подставить код-решение в поле, которое ранее необходимо было сделать display=block, а затем нажать на кнопку войти, ну или любое другое действие, которое отслеживает рекапча.
    КартинкО
    659abb0ea29eb164258346.png
    Ответ написан
  • Как найти элемент по index в selenium?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Документация:
    fruit = driver.find_element(By.CSS_SELECTOR, '[index="76"]')

    Если элемент динамический, то необходимо его вначале дождаться, используя Waiting Strategies.
    Ответ написан
    Комментировать