pathSearch = (isset($argv[1]) ? $argv[1] : ""); $this->pathMove = (isset($argv[2]) ? $argv[2] : ""); if (isset($argv[3])) { for($i=0;$icreateFolder=true; if ($argv[3][$i]=="d") $this->forceDownload=true; } } $this->logicPath(); $this->findFile(); $this->findSubtitle(); } public function logicPath() { if ($this->pathSearch!="" && substr($this->pathSearch, -1)!="/") $this->pathSearch .= "/"; if ($this->pathMove!="" && substr($this->pathMove, -1)!="/") $this->pathMove .= "/"; } /** * Recherche des sous-titres à télécharger */ public function findFile() { $path = $this->pathSearch; if ($path!="") { $list = glob_perso($path); foreach($list as $l) { $info = pathinfo($l); if (is_file($l) && in_array($info["extension"], $this->extFile) && !preg_match("#VOSTF|VOSTFR#i", $info["filename"])) { if (!file_exists($path.$info["filename"].".srt")) { $this->fileToCheck[] = new fileData($info); } else if ($this->pathMove!="") { $data = new fileData($info); $this->relocateEpisode($data); } } else if (is_dir($l)) { $data = new fileData($info); if ($data->isValid()) { $sublist = glob_perso($l."/"); foreach($sublist as $sl) { $info = pathinfo($sl); if (is_file($sl) && in_array($info["extension"], $this->extFile) && !preg_match("#VOSTF|VOSTFR#i", $info["filename"])) { rename($sl, $path.$info["basename"]); $info = pathinfo($path.$info["basename"]); $this->fileToCheck[] = new fileData($info); } elseif (is_file($sl)) { unlink($sl); } } rmdir($l."/"); } } } } } /** * Déplace le fichier dans le dossier approprié : Série [ > Saison] > Episode */ public function relocateEpisode($data) { $comp = ""; if (file_exists($this->pathMove.$data->serie)) { $comp .= $data->serie; } elseif ($this->createFolder && !file_exists($this->pathMove.$data->serie)) { mkdir($this->pathMove.$data->serie); $comp .= $data->serie; } if ($comp!="") { if (file_exists($this->pathMove.$data->serie."/Saison ".intval($data->saison))) $comp .= "/Saison ".intval($data->saison); elseif (file_exists($this->pathMove.$data->serie."/Season ".intval($data->saison))) $comp .= "/Season ".intval($data->saison); } rename($this->pathSearch.$data->info["basename"], $this->pathMove.$comp."/".$data->info["basename"]); rename($this->pathSearch.$data->info["filename"].".srt", $this->pathMove.$comp."/".$data->info["filename"].".srt"); } /** * Recherche du sous-titre */ public function findSubtitle() { if (count($this->fileToCheck)>0) { foreach($this->fileToCheck as $f) { $addicted = new addictedSubtitle($f, $this->forceDownload); if ($addicted->findEpisode()) { if ($this->pathMove!="") { $this->relocateEpisode($f); } echo "Un sous-titre a été trouvé\n"; } else { echo "Aucun sous-titre trouvé\n"; } } } else { echo "Aucun sous-titre à rechercher.\n"; } } } /** * Recupère les infos importantes à partir du nom du fichier */ class fileData { public $saison; public $episode; public $serie; public $version; public $info; public function __construct($info) { $this->info = $info; $this->readName(); } public function readName() { $file = $this->info["filename"]; //preg_match("#([^0-9]+)([0-9]{2})E([0-9]{2})#", $file, $result2); if (preg_match("#S([0-9]{2})E([0-9]{2})#msui", $file, $result)) { $this->saison = $result[1]; $this->episode = $result[2]; if (preg_match("#(.*)S".$this->saison."E".$this->episode."#msui", $file, $result2)) { $this->serie = ucwords(trim(str_replace(".", " ", $result2[1]))); } } else if (preg_match("#([0-9]{1,2})x([0-9]{2})#", $file, $result)) { $this->saison = $result[1]; $this->episode = $result[2]; if (preg_match("#(.*)".$this->saison."x".$this->episode."#", $file, $result2)) { $this->serie = ucwords(trim(str_replace(".", " ", $result2[1]))); } } else if (preg_match_all("#[. ]([0-9])([0-9]{2})[. ]#", $file, $result, PREG_SET_ORDER)) { $result = end($result); $this->saison = ($result[1]<10 ? "0".$result[1] : $result[1]); $this->episode = $result[2]; if (preg_match("#(.*)".$result[1].$this->episode."#", $file, $result2)) { $this->serie = ucwords(trim(str_replace(".", " ", $result2[1]))); } } preg_match("#(LOL|AFG|FQM|ASAP|EVOLVE|IMMERSE|2HD|KILLERS)#msui", $file, $result3); $this->version = strtoupper(isset($result3[1]) ? $result3[1] : ""); } public function getSimpleName() { return $this->serie." ".$this->saison."x".$this->episode; } public function isValid() { return ($this->serie!="" && $this->saison!="" && $this->episode); } } /** * Base de source pour le téléchargement des sous-titres */ class sourceSubtitle { public $base; public $referer; public $search; public $forceExistant; public function __construct($search, $force = false) { $this->search = $search; $this->forceExistant = $force; } protected function getDataFromLink($link) { $cpt = 0; $return = false; while($return==false && $cpt<3) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->base.$link); //curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_COOKIESESSION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 120); if ($this->referer!="") curl_setopt($curl, CURLOPT_REFERER, $this->referer); $return = curl_exec($curl); curl_close($curl); $cpt++; } $this->referer = $this->base.$link; return $return; } public function findEpisode($nom) { } public function findSubtitle($link) { } public function saveSubtitle($lien) { } } /** * Source Addic7ed.com */ class addictedSubtitle extends sourceSubtitle { public $base = "http://www.addic7ed.com/"; public function findEpisode() { $episodes = $this->getDataFromLink("search.php?search=".rawurlencode($this->search->getSimpleName())."&Submit=Search"); preg_match("#]*>".$this->search->serie."[^<]*".$this->search->saison."x".$this->search->episode."[^<]*#", $episodes, $result); if (count($result)>0) { return $this->findSubtitle($result[1]); } else { preg_match("#.*".$this->search->saison."x".$this->search->episode.".*#", $episodes, $result); if (count($result)>0) { return $this->findSubtitle($result[1]); } } return false; } public function findSubtitle($link) { $soustitres = $this->getDataFromLink($link); $blocs = explode("
", $soustitres); $linkSubtitle=""; $completedLink = array(); foreach ($blocs as $b) { $valid = true; preg_match_all("#\/updated\/8\/([0-9/]*)#", $b, $resultLink); foreach($resultLink[1] as $l) { $resultVersion = array(); $dec = explode("/", $l); preg_match_all("#Version ".($this->search->version!="" ? "(".$this->search->version.")" : "([^<]*)").".*starttranslation.php\?id=".$dec[0]."&fversion=".$dec[1]."\".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER); if (count($resultVersion) == 0) { preg_match_all("#Version [^<]*.*starttranslation.php\?id=".$dec[0]."&fversion=".$dec[1]."\".*Works with ".($this->search->version!="" ? "[^<]*(".$this->search->version.")[^<]*" : "[^<]*").".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER); } if (count($resultVersion) == 0) { preg_match_all("#Version ([^<]*).*starttranslation.php\?id=".$dec[0]."&fversion=".$dec[1]."\".*saveFavorite\(".$dec[0].",8,[0-9]*\).*([0-9]{0,2}\.?[0-9]{0,2}%? ?Completed).*\/updated\/8\/(".$dec[0]."\/".$dec[1].")\"#msui", $b, $resultVersion, PREG_SET_ORDER); } if (count($resultVersion) > 0) { if (!preg_match("#saveFavorite\(".$dec[0].",8,[0-9]*\).*[0-9]*\.[0-9]*% Completed.*\/updated\/8\/(".$dec[0]."\/".$dec[1].")#msui", $b)) { $completedLink[] = "updated/8/".$l; } else { $valid = false; } if ($this->search->version!="") { if (strpos($resultVersion[0][1], $this->search->version)!==false) { $completedLink[] = "updated/8/".$l; } else { $valid = false; } } } else { $valid = false; } if ($valid) { $linkSubtitle = "updated/8/".$l; break; } } if ($valid && $linkSubtitle!="") break; } if ($this->forceExistant && $linkSubtitle=="" && !empty($completedLink)) { $linkSubtitle = $completedLink[0]; } if ($linkSubtitle!="") { return $this->saveSubtitle($linkSubtitle); } return false; } public function saveSubtitle($link) { $soustitre = $this->getDataFromLink($link); if ($soustitre!="") { $fp = fopen($this->search->info["dirname"]."/".$this->search->info["filename"].".srt", "a+"); fwrite($fp, $soustitre); fclose($fp); return true; } return false; } } function glob_perso($path, $folder=array()) { $globalPath; $list = array(); if (!empty($folder)) { if (!is_array($folder)) $folder = array($folder); foreach ($folder as $value) { if (file_exists($path.$value)) { $path = $path.$value; } else { $handle = opendir($path); if ($handle) { while (false !== ($entry = readdir($handle))) { if (strtolower($entry)==strtolower($value)) { $path = $path.$entry."/"; } } closedir($handle); } } } } $globalPath = $path; if (file_exists($globalPath)) { $handle = opendir($globalPath); if ($handle) { while (false !== ($entry = readdir($handle))) { if ($entry != "." && $entry != "..") { $list[] = $globalPath.$entry; } } closedir($handle); } } return $list; }