JediGest
Подборка самого интересного, полезного и значимого хоть как-то связанного со мной
  • МОИ УСЛУГИ
  • ПУТЕШЕСТВИЯ
  • WEB, PYTHON, UBUNTU, JOOMLA, VIRTUEMART
  • ОБЗОРЫ, ОТЗЫВЫ
  • АВТОМОБИЛИ
  • ИЗБРАННОЕ

Пример кода парсера на python с Beautiful Soup

Информация о материале
Автор: Геннадий Едиг
Категория: Web, Python, Ubuntu, Joomla, Virtuemart
Опубликовано: 11 марта 2025
Просмотров: 73

import logging
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def fetch_page(url):
    try:
        response = requests.get(url, timeout=10)  # Устанавливаем таймаут 10 секунд
        response.raise_for_status()  # Проверяем, что запрос успешен
        return response.text
    except requests.exceptions.RequestException as e:
        logger.error(f"Ошибка при запросе страницы: {e}")
        return None

def get_headers(html):
    soup = BeautifulSoup(html, "html.parser")
    headers = soup.find_all("h1")  # Ищем все заголовки h1
    for header in headers:
        print(header.text.strip())  # Выводим текст заголовка
    return bool(headers)  # Возвращаем True, если заголовки найдены

def main():
    url = "https://jedig.ru"
    html = fetch_page(url)
    
    if html:
        if get_headers(html):
            logger.info("Заголовки успешно извлечены и выведены")
        else:
            logger.error("Не удалось извлечь заголовки")
    else:
        logger.error("Не удалось загрузить страницу")

if __name__ == "__main__":
    main()

Модуль SeleniumWebNavigator

Информация о материале
Автор: Геннадий Едиг
Категория: Web, Python, Ubuntu, Joomla, Virtuemart
Опубликовано: 11 марта 2025
Просмотров: 72

Модуль SeleniumWebNavigator

Модуль SeleniumWebNavigator предоставляет удобный интерфейс для работы с интернет-реквестами и парсингом страниц сайтов с использованием Selenium WebDriver. Этот модуль позволяет ботам подключаться к интернету и извлекать необходимую информацию без необходимости дублирования кода в каждом из них.

Основные функции

  • Инициализация WebDriver для управления браузером Firefox.
  • Поддержка режима без головы (headless) для невидимого выполнения скрипта.
  • Навигация по указанным URL-адресам.
  • Ожидание загрузки определенных элементов на странице.
  • Закрытие браузера по завершении работы.

    Подробнее: Модуль SeleniumWebNavigator

Сколько разных программ в Linux столько и выходов. Никакого однообразия.

Информация о материале
Автор: Геннадий Едиг
Категория: Web, Python, Ubuntu, Joomla, Virtuemart
Опубликовано: 09 марта 2025
Просмотров: 69

Многообразие программ и способов выхода

В мире Linux и Unix-подобных систем действительно существует множество программ, и каждая из них может иметь свои уникальные способы взаимодействия и выхода. Это может быть как преимуществом (гибкость и мощь), так и сложностью (нужно помнить много разных команд и сочетаний клавиш). 

Немного юмора и фактов:

  • less: Выход — q.
  • vim: Выход — Esc, затем :q! (если не хотите сохранять изменения).
  • nano: Выход — Ctrl + X.
  • man: Выход — q (по сути, это тоже less).
  • psql: Выход — \q.
  • top или htop: Выход — q.
  • tmux: Выход — Ctrl + B, затем d (detach), или exit для завершения сессии.
  • screen: Выход — Ctrl + A, затем d (detach), или exit для завершения сессии.
  • mysql: Выход — exit или \q.
  • python (интерактивная оболочка): Выход — exit() или Ctrl + D.

Почему так много разных способов?

Подробнее: Сколько разных программ в Linux столько и выходов. Никакого однообразия.

Пошаговая инструкция по добавлению custom фильтра в VirtueMart 4.4 на основе сторонней таблицы

Информация о материале
Автор: Геннадий Едиг
Категория: Web, Python, Ubuntu, Joomla, Virtuemart
Опубликовано: 08 марта 2025
Просмотров: 65

Шаг 1: Подготовка базы данных

Убедитесь, что у вас есть таблица sukko_virtuemart_apartment_availabilities с данными о занятости квартир. Структура таблицы должна быть такой:

