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>
136 lines
4.9 KiB
Markdown
136 lines
4.9 KiB
Markdown
# Поисковые Скрипты для 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. **Встроенные скрипты**: `<app>/search-scripts/` (только для чтения)
|
||
2. **Пользовательские скрипты**: `<userData>/search-scripts/` (можно обновлять)
|
||
|
||
Пользовательские скрипты имеют приоритет над встроенными.
|
||
|
||
## Безопасность
|
||
|
||
- Скрипты выполняются в изолированном контексте
|
||
- Таймаут выполнения: 30 секунд
|
||
- Доступ только к axios и cheerio
|
||
- Нет доступа к файловой системе или другим модулям Node.js
|
||
|
||
## Отладка
|
||
|
||
Ошибки скриптов логируются в консоль Electron DevTools. Для отладки:
|
||
|
||
1. Откройте DevTools (F12)
|
||
2. Выполните поиск
|
||
3. Проверьте консоль на наличие ошибок
|