apiKey = $apiKey; $apiSecret = $options['apiSecret'] ?? getenv('MULTI_DOWNLOADER_SECRET_KEY'); if (!$apiSecret) { throw new \InvalidArgumentException('API secret key is required'); } $this->apiSecret = $apiSecret; $this->url = $options['url'] ?? getenv('MULTI_DOWNLOADER_URL') ?: 'https://multi-dl.kub.nwb.fr'; } public function setFiles(array $files) { $this->files = []; $this->addFiles($files); return $this; } public function addFile(FileRequest $file) { $this->files[] = $file; return $this; } /** * Ajoute plusieurs fichiers à la liste de téléchargement. * * Cette méthode prend un tableau de fichiers et les ajoute un par un * à la liste de téléchargement en utilisant la méthode `addFile`. * * @param array $files Tableau de fichiers à ajouter. * @return $this L'instance actuelle pour permettre le chaînage de méthodes. */ public function addFiles(array $files) { foreach ($files as $file) { $this->addFile($file); } return $this; } private function buildRequest(): array { return array_map(function (FileRequest $file) { return $file->toArray(); }, $this->files); } /** * Télécharge les fichiers et renvoie le résultat sous forme de chaîne de caractères. * * Cette méthode envoie la requête de téléchargement et renvoie le contenu * téléchargé sous forme de chaîne de caractères. Idéal pour le traitement * de données en mémoire. * * @return string Le contenu téléchargé sous forme de chaîne. */ public function downloadAsString(): string { return $this->sendRequest(); } /** * Télécharge les fichiers et les enregistre dans un chemin spécifié. * * Cette méthode envoie la requête de téléchargement et sauvegarde le contenu * téléchargé dans le fichier spécifié par le chemin `$path`. * * @param string $path Le chemin du fichier où sauvegarder le contenu téléchargé. * @return string Réponse de la requête de téléchargement. */ public function downloadTo(string $path): string { $response = $this->sendRequest([ CURLOPT_RETURNTRANSFER => false, CURLOPT_FILE => fopen($path, 'w'), ]); return $response; } /** * Génère et renvoie un formulaire HTML pour le téléchargement de fichiers. * * Cette méthode capture la sortie du fichier 'htmlForm.php' et la renvoie * sous forme de chaîne de caractères. Utilisée pour générer dynamiquement * un formulaire de téléchargement dans une page web. * * @return string Le formulaire HTML généré pour le téléchargement. */ public function htmlForm(): string { ob_start(); include __DIR__ . '/htmlForm.php'; return ob_get_clean(); } private function sendRequest(array $options = []): string { $ch = curl_init(); $options = array_replace($options, [ CURLOPT_URL => $this->url . '/v2/zip', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => json_encode($this->buildRequest()), CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'Authorization: Bearer ' . $this->apiKey, ], ]); curl_setopt_array($ch, $options); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode !== 200) { throw new MultiDownloaderException('Error while requesting API: ' . $response); } curl_close($ch); return $response; } }