# Поисковые Скрипты для Media Center Эта папка содержит кастомные JavaScript скрипты для поиска фильмов и сериалов на различных сайтах. ## Как работают скрипты Каждый скрипт выполняется в защищенном контексте Electron и получает доступ к следующим инструментам: - **axios** - для HTTP запросов - **cheerio** - для парсинга HTML (jQuery-подобный синтаксис) - **proxyConfig** - настройки прокси (если включен для сайта) ## Структура скрипта Каждый скрипт должен экспортировать функцию `search` со следующей сигнатурой: ```javascript 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 ```javascript 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 парсинг ```javascript 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. **Встроенные скрипты**: `/search-scripts/` (только для чтения) 2. **Пользовательские скрипты**: `/search-scripts/` (можно обновлять) Пользовательские скрипты имеют приоритет над встроенными. ## Безопасность - Скрипты выполняются в изолированном контексте - Таймаут выполнения: 30 секунд - Доступ только к axios и cheerio - Нет доступа к файловой системе или другим модулям Node.js ## Отладка Ошибки скриптов логируются в консоль Electron DevTools. Для отладки: 1. Откройте DevTools (F12) 2. Выполните поиск 3. Проверьте консоль на наличие ошибок