Задать вопрос
  • Что делать, если бот не хочет читать сообщение пользователя?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте так:
    @bot.message_handler(commands=['sg'])
    def sg(message):
        msg = bot.send_message(message.chat.id, 'Великолепно, приступим... Начнем с знакомства! Как тебя зовут (Хватит Фамилии и Имени)')
        bot.register_next_step_handler(msg, process_name_step)
    
    def process_name_step(message):
        name = message.text
        bot.send_message(message.chat.id, f'Приятно познакомиться, {name}!')
    Ответ написан
    1 комментарий
  • Есть ли смысл учить абсолютно все элементы HTML?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Есть ли смысл учить абсолютно все элементы HTML?

    Замените HTML на любую другую технологию и получите примерно аналогичные ответы, но имеется достаточно эффективная схема:
    1. Ставим задачу - сверстать input в виде switch.
    2. Гуглим, как сделать тот или иной эффект.
    3. Решаем задачу и приобретаем опыт и понимание, для чего то или иное действие потребовалось, а для чего нет.

    Полученный объем опыта будет определять Вас, как специалиста. Больше опыта - выше грейд.
    Ответ написан
    Комментировать
  • Почему не получается создать страницы с url точь в точь как слаг кастомного типа записи?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    WP интерпретирует url example.com/solutions как запрос к архиву кастомного типа записей solutions, а не к отдельной странице.

    - Приоритет url - wp сначала проверяет, соответствует ли url какому либо типу записей или таксономии. В Вашем случае, solutions - это тип записи, поэтому wp пытается отобразить архив записей этого типа.
    - Шаблоны архивов - wp использует шаблоны архивов для отображения списков записей определенного типа. Если у Вас нет специального шаблона для архива solutions, WordPress использует стандартный шаблон archive.php.
    Ответ написан
    3 комментария
  • Как сделать, чтобы selenium открывал уже авторизированную страничку?

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

    Самый простой вариант - использовать отдельный профиль хрома (независимая постоянная сессия браузера):
    import os
    import time
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    
    # ChromeDriver path (https://sites.google.com/chromium.org/driver/downloads)
    chromedriver_path = r'C:\project\chromedriver.exe'
    
    # Chrome profile path
    profile_dir = r'C:\project\chrome-profiles\1'
    
    # Create chrome profile (run in console):
    # $ chrome C:\project\chrome-profiles\1
    #
    # or
    #
    # auto create chrome profile (if need)
    if not os.path.exists(profile_dir):
        os.makedirs(profile_dir)
    
    # Using chrome profile
    options = webdriver.ChromeOptions()
    options.add_argument(f'--user-data-dir={profile_dir}')
    
    # Init
    service = Service(executable_path=chromedriver_path)
    driver = webdriver.Chrome(service=service, options=options)
    
    # Open website
    driver.get('https://maps.yandex.ru/')
    
    # Delay and close driver
    time.sleep(10)
    driver.quit()

    Проверяем:

    Первый запуск скрипта с переходом на maps.yandex.ru, геолокация запрещена по умолчанию - разрешаем:
    668e3052bf021461087359.png

    второй запуск скрипта с переходом на maps.yandex.ru, геолокация уже разрешена (сессия сохранилась):
    668e30657546e504380167.png
    Ответ написан
    Комментировать
  • Как вам аргумент за выбор React Query вместо RTK Query?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    https://ru.stackoverflow.com/questions/1529010/rea...

    https://www.reddit.com/r/reactjs/comments/15ucdx7/...
    acemarke

    Hi, I'm a Redux maintainer.

    Both the Redux and React Query teams recommend that:
    - If you are using Redux in the app, you should use RTK Query for your data fetching.
    - Otherwise, you should use React Query for you data fetching.

    But mixing Redux + React Query doesn't make any sense.
    Ответ написан
    Комментировать
  • Как получить промежуточное значение между двух слов?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Без регулярки:
    const url = 'www.site.ru/users/agent/512/list/france';
    const parts = url.split('/');
    const agentIndex = parts.indexOf('agent');
    const value = parts[agentIndex + 1];
    console.log(value); // 512

    с регуляркой:
    const url = 'www.site.ru/users/agent/512/list/france';
    const match = url.match(/\/agent\/(\d+)\/list/);
    const value = match ? match[1] : null;
    console.log(value); // 512
    Ответ написан
    Комментировать
  • Можно ли прочитать файл readme.txt из прикрепленного ZIP-архива и вывести в содержимом записи?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Скажите, есть возможность вывести содержимое файла readme.txt в описании публикации?

    Плагином WPDM Pro нет, необходимо прочитать содержимое txt файла из zip, затем вывести информацию на страницу WP в нужном виде.
    Ответ написан
    3 комментария
  • Как добавить переход на выбранную рубрику?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Сомнительный вариант перехода по страницам, ну ладно... Проверил, переход выполняет на нужные url рубрик:
    <div style="max-width:240px; margin:-10px auto 25px;">
        <?php
        $args = [
            'show_option_none' => 'Все рубрики',
            'orderby' => 'name',
            'show_count' => 1,
            'hide_empty' => 1,
            'hide_if_empty' => false,
            'exclude' => '10,754,121',
            'tab_index' => 0,
            'id' => 'category',
        ];
    
        wp_dropdown_categories($args);
        ?>
    </div>
    
    <?php
    $categories = get_categories([
        'exclude' => '10,754,121',
        'hide_empty' => 1,
    ]);
    
    $category_slugs = [];
    foreach ($categories as $category) {
        $category_slugs[$category->term_id] = urldecode($category->slug);
    }
    ?>
    
    <script type="text/javascript">
        document.addEventListener('DOMContentLoaded', () => {
            const dropdown = document.getElementById('category');
            const categorySlugs = <?php echo json_encode($category_slugs); ?>;
    
            console.log('Category slugs:', categorySlugs);
    
            dropdown.addEventListener('change', () => {
                const selectedValue = dropdown.options[dropdown.selectedIndex].value;
                if (selectedValue > 0) {
                    const selectedCategorySlug = decodeURIComponent(categorySlugs[selectedValue]);
                    window.location.href = `<?php echo home_url(); ?>/category/${selectedCategorySlug}`;
                }
            });
        });
    </script>

    Настройка постоянных ссылок

    668ce02d01b82594263475.png
    Ответ написан
    Комментировать
  • Curl смог, а злосчастный fetch (firefox) не может?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    CORS API ограничивает запросы с Вашего домена (Вы же выполняете js код в браузере?). Даже если Вы укажите no-cors, то API домен все равно принимает окончательное решение.

    Вам нужен любой сервер, для проксирования запроса. Выполните свой код на nodejs, и все заработает:
    import fetch from 'node-fetch';
    import {create} from './create.js';
    
    const url = 'https://api.site.ru/endpoint';
    const TOKEN = 'TOKEN';
    
    const options = {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Basic ${Buffer.from(`${TOKEN}:`).toString('base64')}`,
      },
      body: JSON.stringify({
        date: {
          from: '2024-07-01T00:00:00',
          to: '2024-07-09T00:00:00',
        },
      }),
    };
    
    fetch(url, options)
      .then((response) => response.json())
      .then((result) => create(result))
      .catch((error) => console.error(error.message));
    Ответ написан
    Комментировать
  • Как улучшить код?

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

    Никак, в любом случае будет задержка. Попробуйте так, эксперементируйте с паузой, чтобы добиться максимально быстрых кликов:
    import keyboard as kb
    import pyautogui as pt
    
    pt.PAUSE = 0.01
    
    if __name__ == '__main__':
        coordinates = [
            (-1241, 624),
            (-303, 720),
            (604, 634),
            (1363, 679),
            (1363, 679),
            (2265, 654),
            (558, 1342),
            (2476, 1255),
        ]
    
        while True:
            if kb.is_pressed('Space'):
                for x, y in coordinates:
                    pt.click(x, y)
    Ответ написан
    4 комментария
  • React Graphql в чем ошибка?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    react-apollo@3.1.5 требует @types/react ^16.8.0, но Ваш проект использует @types/react@18.3.3.

    react-apollo project is deprecated
    Попробуйте @apollo/clien вместо react-apollo.
    Ответ написан
    Комментировать
  • Как лучше сделать поле в models для нескольких файлов?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Или есть какое-нибудь другое решение?

    Для Вашей задачи можно использовать сигнал post_delete, чтобы автоматически удалять связанные файлы из модели File, когда удаляется объект модели Question.
    Ответ написан
    Комментировать
  • Какую выбрать CMS для сайта на Next.js?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    заказчику требуется также CMS

    или подключить все на WordPress, но там все как-то сделано через одно место

    Вопрос стоимости и задач. WP далеко не идеальный инструмент, но дешевый и базовые фунции реализует легко.

    В ином случае, можно выбрать Strapi, cms под все, хоть админку для электрочайника делайте. Максимальная популярность в своем небольшом сегменте.
    Ответ написан
    1 комментарий
  • Как сделать на Python генерацию бейджика из ексель таблицы?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Для gui pyqt или pyside.
    2. Для работы с excell openpyxl.
    3. Для работы с изображениями pillow.
    Ответ написан
    Комментировать
  • Почему не работает callback второй раз?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    - Зачем светить своим токеном?
    - Зачем 2 раза объявлять одну и туже функцию callback_message?
    - Внутри функции callback_message Вы использовали callback.message.chat.id для отправки сообщений, но callback.message является ссылкой на сообщение, которое инициировало callback, а не на сообщение, которое нужно отправить.
    - А как же обработка callback_data cadastral?
    - message.message_id минус 0?
    import telebot
    from telebot import types
    
    bot = telebot.TeleBot('token')
    file = open('./start1.jpg', 'rb')
    
    @bot.message_handler(commands=['start'])
    def start(message):
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton('Оценка', url='https://google.com'))
        markup.add(types.InlineKeyboardButton('Кадастровые работы', callback_data='cadastral'))
        markup.add(types.InlineKeyboardButton('Строительные экспертизы', callback_data='expertise'))
        bot.send_photo(message.chat.id, file, 
                       caption='Здравствуйте, это Бот-помощник группы компаний "Стандарт Оценка", я помогу Вам определиться с нужной услугой, оформить заявку и связаться с администратором. Выберете желаемую услугу', 
                       reply_markup=markup)
    
    @bot.callback_query_handler(func=lambda call: True)
    def callback_message(call):
        if call.data == 'cadastral':
            bot.delete_message(call.message.chat.id, call.message.message_id)
            bot.send_message(call.message.chat.id, 'Введите свое ФИО')
            bot.register_next_step_handler(call.message, message_input_step)
        elif call.data == 'expertise':
            bot.send_message(call.message.chat.id, 'Вы выбрали Строительные экспертизы')
        elif call.data == 'all':
            bot.send_message(call.message.chat.id, 'Все данные верны')
    
    def message_input_step(message):
        global name
        name = message.text
        bot.send_message(message.chat.id, 'Введите свой номер телефона')
        bot.register_next_step_handler(message, phone)
    
    def phone(message):
        global phone
        phone = message.text
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton('Все верно✅', callback_data='all'))
        markup.add(types.InlineKeyboardButton('Начать сначало❌', callback_data='cadastral'))
        bot.send_message(message.chat.id, f'Ваше ФИО: {name}\nВаш номер телефона: {phone}', reply_markup=markup)
    
    if __name__ == "__main__":
        bot.polling(none_stop=True)
    Ответ написан
    3 комментария
  • Почему next.js при билде выдает ошибку Cannot destructure property 'store' of 'useReduxContext2(...)' as it is null?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    А если так?
    // app/layout.js
    'client'
    
    import type { Metadata } from "next";
    import { Inter } from "next/font/google";
    import "@/base.scss";
    import { Provider } from 'react-redux';
    import { store } from '../redux/store';
    import Layout from "@/components/Layout";
    
    const inter = Inter({ subsets: ["latin"] });
    
    export const metadata: Metadata = {
      title: "Home | PlayCloud",
      description: "Unique web application for listening to a huge amount of music in a unique format",
    }
    
    export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
      return (
        <html lang="en">
          <body className={inter.className}>
            <Provider store={store}>
              <Layout>
                {children}
              </Layout>
            </Provider>
          </body>
        </html>
      )
    }

    Cannot destructure property 'store' of 'useReduxContext2(...)' as it is null?

    Вам не нужно использовать useReduxContext2, потому что у Вас уже есть Provider, который делает контекст доступным для всех вложенных компонентов. Используйте useSelector и useDispatch из react-redux для получения доступа к состоянию и отправки в Redux.
    Ответ написан
  • Как выводить только записи в Wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант, для постов можно использовать get_posts():
    <?php
    
    $args = array(
        'post_type' => 'post', // posts
        'posts_per_page' => -1, // counts per page
        'order' => 'ASC', // по умолчанию get_posts() возвращает посты в порядке от новых к старым, изменим на обратное
    );
    
    $posts = get_posts($args);
    
    if (!empty($posts)) :
    
        foreach ($posts as $post) : setup_postdata($post); ?>
            <div>
                <h3><?php the_title(); ?></h3>
                <h4>Краткое описание:</h4>
                <p><?php the_excerpt(); ?></p>
                <a href="<?php the_permalink(); ?>">Ссылка на запись</a>
                <p>Тип записи: <?php echo get_post_type($post); ?></p> <!-- check post type -->
            </div>
        <?php endforeach;
    
        wp_reset_postdata();
    endif; ?>

    КартинкО

    6683aca90858a877454980.png

    P.S. вставлять в button превью и заголовок не самая лучшая идея...
    Ответ написан
    Комментировать
  • Могут ли по сайту найти админа?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Насколько реально получить из сайта на Вордпресс личную информацию админов?

    Зависит от того, кто будет искать. Если хулиганы, то лишь через перебор доступов или дырку в плагине, а вот если органы, то здесь другой риторический вопрос...
    Ответ написан
    3 комментария
  • Как декодироавать строку без искажений?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    server_response = "..."  # https://gist.github.com/serrhiy/56b1f296cb7b4fbf42febaf8c08347a1
    
    def decode_unicode_escapes(string):
        return re.sub(r'\\u([0-9A-Fa-f]{4})', lambda m: chr(int(m.group(1), 16)), string)
    
    unicode_decoded = decode_unicode_escapes(server_response)
    
    try:
        res = unicode_decoded.encode('utf-8').decode('utf-8')
    except UnicodeEncodeError as e:
        print(f"Ошибка: {e}.")
        res = unicode_decoded.encode('utf-8', errors='replace').decode('utf-8', errors='replace')
    
    print(res)  # <a href='https://www.immowelt.de/immoweltag/datenschutz' target="_blank" class="hm_link" title="Datenschutzerklärung der AVIV Germany GmbH">
    Ответ написан
  • Как в wordpress убрать noindex на страницах поиска?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как вариант, remove_action():
    function test() {
        if (is_search()) {
            remove_action('wp_head', 'noindex', 10);
        }
    }
    
    add_action('wp', 'test');


    UPD:
    Возможно, кто то другой добавляет тег. Есть ли файл search.php в теме? Возможно в нем имеется noindex.
    https://stackoverflow.com/questions/28043745/wordp...
    Ответ написан
    3 комментария