495 lines
26 KiB
Markdown
495 lines
26 KiB
Markdown
# TorrServer на Кра́кене — диагностика
|
||
|
||
**Дата:** 2026-09-22 · **ОБНОВЛЕНО 2026-09-24 (поздний вечер): «Мастерская сатаны» — раздач нет; ниже найден мёртвый FlareSolverr**
|
||
**Вывод:** ✅ **TorrServer исправен. ЗАДАЧА ЗАКРЫТА.** «Торренты» пусто было по причине
|
||
🔴 **`redapi` указывал на локальный lampac**, чей JacRed отдаёт формат БЕЗ
|
||
поля `info` → PidTor падал на `torrent.info.sizeName` → NPE → 500 → кэшировался
|
||
как 503. **ИСПРАВЛЕНО**: `redapi` возвращён на `http://jac.red`.
|
||
**Приёмка Alex:** «Во! теперь появились торренты. запустил F1..» — ✅ видно в UI.
|
||
Диагноз и фикс — [[family/how-to/lampac-torrents]].
|
||
**Связано:** [[personal/tech/lampac-deployment]], [[family/how-to/lampac-torrents]],
|
||
[[personal/plans/lampac-disable-1xbet-ads]], [[personal/plans/watchlist-tmdb-missing-marker]]
|
||
|
||
---
|
||
|
||
## 🔴 2026-09-24: «Мастерская сатаны» — рецидив симптома 503 + исправление про кэш
|
||
|
||
**Повод:** Alex — *«в торрентах по нему ничего не нашлось в lampac, надо проверить
|
||
почему, по каким трекерам он ищет, и можем ли мы влиять на список источников
|
||
например через prowlarr резолвер?»*
|
||
|
||
**Факт:** `/lite/pidtor?title=Мастерская сатаны&year=2025` → **HTTP 503**,
|
||
`Content-Length: 0`, **`X-Invoke-Cache: HIT`**, t=0.007–0.035s. Это **кэшированный
|
||
отказ**, а не «0 раздач». Делать вывод о трекерах по такому ответу нельзя.
|
||
|
||
### 🔴 Исправление: «кэш в `cache/fdb/`» — НЕВЕРНО (прожило сутки в двух доках)
|
||
|
||
```
|
||
$H/lampac/cache/fdb/ → 13 каталогов 0/ 1/ 2/ 3/ 4/ 5/ 7/ 9/ a/ b/ d/ e/ f/,
|
||
ВСЕ ПУСТЫЕ — find … -type f | wc -l → 0
|
||
$H/lampac/cache/module/ → 76 файлов без расширений (OEdMn4LsmVEkyTEYgfu5dg),
|
||
file → PE32 executable (DLL) Mono/.Net assembly
|
||
```
|
||
|
||
`cache/module/` — **сборки .NET-модулей**, не JSON-ответы PidTor.
|
||
Опознать модуль: `grep -l "pidtor" $H/lampac/cache/module/*` →
|
||
`strings <файл> | grep -iE "pidtor|\.dll"` → `PidTor.dll`, `lite/pidtor`,
|
||
`lite/pidtor/serial/{id}`, `lite/pidtor/s{id}`.
|
||
|
||
📌 **Практика при 503:** пробовать **заголовок, который ещё не запрашивался**
|
||
(другой год / title) — свежий ключ минует кэш и даёт честный ответ.
|
||
`docker restart lampac` кэш ответов **не снимает**.
|
||
|
||
### По каким трекерам ищет PidTor
|
||
|
||
Своего списка нет. Ходит на `{redapi}/api/v2.0/indexers/all/results?title=..&year=..` —
|
||
суффикс **`all`** = все индексеры JacRed разом; состав определяет сторона **`jac.red`**
|
||
(внешний, 144.31.3.10), не lampac.
|
||
|
||
🔴 **Prowlarr тут ни при чём** — у него свои 6 индексера и он питает Radarr/Sonarr
|
||
([[family/how-to/arr-stack-kraken]]). Моста «Prowlarr → источники Lampa» не существует.
|
||
|
||
Влияние на список источников: (а) локальный JacRed lampac — править трекеры в
|
||
`$H/lampac/data/`, `redapi` переключать **только** после появления поля `info`;
|
||
(б) Prowlarr в обход PidTor — в плеере таких источников не будет.
|
||
|
||
### Статус: ✅ ДИАГНОСТИКА ДОВЕДЕНА (2026-09-24, продолжение)
|
||
|
||
Шаги 2–3 выполнены на Кра́кене (не из Mac — апрувы на curl к внешнему хосту истекали):
|
||
|
||
```
|
||
jac.red …results?title=Мастерская сатаны&year=2025 → 200, {"Results":[],"jacred":true}
|
||
jac.red …results?title=Матрица&year=1999 → 200, 132 раздачи (контроль)
|
||
jac.red …results?title=Devils Workshop → 200, 2 раздачи (фильм 2022, НЕ тот)
|
||
```
|
||
|
||
**Итог по фильму: раздач у него действительно нет** на 25 трекерах jac.red.
|
||
Механизм PidTor исправен — доказано контролем на «Матрице». Версия «сломан поиск» неверна.
|
||
|
||
🔴 **Второй, более важный слой нашёлся ниже:** 3 из 6 индексеров Prowlarr
|
||
(RuTracker, Kinozal, Kinozal M) заблокированы с `EscalationLevel=9` до 2026-09-25 10:17
|
||
из-за мёртвого FlareSolverr (Chrome не стартует). К пустой выдаче Lampa это прямого
|
||
отношения не имеет (Prowlarr в цепочку PidTor не входит), но ломает **Radarr/Sonarr** —
|
||
то есть автозакачку. Разбор и незавершённый фикс:
|
||
[[personal/tech/prowlarr-flaresolverr-cloudflare]] §«2026-09-24».
|
||
|
||
**Список индексеров jac.red (25 шт.) — измеримо, не догадкой:**
|
||
`GET http://jac.red/api/v2.0/indexers?configured=true` → массив с `name`.
|
||
|
||
---
|
||
|
||
## ✅ Статус закрытия (2026-09-22 вечер)
|
||
|
||
| Пункт | Статус |
|
||
|---|---|
|
||
| PidTor 500/503 | ✅ исправлено, `redapi=http://jac.red` |
|
||
| Приёмка в UI | ✅ Alex запустил F1 в плеере |
|
||
| Тестовая раздача `probe` | ✅ убрана сама (сброс при рестарте) |
|
||
| `min_sid` | ✅ `min_sid: 3` убран → сток `15` |
|
||
| Минус год у «Волшебный участок: Фильм» | ✅ ЗАКРЫТО — оставлено пусто (данных нет в TMDB, фильм в производстве) |
|
||
| Документация | ✅ саммари → [[family/how-to/lampac-torrents]], план снесён |
|
||
| Запись про `cache/fdb/` | ⚠️ **исправлена 2026-09-24** — папка пустая, см. выше |
|
||
|
||
### Итог задачи (2026-09-22)
|
||
|
||
Задача про торренты **закрыта полностью**. Единственный дефект был внесён мной
|
||
(переключение `redapi` на локальный JacRed) и откачен. Разбор → саммари-док
|
||
`family/how-to/lampac-torrents.md`; детальный план `personal/plans/lampac-pidtor-503-fix.md`
|
||
снесён по требованию Alex, 8 ссылок на него перебиты.
|
||
|
||
**Онлайн НЕ гасим** — Alex запретил ([[personal/plans/lampac-disable-1xbet-ads]] не применён).
|
||
|
||
---
|
||
|
||
## Вопрос Alex
|
||
|
||
> «по просмотру: у меня есть определенные сомнения что через torrserver идут,
|
||
> там только пункт "смотреть онлайн" работает и он добавляет вотермарк и рекламу
|
||
> 1xbet - это точно с торрентов? потому что если пункт "торренты" выбрать
|
||
> при просмотре - то там пусто.»
|
||
|
||
## Ответ: сомнения Alex верны по рекламе. Но TorrServer исправен.
|
||
|
||
### Реклама 1xbet — НЕ от TorrServer
|
||
|
||
| Пункт UI | Механизм | Источник потока | Реклама |
|
||
|---|---|---|---|
|
||
| **«Торренты»** | `PidTor` → `JacRed` → magnet → `TorrServer` | P2P-раздача | **НЕТ** |
|
||
| **«Смотреть онлайн»** | `Online` + `OnlineRUS` (20 балансеров) | чужой CDN сайта | **ЕСТЬ (1xbet)** |
|
||
|
||
TorrServer не вставляет рекламу. Баннеры рисует плеер-обёртка онлайн-источника.
|
||
|
||
## 🔴 Все проверки — сырьём, не догадкой
|
||
|
||
### 1. TorrServer жив и качает
|
||
|
||
```bash
|
||
# изнутри контейнера (снаружи порт 9085 закрыт!)
|
||
docker exec lampac sh -c 'curl -s http://127.0.0.1:9085/echo'
|
||
# -> MatriX.135
|
||
```
|
||
|
||
✅ **Раздача добавилась и пошла качаться** (тест магнитом Big Buck Bunny):
|
||
|
||
```json
|
||
{"title":"probe","name":"Big Buck Bunny","hash":"dd8255ec...","stat":3,
|
||
"stat_string":"Torrent working","total_peers":343,"active_peers":7,
|
||
"connected_seeders":5,"bytes_written":6918,"bytes_read":49072,
|
||
"torrent_size":276445467}
|
||
```
|
||
|
||
⚠️ Тестовая раздача **удалена** после проверки:
|
||
`POST /ts/torrents {"action":"rem","hash":"..."}` → HTTP 200.
|
||
|
||
### 2. JacRed находит раздачи
|
||
|
||
```bash
|
||
curl -s "http://127.0.0.1:9118/api/v1.0/torrents?search=Матрица"
|
||
# HTTP 200, 74 КБ
|
||
```
|
||
|
||
Трекеры в выдаче: `kinozal`, `torrentby`, `rutor`, `rutracker`.
|
||
Магниты на месте: `magnet:?xt=urn:btih:3A44F276AA59110B5765458EA013863CFD5BFBFA`
|
||
|
||
### 3. PidTor выдаёт торренты в UI
|
||
|
||
```bash
|
||
curl -s "http://127.0.0.1:9118/lite/pidtor?title=Матрица&year=1999"
|
||
# HTTP 200, 8435 байт, 12 раздач
|
||
```
|
||
|
||
Ответ содержит рабочий торрент:
|
||
`/lite/pidtor/s61065ea115b7cc3e8db9fb5ab1f6f327f08bd1c9?tr=...`
|
||
|
||
В `/lite/events` PidTor присутствует как источник: `"name":"Pid<s>T</s>or"`.
|
||
|
||
### 4. `jac.red` резолвится
|
||
|
||
```
|
||
getent hosts jac.red -> 144.31.3.10
|
||
curl http://jac.red -> HTTP 200
|
||
```
|
||
|
||
### 5. 🔴 НО: часть фильмов отдаёт 503 ИЗ КЭША
|
||
|
||
Массовая проверка 12 позиций каталога дала **11 × HTTP 503**, 1 × HTTP 200.
|
||
При этом JacRed по тем же фильмам отдаёт раздачи:
|
||
|
||
```
|
||
F1 (2025) -> /api/v2.0/indexers/all/results -> 200, 72 раздачи (sid=203,26,18…)
|
||
Гамнет (2025) -> 200, 14 раздач (max sid=79, 6 проходят min_sid=15)
|
||
А /lite/pidtor?title=F1 -> 503 с заголовком X-Invoke-Cache: HIT
|
||
```
|
||
|
||
**`X-Invoke-Cache: HIT` + время ответа 0.0016s = ответ из памяти, запроса к
|
||
JacRed НЕ было.** Один раз источник отказал → lampac закэшировал 503 на ~40 мин.
|
||
|
||
🔴 **Диагностический признак: смотреть заголовки, не только код.**
|
||
503 ≠ «раздач нет» (тогда был бы 200 с пустым списком). 503 = отказ источника,
|
||
закэшированный процессом. Сброс — `docker restart lampac`.
|
||
|
||
## 🔴 Роли в цепочке: поиск НАРУЖУ, качание локально
|
||
|
||
```
|
||
Lampa → lampac PidTor → jac.red (ПОИСК раздач — ЧУЖОЙ хост 144.31.3.10)
|
||
→ magnet → TorrServer Кра́кена (КАЧАЕТ, локально)
|
||
→ поток /lite/pidtor/s<id>
|
||
```
|
||
|
||
⚠️ Поиск раздач **не локален** — `PidTor.redapi = "http://jac.red"`. TorrServer
|
||
только качает то, что нашёл чужой сервер. Не путать эти роли при диагностике.
|
||
|
||
### 🔴🔴 Локальный JacRed — НЕ альтернатива. Он ломает PidTor
|
||
|
||
**Проверено 2026-09-22 (стоило полной поломки):** переключение
|
||
`redapi` на `http://127.0.0.1:9118` (локальный JacRed lampac) роняет **ВСЕ**
|
||
фильмы в HTTP 500.
|
||
|
||
```
|
||
НАШ JacRed отдаёт поля: Tracker, Details, Title, Size, PublishDate,
|
||
Category, Seeders, Peers, MagnetUri
|
||
^^^ поля "info" НЕТ
|
||
|
||
jac.red отдаёт ещё: info{quality, voices[], sizeName, name, originalname,
|
||
relased}, ffprobe, languages, CategoryDesc
|
||
|
||
PidTor/Controller.cs:97:
|
||
string mediainfo = torrent.info.sizeName ?? string.Empty;
|
||
^^^^^^^^^^^^^^ info == null -> NullReferenceException -> 500
|
||
```
|
||
|
||
Локальный JacRed быстрее (0.12s против 0.35s), но **несовместим по формату**.
|
||
`redapi` обязан оставаться `http://jac.red`. Подробно:
|
||
[[family/how-to/lampac-torrents]]
|
||
|
||
## 🔴 `min_sid: 15` — второй фильтр, режущий выдачу
|
||
|
||
Реальные сиды по свежим фильмам: **1–37**. Порог 15 отсекает большинство:
|
||
|
||
```
|
||
Гамнет: из 14 раздач проходят только 6
|
||
F1: отсекаются раздачи с sid=1, 4, 7 (рабочие)
|
||
```
|
||
|
||
Понижение `min_sid` — решение Alex (низкий sid = медленнее качает).
|
||
Варианты: `1` (показывать всё) · `3..5` (компромисс) · оставить `15`.
|
||
|
||
## 🔴 Маршруты — главный питфолл разбора
|
||
|
||
TorrServer **НЕ доступен по порту 9085 напрямую** — lampac проксирует его
|
||
под префиксом **`/ts/`** на порт **9118**:
|
||
|
||
```
|
||
http://127.0.0.1:9118/ts/echo -> MatriX.135 (кто ты)
|
||
http://127.0.0.1:9118/ts/{*suffix} -> прокси на TorrServer API
|
||
http://127.0.0.1:9118/ts/stream -> воспроизведение
|
||
http://127.0.0.1:9118/ts/playlist -> плейлист
|
||
http://127.0.0.1:9118/ts/download/ -> скачивание
|
||
```
|
||
|
||
Проверять **только изнутри контейнера** (`docker exec lampac`) — снаружи
|
||
порт 9085 даёт `Connection refused`.
|
||
|
||
### Метод запроса ВАЖЕН
|
||
|
||
```
|
||
POST /ts/torrents -d '{"action":"list"}' -> 200, [] ✅ ТОЛЬКО ТАК
|
||
POST /ts/torrents с телом [] -> 400
|
||
POST /ts/torrents без тела -> 400
|
||
POST /ts/torrents с телом {} -> 400
|
||
GET /ts/torrents -> 404 (метода нет)
|
||
GET /ts/torrents/list -> 404
|
||
GET /ts/settings -> 403 (нужна авторизация ts:tspass)
|
||
```
|
||
|
||
**400 вместо 404 = маршрут существует.** Это ключевой признак при диагностике.
|
||
|
||
🔴 **Проверено 2026-09-22:** список раздач отдаёт ТОЛЬКО `-d '{"action":"list"}'`
|
||
с заголовком `Content-Type: application/json`. Пустое тело, `[]` и `{}` → 400.
|
||
Верный вызов:
|
||
|
||
```bash
|
||
ssh kraken "curl -s -m 15 -X POST http://127.0.0.1:9118/ts/torrents \
|
||
-H 'Content-Type: application/json' -d '{\"action\":\"list\"}'"
|
||
```
|
||
|
||
### Удаление раздачи
|
||
|
||
```bash
|
||
ssh kraken "curl -s -X POST http://127.0.0.1:9118/ts/torrents \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{\"action\":\"rem\",\"hash\":\"<hash>\"}'"
|
||
```
|
||
|
||
⚠️ **Раздачи живут в памяти процесса TorrServer.** `docker restart lampac`
|
||
их выгружает — тестовая раздача `probe` (Big Buck Bunny), добавленная
|
||
2026-09-22, после рестарта исчезла сама, список вернулся пустым. Убирать
|
||
вручную не потребовалось.
|
||
|
||
## 🔴 Конфиг: где что лежит
|
||
|
||
### `current.conf` (эффективный, слитый из base.conf + init.conf)
|
||
|
||
```json
|
||
"TorrServer": {
|
||
"releases": "MatriX.135",
|
||
"tsport": 9085,
|
||
"defaultPasswd": "ts",
|
||
"limit_map": [{ "pattern": "^/ts/", "map": { "limit": 50, "second": 1 } }]
|
||
},
|
||
"JacRed": {
|
||
"typesearch": "webapi",
|
||
"disableJackett": true,
|
||
"webApiHost": "http://ns3bg91xvuqfvq9h.cfhttp.top",
|
||
"Red": { "trackers": ["rutracker","rutor","kinozal","nnmclub",
|
||
"megapeer","bitru","toloka","lostfilm","baibako","torrentby",
|
||
"hdrezka","selezen","animelayer","anilibria","anifilm"] }
|
||
},
|
||
"PidTor": {
|
||
"enable": true,
|
||
"enabled": false,
|
||
"redapi": "http://jac.red",
|
||
"min_sid": 15,
|
||
"torrs": null, ← README: без этого список ПУСТОЙ
|
||
"auth_torrs": null ← ...но фактически /lite/pidtor работает
|
||
}
|
||
```
|
||
|
||
⚠️ **Расхождение с README PidTor:** README говорит «пункт появляется только
|
||
если заданы `torrs`/`auth_torrs`, иначе список пустой». Фактически при `null`
|
||
`/lite/pidtor` отдал 8435 байт с рабочей раздачей. README устарел для этой
|
||
сборки (`MatriX.135`).
|
||
|
||
### API JacRed
|
||
|
||
```
|
||
GET /api/v1.0/conf -> {"apikey":true}
|
||
GET /api/v1.0/torrents?search=... -> список раздач
|
||
GET /api/v2.0/indexers/{status}/results?Query= -> JacRed/Jackett-формат
|
||
```
|
||
|
||
⚠️ `/jacred`, `/jacred/api` → **404**. Не те пути.
|
||
|
||
### Секция `TorrServer.settings.json` (data/ts/)
|
||
|
||
```json
|
||
{"BitTorr": {"CacheSize": 100663296, "ConnectionsLimit": 25,
|
||
"DisableDHT": false, "DisablePEX": false, "DisableTCP": false,
|
||
"EnableIPv6": false, "PreloadCache": 0, "ReaderReadAHead": 83,
|
||
"TorrentDisconnectTimeout": 180, "TorrentsSavePath": "",
|
||
"UseDisk": false, "RetrackersMode": 1}}
|
||
```
|
||
|
||
## Питфоллы сессии
|
||
|
||
1. 🔴 **`/media/movies-radarr` — два разных каталога.** Снаружи `/media/movies-radarr`
|
||
это SD-пустышка (0 файлов). Реальный путь Radarr = монтируется ИЗ ДРУГОГО
|
||
диска: `/srv/dev-disk-by-uuid-49e8f586-…/media/movies-radarr` (17 каталогов).
|
||
Отдельный диск от lampac (`6194539b`). Проверять `docker inspect` маунты,
|
||
а не `find` по наружному пути.
|
||
2. 🔴 **`setsid nohup` НЕ спасает от ssh-обрыва.** Прогон генератора дважды
|
||
умирал (`client_loop: send disconnect: Broken pipe`). Рабочее решение —
|
||
`systemd-run --user --unit=<name> --scope <script>`: отвязывает от сессии.
|
||
3. 🔴 **`strings` в контейнере не даёт маршрутов TS** — пустой вывод. Смотреть
|
||
`README.md` модуля и **пробовать запросы** (404 vs 400), а не парсить бинарник.
|
||
4. 🔴 **`vast.js` и `modification.js` — НЕ источники рекламы.** VASTPlayer
|
||
не подключён в `sisi/index.html`; `modification.js` (22 КБ) даёт 0 совпадений
|
||
на `1xbet|vast|adTag`, домены только `w3.org`. Реклама от онлайн-источников.
|
||
|
||
## Итог: что реально делает «Смотреть онлайн» vs «Торренты»
|
||
|
||
```
|
||
«Смотреть онлайн» = 20 источников из /lite/events. Из них ТОРРЕНТНЫЙ — РОВНО ОДИН:
|
||
Pid<s>T</s>or http://127.0.0.1:9118/lite/pidtor balanser=pidtor
|
||
|
||
Остальные 19 — онлайн-балансеры (чужой CDN, реклама 1xbet):
|
||
Filmix · pizdatoehd · Kinobase · Phantom · Kinogo · AniDub · LeProduction ·
|
||
VeoVeo · Collaps · HDVB · Rutube · VK Видео · Kinoteatr.kg · Vibix ·
|
||
Kinotochka · Eneyida · UaKino · UAFilm · Geosaitebi
|
||
```
|
||
|
||
**Отдельного пункта «Торренты» в `/lite/events` НЕТ** — это не источник, а
|
||
интерфейс выбора раздачи внутри PidTor. Путь в UI:
|
||
карточка → «Смотреть онлайн» → **PidTor** → список раздач → выбор качества.
|
||
|
||
```bash
|
||
# проверка количества раздач на фильме из терминала
|
||
ssh kraken 'curl -s "http://127.0.0.1:9118/lite/pidtor?title=Матрица&year=1999" \
|
||
| grep -c data-json=' # -> 12
|
||
|
||
# пакетная проверка позиций каталога
|
||
python3 /tmp/probe_pidtor_batch.py
|
||
```
|
||
|
||
### Если пусто — порядок проверки (по реальной причине, 2026-09-22)
|
||
|
||
0. **СНАЧАЛА проверить `redapi`:**
|
||
`docker exec lampac sh -c 'grep -o "\"redapi\": \"[^\"]*\"" /lampac/current.conf'`
|
||
→ должно быть `http://jac.red`. Если `127.0.0.1:9118` — PidTor отдаст 500 (см. выше)
|
||
1. `curl -i "…/lite/pidtor?title=<название>&year=<год>"` — **смотреть заголовки**:
|
||
`X-Invoke-Cache: HIT` → это кэш, лечение `docker restart lampac`
|
||
2. **500** → реальная ошибка (чаще всего `info`-несовместимость источника)
|
||
3. **503** → источник отказал, кэш держит ~45 мин (`extend: 2700`)
|
||
4. **200, но 0 раздач** → реально нет раздач у трекеров
|
||
5. `min_sid: 15` (сток) — сиды < 15 отсекаются (свежие фильмы часто 1–37)
|
||
|
||
### 🔴 Порядок сброса кэша (если 503 застрял)
|
||
|
||
Кэш переживает `docker restart` — он на диске:
|
||
|
||
```bash
|
||
H=/srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f/lampac
|
||
docker stop lampac
|
||
cp -r "$H/cache/fdb" /tmp/fdb-backup-$(date +%Y%m%d-%H%M%S)/ # бэкап обязателен
|
||
rm -rf "$H/cache/fdb"; mkdir -p "$H/cache/fdb"
|
||
docker start lampac
|
||
```
|
||
|
||
⚠️ После чистки 503 сменится на **500** — это признак, что кэш больше не маскирует
|
||
настоящую причину. Дальше искать причину 500 (пункт 2 выше), а не радоваться.
|
||
|
||
---
|
||
|
||
## 🔴 «Волшебный участок: Фильм» — `year: null`. НЕ БАГ, данных нет в источнике
|
||
|
||
**Дата разбора:** 2026-09-22 · **Статус:** ✅ **ЗАКРЫТО. Оставлено пусто (решение Alex).**
|
||
|
||
### Сырьё
|
||
|
||
`watchlist.json` (единственная позиция без года из 376):
|
||
|
||
```json
|
||
{
|
||
"name": "Волшебный участок: Фильм",
|
||
"original": "Волшебный участок: Фильм",
|
||
"year": null, <- год отсутствует
|
||
"rating": 0.0,
|
||
"image": "", <- 🔴 постера ТОЖЕ нет
|
||
"href": "https://www.themoviedb.org/movie/1272100"
|
||
}
|
||
```
|
||
|
||
### Что реально отдаёт TMDB по ID 1272100
|
||
|
||
```bash
|
||
curl "https://api.themoviedb.org/3/movie/1272100?api_key=$TMDB_KEY&language=ru-RU"
|
||
```
|
||
|
||
```
|
||
ru-RU: title='Волшебный участок: Фильм' original_title='Волшебный участок: Фильм'
|
||
en-US: title='The Magic District. The Movie'
|
||
release_date = '' <- ПУСТО
|
||
status = 'In Production' <- 🔴 ФИЛЬМ ЕЩЁ НЕ ВЫШЕЛ
|
||
poster_path = None / poster=False <- постера нет
|
||
runtime = 0 imdb_id = None vote_average = 0.0
|
||
```
|
||
|
||
TMDB поиск по названию подтверждает: ровно один результат, `id=1272100`.
|
||
|
||
### Вывод: генератор работает правильно
|
||
|
||
`release_date` пуст **у самого TMDB**, потому что фильм в производстве.
|
||
Генератор честно пишет `null`. Это не дефект `tmdb_details()`.
|
||
|
||
Кинопоиск как fallback **не подходит**: запрос
|
||
`kinopoiskapiunofficial.tech/api/v2.1/films/search-by-keyword?keyword=Волшебный участок`
|
||
вернул **HTTP 400 Bad Request** (баг API на `:keyword`-маршруте). Плюс
|
||
КП-карточки фильма может ещё не существовать — сериал есть, фильм в производстве.
|
||
|
||
### Решение: НЕ ВЫДУМЫВАТЬ год
|
||
|
||
| Вариант | Оценка |
|
||
|---|---|
|
||
| **Оставить `null` (рекомендовано)** | ✅ не выдумываем данные; когда фильм выйдет — TMDB отдаст `release_date`, генератор подхватит сам |
|
||
| Заполнить год вручную | ❌ премьера неизвестна → выдуманный год хуже пустоты |
|
||
| Год из КП как fallback | ❌ КП отдаёт 400; ~30-40 мин работы, риск сломать резолв |
|
||
|
||
**Косметическая опция (если Alex захочет, ~15 мин):** выводить `"скоро"`
|
||
вместо пустого года при `status == "In Production"`.
|
||
|
||
**Правило «фильм есть → добавлять» соблюдено:** позиция в каталоге, карточка
|
||
откроется, торренты найдутся когда фильм выйдет.
|
||
|
||
**Решение Alex (2026-09-22):** «Ок, закрывай задачу» — оставлено как есть,
|
||
косметику `"скоро"` не делаем. Вопрос закрыт.
|
||
|
||
### Питфолл: где лежат ключи TMDB/KP
|
||
|
||
```
|
||
🔴 .env в $H/lampac/ НЕТ — ключи в $H/watchlist-sync/.env
|
||
(TMDB_KEY, KP_KEY). Генератор читает через load_env() — 5 мест поиска.
|
||
```
|
||
|
||
### Питфолл: пути на Кра́кене
|
||
|
||
```
|
||
🔴 HDD lampac = /srv/dev-disk-by-uuid-6194539b-03e0-4f33-986b-4da09834e82f
|
||
НЕ ...6194539b-ec7d-4b5e-9cb2-2a4e0b0a3a1a (этот UUID не существует)
|
||
watchlist.json = $H/lampac/wwwroot/watchlist.json (376 записей)
|
||
боевой .md = $H/obsidian/family/documents/movies-watchlist.md
|
||
скрипты = $H/lampac/scripts/{gen_watchlist.py,mark_missing.py}
|
||
```
|
||
|
||
⚠️ `find /srv -name watchlist.json` — единственный надёжный способ уточнить путь;
|
||
UUID в памяти/доках может быть устаревшим или обрезанным.
|