156 lines
4.8 KiB
PHP
156 lines
4.8 KiB
PHP
<?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)
|
|
]
|
|
]); |