Rename to hkt.sh
This commit is contained in:
70
scripts/emby-scrape-check.mjs
Normal file
70
scripts/emby-scrape-check.mjs
Normal file
@@ -0,0 +1,70 @@
|
||||
#!/usr/bin/env node
|
||||
import { execSync } from 'child_process';
|
||||
|
||||
const EMBY_HOST = '145.239.143.92:8096';
|
||||
const EMBY_API_KEY = 'e3e52b1dcb8b47c39d46b5256bf87081';
|
||||
|
||||
function curl(url, opts = '') {
|
||||
return execSync(`curl -s ${opts} "${url}"`, { encoding: 'utf8' });
|
||||
}
|
||||
|
||||
async function loginJellyseerr() {
|
||||
const res = curl('http://145.239.143.92:5055/api/v1/auth/local',
|
||||
`-X POST -H "Content-Type: application/json" -d '{"email":"admin","password":"admin"}' -i`);
|
||||
const match = res.match(/connect\.sid=([^;]+)/);
|
||||
if (!match) throw new Error('Login failed');
|
||||
return `connect.sid=${match[1]}`;
|
||||
}
|
||||
|
||||
function getRecentRequests(cookie) {
|
||||
const data = curl('http://145.239.143.92:5055/api/v1/request?take=20&skip=0&sort=added&filter=all',
|
||||
`-H "Cookie: ${cookie}"`);
|
||||
return JSON.parse(data);
|
||||
}
|
||||
|
||||
function checkEmbyItem(tmdbId) {
|
||||
const data = curl(`http://${EMBY_HOST}/emby/Items?Recursive=true&AnyProviderIdEquals=Tmdb.${tmdbId}&api_key=${EMBY_API_KEY}`);
|
||||
return JSON.parse(data);
|
||||
}
|
||||
|
||||
function refreshMetadata(itemId) {
|
||||
curl(`http://${EMBY_HOST}/emby/Items/${itemId}/Refresh?MetadataRefreshMode=FullRefresh&ImageRefreshMode=FullRefresh&ReplaceAllMetadata=true&ReplaceAllImages=true&api_key=${EMBY_API_KEY}`, '-X POST');
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const cookie = await loginJellyseerr();
|
||||
const requests = getRecentRequests(cookie);
|
||||
|
||||
const now = Date.now();
|
||||
const oneDayAgo = now - 24 * 60 * 60 * 1000;
|
||||
const recent = requests.results.filter(r => new Date(r.createdAt).getTime() > oneDayAgo);
|
||||
|
||||
if (recent.length === 0) {
|
||||
console.log('✅ 最近24小时无新求片');
|
||||
return;
|
||||
}
|
||||
|
||||
const issues = [];
|
||||
const fixed = [];
|
||||
|
||||
for (const req of recent) {
|
||||
const result = checkEmbyItem(req.media.tmdbId);
|
||||
|
||||
if (result.Items.length === 0) continue;
|
||||
|
||||
const item = result.Items[0];
|
||||
if (!item.ImageTags || Object.keys(item.ImageTags).length === 0) {
|
||||
issues.push(`${item.Name} (${item.Id})`);
|
||||
refreshMetadata(item.Id);
|
||||
fixed.push(item.Name);
|
||||
}
|
||||
}
|
||||
|
||||
if (issues.length > 0) {
|
||||
console.log(`⚠️ 发现 ${issues.length} 个刮削问题,已触发修复:\n${fixed.join('\n')}`);
|
||||
} else {
|
||||
console.log(`✅ 检查完成,${recent.length} 个求片项刮削正常`);
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(console.error);
|
||||
Reference in New Issue
Block a user