−Содержание
Исправление Plex-библиотеки
Точнее проверка вашей библиотеки с фильмами на предмет пропущенных сканером файлов. Собственно остро вопрос с этим встал после того, как я решил окончательно отказаться от неофициального агента Кинопоиска в пользу официального и нового агента Plex. Новый агент как-то жестко игнорировал некоторые файлы, а искать каждый и сверять показалось неинтересным.
Требования
- Собственно Plex
- PowerShell (Важно! Это не Windows PowerShell, а его Core-версия. Консоль у него тоже отдельная!)
Действуем
Открываем консоль Powershell pwsh.exe
и переходим в каталог с фильмами. Например:
cd "D:\Films"
Теперь нам надо получить имена всех видео-файлов:
$files = Get-ChildItem -Recurse -Include *.mkv,*avi,*.mp4 | select -ExpandProperty name
Ну а теперь самое интересное - получение данных от Plex:
librarySectionID
можно узнать в том же XML-файле, что и Plex Token (librarySectionID
содержится в теле файла и у каждой категории свой)$token = '?X-Plex-Token=<ваш_ключ>' # меняем <ваш_ключ> $url = 'https://<ваш_локальный_ip_plex>:32400' # меняем <ваш_локальный_ip_plex> $librarySectionID = '<ваш_id_категории>' # меняем <ваш_id_категории> [xml]$Library = (Invoke-WebRequest -Uri "$url/library/sections/$librarySectionID/all$Token" -SkipCertificateCheck).Content
Теперь, когда у нас есть выгрузка данных из определенной категории библиотеки мы, например, можем посмотреть соответствие названия фильма и файла:
$Library.MediaContainer.Video | Select-Object -Property "title",@{Name="File";Expression={$_.Media.Part.File}}
Ну а теперь попробуем найти все файлы, которые отсутствуют в библиотеке:
foreach ($file in $files) { # экранируем спецсимволы $tmp = $file -replace '\[','\[' -replace '\]','\]' -replace '\?','\?' -replace '\(','\(' -replace '\)','\)' $find = $Library.MediaContainer.Video | Where-Object {$_.Media.Part.file -match $tmp} if (!$find) { # если файл не найден, показать его имя $file } }
При желании из всего этого можно сделать регулярную задачу или прикрутить скрипт к боту.