CREATE TABLE sukko_virtuemart_apartment_availabilities (
    id INT PRIMARY KEY AUTO_INCREMENT,
    apartment_id INT NOT NULL,
    dtstart DATETIME NOT NULL,
    dtend DATETIME NOT NULL,
    event_id VARCHAR(255),
    status VARCHAR(50) DEFAULT 'confirmed',
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Шаг 2: Создание плагина для VirtueMart

  1. Создайте папку для плагина:
    • Перейдите в папку plugins/vmcustom/ вашего сайта на Joomla.
    • Создайте новую папку, например, availabilityfilter.
  2. Создайте файл плагина:
    • Внутри папки availabilityfilter создайте файл availabilityfilter.php.
    • Вставьте следующий код:
      <?php
      defined('_JEXEC') or die;
      
      use Joomla\CMS\Factory;
      use Joomla\CMS\Plugin\CMSPlugin;
      
      class plgVmCustomAvailabilityFilter extends CMSPlugin
      {
          public function __construct(&$subject, $config)
          {
              parent::__construct($subject, $config);
          }
      
          public function onVmSearchFilter(&$filters, &$params)
          {
              // Получаем даты из запроса
              $app = Factory::getApplication();
              $input = $app->input;
              $dtstart = $input->getString('dtstart', '');
              $dtend = $input->getString('dtend', '');
      
              if (empty($dtstart) || empty($dtend)) {
                  return;
              }
      
              // Подключаемся к базе данных
              $db = Factory::getDbo();
              $query = $db->getQuery(true);
      
              // Находим занятые квартиры
              $query->select('DISTINCT apartment_id')
                  ->from($db->quoteName('sukko_virtuemart_apartment_availabilities'))
                  ->where($db->quoteName('dtstart') . ' <= ' . $db->quote($dtend))
                  ->where($db->quoteName('dtend') . ' >= ' . $db->quote($dtstart));
      
              $db->setQuery($query);
              $occupiedApartments = $db->loadColumn();
      
              // Исключаем занятые квартиры из списка
              if (!empty($occupiedApartments)) {
                  $filters[] = $db->quoteName('virtuemart_product_id') . ' NOT IN (' . implode(',', $occupiedApartments) . ')';
              }
          }
      }
  3. Создайте XML-файл для плагина:
    • В той же папке создайте файл availabilityfilter.xml.
    • Вставьте следующий код:
      <?xml version="1.0" encoding="utf-8"?>
      <extension type="plugin" version="5.0" method="upgrade" group="vmcustom">
          <name>Availability Filter</name>
          <author>Your Name</author>
          <creationDate>2023-10-01</creationDate>
          <version>1.0</version>
          <description>Фильтр для подбора квартир по датам заезда и выезда.</description>
          <files>
              <filename plugin="availabilityfilter">availabilityfilter.php</filename>
          </files>
      </extension>

Шаг 3: Установка плагина

  1. Заархивируйте папку availabilityfilter в ZIP-файл.
  2. Перейдите в админку Joomla: Расширения → Управление → Установка.
  3. Загрузите ZIP-файл и установите плагин.
  4. После установки перейдите в Расширения → Плагины, найдите плагин Availability Filter и включите его.

Шаг 4: Добавление формы для фильтра

  1. Откройте шаблон VirtueMart, который используется на вашем сайте (например, components/com_virtuemart/templates/default/templates.php).
  2. Добавьте форму для ввода даты заезда и выезда:
    <form action="<?php echo JRoute::_('index.php?option=com_virtuemart&view=category'); ?>" method="get">
        <input type="hidden" name="option" value="com_virtuemart">
        <input type="hidden" name="view" value="category">
        <label for="dtstart">Дата заезда:</label>
        <input type="date" name="dtstart" id="dtstart" required>
        <label for="dtend">Дата выезда:</label>
        <input type="date" name="dtend" id="dtend" required>
        <button type="submit">Найти</button>
    </form>

Шаг 5: Тестирование

  1. Перейдите на страницу категории VirtueMart.
  2. Введите дату заезда и дату выезда в форму.
  3. Нажмите "Найти".
  4. Убедитесь, что отображаются только те квартиры, которые свободны в указанный период.

Шаг 6: Дополнительные улучшения

  • Кэширование: Добавьте кэширование результатов фильтрации для повышения производительности.
  • Валидация дат: Убедитесь, что дата выезда больше даты заезда.
  • Обработка ошибок: Добавьте сообщения об ошибках, если данные введены некорректно.

Пример SQL-запроса для фильтрации

Если пользователь ввел дату заезда 2023-10-01 и дату выезда 2023-10-10, запрос будет выглядеть так:

SELECT DISTINCT apartment_id
FROM sukko_virtuemart_apartment_availabilities
WHERE (
    (dtstart <= '2023-10-10' AND dtend >= '2023-10-01')
    OR
    (dtstart BETWEEN '2023-10-01' AND '2023-10-10')
    OR
    (dtend BETWEEN '2023-10-01' AND '2023-10-10')
)

Этот запрос вернет все apartment_id, которые заняты в указанный период. Затем мы исключим их из списка товаров.

Что будет, если бот, запущенный с помощью systemd, завершится с ошибкой?

Информация о материале
Автор: Геннадий Едиг
Категория: Web, Python, Ubuntu, Joomla, Virtuemart
Опубликовано: 04 марта 2025
Просмотров: 71

Что будет, если бот, запущенный с помощью systemd, завершится с ошибкой?

Если бот, запущенный с помощью systemd, завершится с ошибкой, то дальнейшее поведение зависит от конфигурации юнита systemd, который управляет этим ботом. В частности, важны параметры Restart= и RestartSec= в файле юнита.

Основные параметры, которые влияют на поведение:

1. Restart=:

  • no (по умолчанию) — система не будет перезапускать процесс после его завершения.
  • on-success — перезапуск только при успешном завершении (с кодом 0).
  • on-failure — перезапуск при завершении с ненулевым кодом возврата или при аварийном завершении (например, segfault).
  • on-abnormal — перезапуск при аварийном завершении (например, сигнал SIGSEGV).
  • always — перезапуск всегда, независимо от причины завершения.
  • on-abort — перезапуск только при аварийном завершении.

2. RestartSec=:

  • Указывает задержку перед перезапуском (например, RestartSec=5s для задержки в 5 секунд).

3. StartLimitInterval= и StartLimitBurst=:

  • Эти параметры ограничивают количество перезапусков в определённый промежуток времени. Например, если указать StartLimitInterval=60s и StartLimitBurst=5, то systemd позволит не более 5 перезапусков за 60 секунд. Если лимит превышен, systemd прекратит попытки перезапуска.

Пример конфигурации юнита:


[Unit]
Description=My Bot Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/bot.py
Restart=on-failure
RestartSec=5s
User=botuser
Group=botgroup

[Install]
WantedBy=multi-user.target
    

Что произойдёт:

  • Если бот завершится с ошибкой, и в юните указано Restart=on-failure, то systemd попытается перезапустить его через указанное в RestartSec время.
  • Если перезапуски происходят слишком часто, и срабатывает ограничение StartLimitInterval/StartLimitBurst, systemd остановит попытки перезапуска и переведёт сервис в состояние failed.

Как проверить статус сервиса:

systemctl status my-bot-service

Эта команда покажет текущее состояние сервиса, количество перезапусков и причину последнего завершения.

Как посмотреть логи:

Логи сервиса можно просмотреть с помощью journalctl:

journalctl -u my-bot-service

Что делать, если сервис не перезапускается:

  1. Проверьте конфигурацию юнита (/etc/systemd/system/my-bot-service.service).
  2. Убедитесь, что параметр Restart= настроен правильно.
  3. Проверьте логи (journalctl -u my-bot-service) для диагностики ошибки.
  4. Если проблема в коде бота, исправьте её и перезапустите сервис:
sudo systemctl restart my-bot-service

Таким образом, поведение системы зависит от настроек systemd, и при правильной конфигурации бот может быть автоматически перезапущен после сбоя.

  1. Инструкция по настройке systemd для запуска бота
  2. Как получить токены для маркета и группы ВКонтакте
  3. Как вставить HTML код в ? - Joomla 4.x.
  4. Сообщение 1С: Для того, чтобы принудительно разблокировать информационную базу, воспользуйтесь консолью кластеров сервера или запустите

Страница 4 из 10

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Яндекс.Метрика