option('dry-run'); $animeId = $this->option('anime-id'); $this->info("Anizium Altyazı Uyuşmazlık Düzeltici"); $this->info("====================================="); if ($dryRun) $this->warn("DRY-RUN modu — hiçbir şey silinmeyecek"); $query = Subtitle::query() ->join('episodes', 'subtitles.episode_id', '=', 'episodes.id') ->join('seasons', 'seasons.id', '=', 'episodes.season_id') ->whereNotNull('subtitles.url') ->where('subtitles.url', 'like', '%anizium%') ->select( 'subtitles.id as subtitle_id', 'subtitles.episode_id', 'subtitles.language', 'subtitles.url', 'seasons.season_number', 'episodes.episode_number', 'episodes.anime_id', ); if ($animeId) { $query->where('episodes.anime_id', (int) $animeId); } $subtitles = $query->get(); $this->info("Kontrol edilecek Anizium altyazısı: {$subtitles->count()}"); $mismatchIds = []; foreach ($subtitles as $sub) { $url = $sub->url; $season = (int) $sub->season_number; $episode = (int) $sub->episode_number; $lang = $sub->language; // URL'den name parametresini çıkar $parsed = parse_url($url); if (!isset($parsed['query'])) continue; parse_str($parsed['query'], $params); $name = $params['name'] ?? ''; if (!$name) continue; // Beklenen: s{season}_b{episode}_{lang} $expectedPrefix = "s{$season}_b{$episode}_"; if (!str_starts_with($name, $expectedPrefix)) { $mismatchIds[] = $sub->subtitle_id; $this->line( "[MISMATCH] sub_id={$sub->subtitle_id} " . "anime_id={$sub->anime_id} " . "S{$season}E{$episode} {$lang} " . "| name={$name} " . "(beklenen prefix: {$expectedPrefix})" ); } } $this->newLine(); $this->info("Uyuşmazlık bulunan: " . count($mismatchIds)); if (empty($mismatchIds)) { $this->info("Düzeltilecek altyazı bulunamadı."); return 0; } if ($dryRun) { $this->warn("--dry-run: {" . count($mismatchIds) . "} altyazı silinecekti."); return 0; } $deleted = Subtitle::whereIn('id', $mismatchIds)->delete(); $this->info("Silindi: {$deleted} yanlış altyazı."); $this->info("Botları yeniden çalıştırarak doğru altyazıları yeniden indirebilirsiniz."); $this->info(" python anizium_scraper/bot2_upload.py --daemon"); return 0; } }