<?php /** * FavMasToKey - Traitement des favoris */ // Définir la constante pour inclure les fichiers define('FAVMASTOKEY', true); // Inclure les fichiers requis require_once 'includes/config.php'; require_once 'includes/functions.php'; // Vérifier que la requête est en POST if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); echo json_encode(['success' => false, 'message' => 'Méthode non autorisée']); exit; } // Vérifier que l'utilisateur est authentifié if (!isset($_SESSION['misskey_token']) || empty($_SESSION['misskey_token'])) { http_response_code(401); echo json_encode(['success' => false, 'message' => 'Non authentifié']); exit; } // Récupérer l'instance Misskey $misskey_instance = isset($_SESSION['misskey_instance']) ? $_SESSION['misskey_instance'] : ''; if (empty($misskey_instance)) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Instance Misskey non définie']); exit; } // Récupérer le token d'accès $token = $_SESSION['misskey_token']; // Récupérer les données envoyées $input = json_decode(file_get_contents('php://input'), true); if (!$input || !isset($input['batch']) || !is_array($input['batch'])) { http_response_code(400); echo json_encode(['success' => false, 'message' => 'Données invalides']); exit; } // Récupérer le lot à traiter $batch = $input['batch']; $currentIndex = isset($input['currentIndex']) ? (int)$input['currentIndex'] : 0; $totalItems = isset($input['totalItems']) ? (int)$input['totalItems'] : count($batch); // Résultats du traitement $results = []; // Traiter chaque URL du lot foreach ($batch as $index => $url) { // Extraire les informations de l'URL $urlParts = parse_url($url); // Vérifier que l'URL est valide if (!$urlParts || !isset($urlParts['host']) || !isset($urlParts['path'])) { $results[] = [ 'status' => 'error', 'message' => "URL invalide: $url" ]; continue; } // Extraire l'identifiant du toot $pathParts = explode('/', trim($urlParts['path'], '/')); $tootId = end($pathParts); if (!is_numeric($tootId)) { $results[] = [ 'status' => 'error', 'message' => "Impossible d'extraire l'ID du toot: $url" ]; continue; } // Construire l'URL pour la recherche fédérée sur Misskey $searchUrl = "https://" . $urlParts['host'] . "/@" . $pathParts[count($pathParts) - 3] . "/" . $tootId; // En production, ici nous ferions une recherche sur Misskey pour trouver l'équivalent du toot // Pour cette version initiale, nous simulons la réussite/échec // Simulation : 90% de réussite, 10% d'échec $success = (rand(1, 10) <= 9); if ($success) { // Simulation de l'ajout aux favoris $results[] = [ 'status' => 'success', 'message' => "Ajouté aux favoris: $url" ]; } else { // Simulation d'erreur $results[] = [ 'status' => 'error', 'message' => "Impossible d'ajouter aux favoris: $url (publication introuvable ou inaccessible)" ]; } // Dans un cas réel, nous aurions un code similaire à celui-ci: /* // Rechercher la note sur Misskey $searchData = [ 'query' => $searchUrl, 'limit' => 1 ]; $searchResult = misskey_api_request($misskey_instance, '/api/notes/search', $searchData, $token); if ($searchResult['success'] && !empty($searchResult['data'])) { // Récupérer l'ID de la note trouvée $noteId = $searchResult['data'][0]['id']; // Ajouter aux favoris $favoriteData = [ 'noteId' => $noteId ]; $favoriteResult = misskey_api_request($misskey_instance, '/api/notes/favorites/create', $favoriteData, $token); if ($favoriteResult['success']) { $results[] = [ 'status' => 'success', 'message' => "Ajouté aux favoris: $url" ]; } else { $results[] = [ 'status' => 'error', 'message' => "Erreur lors de l'ajout aux favoris: " . $favoriteResult['message'] ]; } } else { $results[] = [ 'status' => 'error', 'message' => "Publication introuvable sur Misskey: $url" ]; } */ // Pause pour éviter de surcharger l'API (à utiliser en production) // usleep(200000); // 200 ms } // Renvoyer les résultats echo json_encode([ 'success' => true, 'results' => $results, 'progress' => [ 'current' => $currentIndex + count($batch), 'total' => $totalItems, 'percentage' => round((($currentIndex + count($batch)) / $totalItems) * 100, 2) ] ]);