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>
This commit is contained in:
135
search-scripts/README.md
Normal file
135
search-scripts/README.md
Normal file
@@ -0,0 +1,135 @@
|
||||
# Поисковые Скрипты для 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. Проверьте консоль на наличие ошибок
|
||||
Reference in New Issue
Block a user