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>
Поисковые Скрипты для 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) - библиотека для парсинга HTMLproxyConfig(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;
}
Добавление нового скрипта
- Создайте файл
sitename.jsв этой папке - Используйте
SCRIPT_TEMPLATE.jsкак основу - Реализуйте функцию
search() - Обновите конфигурацию сайта в настройках приложения
Обновление скриптов
Скрипты можно обновлять с сервера через настройки приложения. При обновлении конфигурации новые скрипты автоматически загружаются.
Расположение скриптов
Скрипты хранятся в двух местах:
- Встроенные скрипты:
<app>/search-scripts/(только для чтения) - Пользовательские скрипты:
<userData>/search-scripts/(можно обновлять)
Пользовательские скрипты имеют приоритет над встроенными.
Безопасность
- Скрипты выполняются в изолированном контексте
- Таймаут выполнения: 30 секунд
- Доступ только к axios и cheerio
- Нет доступа к файловой системе или другим модулям Node.js
Отладка
Ошибки скриптов логируются в консоль Electron DevTools. Для отладки:
- Откройте DevTools (F12)
- Выполните поиск
- Проверьте консоль на наличие ошибок