Files
ESH-Media/search-scripts
eshmeshek ecb5e7e49f init: media-center v2
Rewrite of ESH-Media v1 with separated main/renderer/shared architecture
(vite-plugin-electron, React 18, react-router-dom). Includes NeDB storage,
electron-store config, proxy manager with FoxyProxy/uBlock extensions,
custom server-checked updater, NSIS installer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 23:49:43 +03:00
..
2026-05-11 23:49:43 +03:00
2026-05-11 23:49:43 +03:00
2026-05-11 23:49:43 +03:00
2026-05-11 23:49:43 +03:00
2026-05-11 23:49:43 +03:00

Поисковые Скрипты для Media Center

Эта папка содержит кастомные JavaScript скрипты для поиска фильмов и сериалов на различных сайтах.

Как работают скрипты

Каждый скрипт выполняется в защищенном контексте Electron и получает доступ к следующим инструментам:

  • axios - для HTTP запросов
  • cheerio - для парсинга HTML (jQuery-подобный синтаксис)
  • proxyConfig - настройки прокси (если включен для сайта)

Структура скрипта

Каждый скрипт должен экспортировать функцию search со следующей сигнатурой:

async function search(query, siteUrl, useProxy, axios, cheerio, proxyConfig) {
  // Ваш код поиска
  return [{name: "Название фильма", url: "https://..."}];
}

Параметры:

  • query (string) - поисковый запрос пользователя
  • siteUrl (string) - базовый URL сайта (например, "https://kinogo.biz")
  • useProxy (boolean) - нужно ли использовать прокси
  • axios (object) - экземпляр axios для HTTP запросов
  • cheerio (object) - библиотека для парсинга HTML
  • proxyConfig (object) - настройки прокси {host: string, port: number}

Возвращаемое значение:

Массив объектов с результатами поиска. Каждый объект должен содержать:

Обязательные поля:

  • name (string) - название фильма/сериала
  • url (string) - ссылка на страницу фильма

Опциональные поля:

  • image (string) - URL постера
  • year (string) - год выпуска
  • description (string) - описание
  • rating (string) - рейтинг

Примеры

Пример 1: JSON API

async function search(query, siteUrl, useProxy, axios, cheerio, proxyConfig) {
  const config = {
    params: { q: query },
    timeout: 15000
  };

  if (useProxy && proxyConfig) {
    config.proxy = { host: proxyConfig.host, port: proxyConfig.port };
  }

  const response = await axios.get(`${siteUrl}/api/search`, config);

  return response.data.results.map(item => ({
    name: item.title,
    url: item.link,
    image: item.poster
  }));
}

Пример 2: HTML парсинг

async function search(query, siteUrl, useProxy, axios, cheerio, proxyConfig) {
  const config = {
    params: { q: query },
    timeout: 15000
  };

  if (useProxy && proxyConfig) {
    config.proxy = { host: proxyConfig.host, port: proxyConfig.port };
  }

  const response = await axios.get(`${siteUrl}/search`, config);
  const $ = cheerio.load(response.data);
  const results = [];

  $('.movie-card').each((i, el) => {
    const $el = $(el);
    results.push({
      name: $el.find('.title').text().trim(),
      url: siteUrl + $el.find('a').attr('href'),
      image: $el.find('img').attr('src')
    });
  });

  return results;
}

Добавление нового скрипта

  1. Создайте файл sitename.js в этой папке
  2. Используйте SCRIPT_TEMPLATE.js как основу
  3. Реализуйте функцию search()
  4. Обновите конфигурацию сайта в настройках приложения

Обновление скриптов

Скрипты можно обновлять с сервера через настройки приложения. При обновлении конфигурации новые скрипты автоматически загружаются.

Расположение скриптов

Скрипты хранятся в двух местах:

  1. Встроенные скрипты: <app>/search-scripts/ (только для чтения)
  2. Пользовательские скрипты: <userData>/search-scripts/ (можно обновлять)

Пользовательские скрипты имеют приоритет над встроенными.

Безопасность

  • Скрипты выполняются в изолированном контексте
  • Таймаут выполнения: 30 секунд
  • Доступ только к axios и cheerio
  • Нет доступа к файловой системе или другим модулям Node.js

Отладка

Ошибки скриптов логируются в консоль Electron DevTools. Для отладки:

  1. Откройте DevTools (F12)
  2. Выполните поиск
  3. Проверьте консоль на наличие ошибок