• Как сейчас работает закон о маркировке рекламы в интернете?

    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)
    Ответ написан
    Комментировать
  • Нужно ли обычную форму обратной связи лендинга защищать от спам-ботов?

    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 в стоке.
    2. Оптимизация производительности WP (+кэширование) в 2-3 раза под конкретные задачи (от wp там мало что остается, но ценник и сроки еще не такие, как в п3).
    3. Python + Django + кэширование (если нужно быстрее любого WP и более специфический функционал).
    4. Python + FastAPI + кэширование (если прям совсем прижало по производительности).
    Ответ написан
    6 комментариев
  • Что выбрать WP или Python+Django для сайта?

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

    @q2digger
    никого не трогаю, починяю примус
    правильнее сервис systemd нарисовать
    Ответ написан
    1 комментарий
  • Как подключить script src= прямо в файле JS?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    const loadedModule = require('./modulePath/index.js');
    
    loadedModule.counter()
    console.log(loadedModule.awesomeValue);

    Хорошее руководство
    Ответ написан
    1 комментарий
  • Можно ли использовать calc() в медазапросе?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Вероятно вам нужен медиазапрос на соотношение сторон
    https://developer.mozilla.org/en-US/docs/Web/CSS/@...

    Там вообще много разных вариантов https://developer.mozilla.org/en-US/docs/Web/CSS/C...
    Ответ написан
    Комментировать
  • Как в wordpress сделать чтобы url категории заканчивался слешем?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    WordPress functions.php (для категорий, нужно очистить кэш wp (если используется)):
    // add a slash at the end of the url for categories
    function add_url_slash_from_categories() {
        global $wp_rewrite;
        $wp_rewrite->category_base = 'category/';
        $wp_rewrite->tag_base = 'tag/';
        $wp_rewrite->flush_rules();
    }
    
    add_action('init', 'add_url_slash_from_categories');

    WordPress functions.php (для всех, нужно очистить кэш wp (если используется)):
    // add a slash at the end of the url of all urls, excluding files
    function add_url_slash($url) {
        if (!preg_match('/\.[a-zA-Z0-9]+$/', $url)) {
            $url = trailingslashit($url);
        }
        return $url;
    }
    
    add_filter('add_url_slash', 'add_slash_to_all_urls');

    .htaccess (для всех, 301 редирект):
    # set 301 redirects for all urls without a slash at the end to a slash
    RewriteEngine On
    RewriteBase /
    RewriteRule ^category/(.*)$ /category/$1/ [R=301,L]
    RewriteRule ^tag/(.*)$ /tag/$1/ [R=301,L]
    Ответ написан
    1 комментарий
  • Снять сайт с теневого бана Google?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    После получения ссылки на пациента, все более менее прояснилось. Ниже список того, что лично меня напрягло, когда я увидел сайт (от наиболее приоритетного к наименьшему):
    - При переходе с главной по элементу каталога, я получаю url //openworkshop.su/?page=1&page_size=30&name=&game=108600&game_select=false&dependencies=false&sort=iMOD_DOWNLOADS, это же уже как бы внутренняя страница, но по url - это главная.
    - Очень похожие title и description на разных страницах.
    - Минимум текста на страницах.
    - Отсутствуют атрибуты rel="canonical".
    - Отсутствуют H1-3 заголовки.
    - Ранее был проиндексирован дубль по //5.44.41.136/, хоть и щас его нет здесь нет, но я бы все равно отдавал 403 код.
    - Слишком много "красного" и "желтого" при диагностике.
    КартинкО
    658d19b88c8e5000123808.png
    Ответ написан
    1 комментарий
  • Вордпресс, почему не выводится пагинация на странице поиска?

    YBB
    @YBB
    Пагинация на Вашей статической странице /search/ не выводится потому, что функция the_posts_pagination() работает с изначальной выборкой (у статической страницы это всегда только одна запись) и ничего не знает о том, какие WP_Query имеют место в шаблоне. Для пагинации произвольных выборок больше подходит функция paginate_links(), которой можно передать total и current из кастомной выборки.
    Ответ написан
    Комментировать
  • Как изменять сайт на питоне, аналогично javascript коду сайта?

    Vindicar
    @Vindicar
    RTFM!
    1) Как мне использовать питон код в javascript коде сайта

    Никак, большинство бразуеров поддерживает только JavaScript. Клиентский код придётся писать на нём.
    Зато ты можешь использовать любой язык на стороне сервера - если твоя программа поддерживает нужные протоколы (HTTP + websockets), браузеру будет всё равно, на чём она написана.
    2) Как я могу вносить изменения на работающую html страницу, аналогично работе javascript кода, написанного выше

    Использовать для этой цели JavaScript. JS подключается к вебсокету, Питон отдаёт данные через этот вебсокет, JS их принимает, интерпретирует как сообщения и преобразует страницу нужным образом.
    Ответ написан
    2 комментария