Optimiser requêtes api de jeux et gestion bdd
Résolu/FerméWarren37 Messages postés 40 Date d'inscription vendredi 10 juin 2022 Statut Membre Dernière intervention 25 septembre 2023 - 25 sept. 2023 à 16:01
- Optimiser requêtes api de jeux et gestion bdd
- Optimiser son pc - Accueil - Utilitaires
- Jeux java itel football - Télécharger - Jeux vidéo
- Optimiser windows 10 - Guide
- Zuma jeux - Télécharger - Jeux vidéo
- Logiciel gestion photo gratuit - Guide
10 réponses
Modifié le 24 sept. 2023 à 11:21
J'ai fait une modification. Je récupère bien les informations en base de données mais le site mouline. Quand j'ai 4 tag de clan ça mouline jusqu'à dépasser le temps imparti. Si je mets qu'un tagclan, pas d'erreur sur ma page web mais le site mouline pour afficher les infos.
<?php function fetch_data($url, $token) { $curl = curl_init($url); $headers = array( "Accept: application/json", "Authorization: Bearer " . $token, ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { // Gérer les erreurs Curl ici si nécessaire echo "Erreur Curl : " . curl_error($curl); } curl_close($curl); return json_decode($result, true); } $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // URL de base pour obtenir les données des joueurs $base_url = 'https://api.clashroyale.com/v1/players/'; // Liste des tags des clans $clan_tags = array('#tagclan1'); // Liste des tags des joueurs des 4 clans $player_tags = array(); // Boucle à travers chaque clan pour obtenir les tags des joueurs foreach ($clan_tags as $clan_tag) { // Construire l'URL complète pour obtenir les données du clan $clan_url = 'https://api.clashroyale.com/v1/clans/' . urlencode($clan_tag); // Effectuer la requête Curl pour obtenir les données du clan $clan_data = fetch_data($clan_url, $token); // Assurez-vous que les données du clan sont valides if (!empty($clan_data) && isset($clan_data['memberList'])) { $member_list = $clan_data['memberList']; // Boucle à travers la liste des membres pour obtenir les tags des joueurs foreach ($member_list as $member) { $player_tag = $member['tag']; $player_tags[] = $player_tag; } } } // Boucle à travers chaque joueur foreach ($player_tags as $player_tag) { // Construire l'URL complète pour chaque joueur $player_url = $base_url . urlencode($player_tag); // Effectuer la requête Curl pour obtenir les données du joueur $player_data = fetch_data($player_url, $token); // Assurez-vous que les données du joueur sont valides if (!empty($player_data)) { $player_info = $player_data; // Vérifiez si la clé "bestPathOfLegendSeasonResult" existe if (isset($player_info['bestPathOfLegendSeasonResult'])) { $bestPathOfLegendSeasonResult = $player_info['bestPathOfLegendSeasonResult']; // Vérifiez si la clé "trophies" existe et que les trophées sont différents de zéro if (isset($bestPathOfLegendSeasonResult['trophies']) && $bestPathOfLegendSeasonResult['trophies'] != 0) { $new_trophies = $bestPathOfLegendSeasonResult['trophies']; // Vérifiez d'abord si le joueur existe déjà en base de données $player_name = isset($player_info['name']) ? mysqli_real_escape_string($conn, $player_info['name']) : 'N/A'; $check_sql = "SELECT * FROM joueurs WHERE nom = '$player_name'"; $check_result = $conn->query($check_sql); if ($check_result->num_rows > 0) { // Le joueur existe déjà en base de données, vérifiez si les trophées ont changé $existing_player = $check_result->fetch_assoc(); $existing_trophies = $existing_player['trophées']; if ($existing_trophies != $new_trophies) { // Les trophées ont changé, mettez à jour la valeur en base de données $update_sql = "UPDATE joueurs SET trophées = '$new_trophies' WHERE nom = '$player_name'"; if ($conn->query($update_sql) === FALSE) { echo "Erreur lors de la mise à jour des données du joueur : " . $conn->error; } } } else { // Le joueur n'existe pas encore en base de données, insérez-le $insert_sql = "INSERT INTO joueurs (nom, trophées) VALUES ('$player_name', '" . mysqli_real_escape_string($conn, $new_trophies) . "')"; if ($conn->query($insert_sql) === FALSE) { echo "Erreur lors de l'insertion des données du joueur : " . $conn->error; } } } } else { // Le joueur n'a pas de données de trophées ou elles sont à zéro // Vous pouvez ajouter une logique ici pour gérer ces cas, si nécessaire } } } // Suppression des joueurs qui ne sont plus membres d'un clan $delete_sql = "DELETE FROM joueurs WHERE nom NOT IN (SELECT DISTINCT nom FROM joueurs)"; if ($conn->query($delete_sql) === FALSE) { echo "Erreur lors de la suppression des joueurs non membres de clans : " . $conn->error; } // Sélectionner les données des joueurs depuis la base de données, triées par trophées décroissants $sql = "SELECT nom, trophées FROM joueurs ORDER BY trophées DESC"; $result = $conn->query($sql); // Vérifier si des données ont été trouvées if ($result->num_rows > 0) { echo '<table>'; echo '<tr><th>Nom</th><th>Trophées</th></tr>'; // Afficher les données dans un tableau while ($row = $result->fetch_assoc()) { echo '<tr>'; echo '<td>' . $row['nom'] . '</td>'; echo '<td>' . $row['trophées'] . '</td>'; echo '</tr>'; } echo '</table>'; } else { echo "Aucune donnée de joueur trouvée."; } // Fermer la connexion à la base de données $conn->close(); ?>
24 sept. 2023 à 11:09
Bonjour,
Malheureusement pour toi, si l'api t'oblige à faire différents appels ( dans des boucles) pour récupérer les informations voulues, nous ne pourrons pas y faire grand chose.
Après.. la question à se poser est ... as tu réellement besoin du faire du "temps réel" ?
Perso, si tu as beaucoup de données à récupérer via les api .. moi je ferais en sorte de lancer la récupérer via des tâches crons. ( qui tourneraient une à deux fois par heures par exemple )
Eventuellement, je ferai même une sorte de file d'attente.
Par exemple :
- 1 ere cron : récupération de la liste des membres des clans
je stocke les tag des joureurs à traiter dans une table
- Puis, une cron qui prendrait les X premiers tags dans la table ... et irait chercher les infos des joueurs. ( en supprimant de la file, les tags des joueurs que la cron vient de traiter )
Cette cron pourrait ensuite être lancée toutes les minutes jusqu'à ce qu'il n'y ai plus de tag à traiter
puis retour à la première cron... etc ..etc...
La page de ton site n'aura plus que la partie "affichage" à gérer .. et pas l'import des données.
Modifié le 24 sept. 2023 à 13:17
<?php // Inclure les fonctions fetch_data et log_trace ici (comme dans votre code d'origine). function fetch_data($url, $token) { $curl = curl_init($url); $headers = array( "Accept: application/json", "Authorization: Bearer " . $token, ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { // Gérer les erreurs Curl ici si nécessaire echo "Erreur Curl : " . curl_error($curl); } curl_close($curl); return json_decode($result, true); } function log_trace($message) { file_put_contents( __DIR__ . '/trace.log', sprintf("[%s] %s\r\n", date('Y-m-d H:i:s.u'), $message), FILE_APPEND ); } $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // URL de base pour obtenir les données des joueurs $base_url = 'https://api.clashroyale.com/v1/players/'; // Liste des tags des clans $clan_tags = array('#tagclan1', '#tagclan2', '#tagclan3', '#tagclan4'); // Liste des tags des joueurs des 4 clans $player_tags = array(); // Boucle à travers chaque clan pour obtenir les tags des joueurs foreach ($clan_tags as $clan_tag) { // Construire l'URL complète pour obtenir les données du clan $clan_url = 'https://api.clashroyale.com/v1/clans/' . urlencode($clan_tag); log_trace('Appel au WS /clans'); // Journalisation de l'appel au WS /clans $clan_data = fetch_data($clan_url, $token); log_trace('Réponse du WS /clans'); // Journalisation de la réponse du WS /clans // Effectuer la requête Curl pour obtenir les données du clan $clan_data = fetch_data($clan_url, $token); // Assurez-vous que les données du clan sont valides if (!empty($clan_data) && isset($clan_data['memberList'])) { $member_list = $clan_data['memberList']; // Boucle à travers la liste des membres pour obtenir les tags des joueurs foreach ($member_list as $member) { $player_tag = $member['tag']; $player_tags[] = $player_tag; } } } // Insérer les tags des joueurs dans une table if (!empty($player_tags)) { // Supprimer les tags précédents de la table (pour éviter les doublons) $conn->query("TRUNCATE TABLE tags_joueurs"); // Insérer les nouveaux tags foreach ($player_tags as $player_tag) { $conn->query("INSERT INTO tags_joueurs (tag) VALUES ('$player_tag')"); } } // Fermer la connexion à la base de données $conn->close(); ?>
et
<?php // Inclure les fonctions fetch_data et log_trace ici (comme dans votre code d'origine). function fetch_data($url, $token) { $curl = curl_init($url); $headers = array( "Accept: application/json", "Authorization: Bearer " . $token, ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { // Gérer les erreurs Curl ici si nécessaire echo "Erreur Curl : " . curl_error($curl); } curl_close($curl); return json_decode($result, true); } function log_trace($message) { file_put_contents( __DIR__ . '/trace.log', sprintf("[%s] %s\r\n", date('Y-m-d H:i:s.u'), $message), FILE_APPEND ); } $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // Récupérer les X premiers tags des joueurs à traiter depuis la table $max_tags_to_process = 25; // Remplacez X par le nombre souhaité $tags_to_process = array(); $result = $conn->query("SELECT * FROM tags_joueurs LIMIT $max_tags_to_process"); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $tags_to_process[] = $row['tag']; } } // Boucle à travers les tags à traiter foreach ($tags_to_process as $player_tag) { // Construire l'URL complète pour chaque joueur $base_url = 'https://api.clashroyale.com/v1/players/'; $player_url = $base_url . urlencode($player_tag); // Effectuer la requête Curl pour obtenir les données du joueur $player_data = fetch_data($player_url, $token); // Assurez-vous que les données du joueur sont valides if (!empty($player_data)) { // Traitement des données du joueur (comme dans votre code d'origine) // Supprimer le tag traité de la table $conn->query("DELETE FROM tags_joueurs WHERE tag = '$player_tag'"); } } // Fermer la connexion à la base de données $conn->close(); ?>
Après à priori faut que j'utilise des services en ligne comme cron-job.org, EasyCron pour faire au plus simple... Mais je ne vois pas trop comment ça va s'afficher dans ma page web. Faut que je fasse juste une page php avec la table et les infos qui viennent de la bdd?
24 sept. 2023 à 13:29
Mais je ne vois pas trop comment ça va s'afficher dans ma page web. Faut que je fasse juste une page php avec la table et les infos qui viennent de la bdd?
oui
Au passage, tu pourrais gagner du temps dans ton script en ne faisant pas deux boucles
if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $tags_to_process[] = $row['tag']; } } // Boucle à travers les tags à traiter foreach ($tags_to_process as $player_tag) {
$base_url = 'https://api.clashroyale.com/v1/players/'; if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $player_tag = $row['tag']; //ici le code effectué dans ton foreach.. // Construire l'URL complète pour chaque joueur $player_url = $base_url . urlencode($player_tag); // Effectuer la requête Curl pour obtenir les données du joueur $player_data = fetch_data($player_url, $token); // Assurez-vous que les données du joueur sont valides if (!empty($player_data)) { // Traitement des données du joueur (comme dans votre code d'origine) //----------------------------------- //.... il faut stocker les données en bdd non ? //----------------------------------- // Supprimer le tag traité de la table $conn->query("DELETE FROM tags_joueurs WHERE tag = '$player_tag'"); } } }
24 sept. 2023 à 16:09
Donc la bdd ne se remplit pas avec les crons que j'ai fait. Quand j'ai transféré ma bdd en ligne sur hostinger, le résultat s'est affiché sur ma page web, mais si je la vide, elle ne se reconstruit pas. Merci déjà pour les infos.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 24 sept. 2023 à 16:57
j'ai bien les appels et réponse ws/ clans pour mes 2 crons dans trace.log. Et Le code complet de mon 2ème cron est:
<?php // Inclure les fonctions fetch_data et log_trace ici (comme dans votre code d'origine). function fetch_data($url, $token) { $curl = curl_init($url); $headers = array( "Accept: application/json", "Authorization: Bearer " . $token, ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { // Gérer les erreurs Curl ici si nécessaire echo "Erreur Curl : " . curl_error($curl); } curl_close($curl); return json_decode($result, true); } function log_trace($message) { file_put_contents( __DIR__ . '/trace.log', sprintf("[%s] %s\r\n", date('Y-m-d H:i:s.u'), $message), FILE_APPEND ); } $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // Récupérer les X premiers tags des joueurs à traiter depuis la table $max_tags_to_process = 25; // Remplacez X par le nombre souhaité $tags_to_process = array(); $result = $conn->query("SELECT * FROM tags_joueurs LIMIT $max_tags_to_process"); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $tags_to_process[] = $row['tag']; } } // Boucle à travers les tags à traiter foreach ($tags_to_process as $player_tag) { // Construire l'URL complète pour chaque joueur $base_url = 'https://api.clashroyale.com/v1/players/'; $player_url = $base_url . urlencode($player_tag); // Effectuer la requête Curl pour obtenir les données du joueur $player_data = fetch_data($player_url, $token); // Assurez-vous que les données du joueur sont valides if (!empty($player_data)) { $player_info = $player_data; // Vérifiez si la clé "bestPathOfLegendSeasonResult" existe if (isset($player_info['bestPathOfLegendSeasonResult'])) { $bestPathOfLegendSeasonResult = $player_info['bestPathOfLegendSeasonResult']; // Vérifiez si la clé "trophies" existe et que les trophées sont différents de zéro if (isset($bestPathOfLegendSeasonResult['trophies']) && $bestPathOfLegendSeasonResult['trophies'] != 0) { $new_trophies = $bestPathOfLegendSeasonResult['trophies']; // Vérifiez d'abord si le joueur existe déjà en base de données $player_name = isset($player_info['name']) ? mysqli_real_escape_string($conn, $player_info['name']) : 'N/A'; $check_sql = "SELECT * FROM joueurs WHERE nom = '$player_name'"; $check_result = $conn->query($check_sql); if ($check_result->num_rows > 0) { // Le joueur existe déjà en base de données, vérifiez si les trophées ont changé $existing_player = $check_result->fetch_assoc(); $existing_trophies = $existing_player['trophées']; if ($existing_trophies != $new_trophies) { // Les trophées ont changé, mettez à jour la valeur en base de données $update_sql = "UPDATE joueurs SET trophées = '$new_trophies' WHERE nom = '$player_name'"; if ($conn->query($update_sql) === FALSE) { echo "Erreur lors de la mise à jour des données du joueur : " . $conn->error; } } } else { // Le joueur n'existe pas encore en base de données, insérez-le $insert_sql = "INSERT INTO joueurs (nom, trophées) VALUES ('$player_name', '" . mysqli_real_escape_string($conn, $new_trophies) . "')"; if ($conn->query($insert_sql) === FALSE) { echo "Erreur lors de l'insertion des données du joueur : " . $conn->error; } } } } else { // Le joueur n'a pas de données de trophées ou elles sont à zéro // Vous pouvez ajouter une logique ici pour gérer ces cas, si nécessaire } // Supprimer le tag traité de la table $conn->query("DELETE FROM tags_joueurs WHERE tag = '$player_tag'"); } } // Fermer la connexion à la base de données $conn->close(); ?>
24 sept. 2023 à 17:01
Ma bdd ne se remplit pas. Help please...
24 sept. 2023 à 18:18
Déjà, ne faire qu'une seul fichier de connexion à ta bdd que tu pourras ensuite utiliser dans tous tes scripts
<?php // Fichier de connexion à la bdd // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { echo "La connexion à la base de données a échoué : " . $conn->connect_error; exit; }else{ echo " Connexion OK ! " . PHP_EOL; // ligne à retirer une fois que tu es sûr que ça marche }
Bien s'assurer que tu as entré les bonnes informations de connexion à la bdd ( qui ne sont pas les mêmes que celles utilisées en local... voir les infos fournies par ton hébergeur !! )
Tu pourras tester ce script et voir si le message OK s'affiche bien.
Ensuite, dans tes autres codes, tu n'auras qu'à l'inclure
<?php require_once "chemin/vers/tonFichier/connexion.php";
Puis, pour tes requêtes, il serait bien d'appliquer la forme ci-dessous pour t'assurer qu'elles fonctionnent et ne retournent pas d'erreur
$sql = "SELECT * FROM tags_joueurs LIMIT $max_tags_to_process"; if (!$conn->query($sql)) { echo "Erreur : " . $mysqli -> error . PHP_EOL; echo "Requête : " . $sql . PHP_EOL; }
Pense également à activer l'affichage des erreurs PHP au début de chacun de tes scripts...
Modifié le 25 sept. 2023 à 09:36
Ok je vais le faire. Mais je précise que si je remplis ma bdd moi même, le résultat s'affiche correctement sur mon site. Le token est le bon et les identifiants sont bons
Modifié le 25 sept. 2023 à 14:31
Donc maintenant j'ai créé deux tâches crons sur hostinger. 2 bash.sh appellent mes 2 fichiers .php. Je précise que j'ai testé ces 2 fichiers .php en insérant leur lien directement dans ma page html. La base de données se remplit alors correctement. (Et ensuite avec un autre fichier .php, je récupère les résultats sur ma page web.)
Quand je les utilise comme crons sur hostinger, la base de données ne se remplit pas...
<?php error_reporting(E_ALL); ini_set('display_errors', 1); include_once 'fonctions_partagees.php'; // Inclusion des fonctions partagées $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // URL de base pour obtenir les données des joueurs $base_url = 'https://api.clashroyale.com/v1/players/'; // Liste des tags des clans $clan_tags = array('#tagclan1', '#tagclan2', '#tagclan3', '#tagclan4'); // Liste des tags des joueurs des 4 clans $player_tags = array(); // Boucle à travers chaque clan pour obtenir les tags des joueurs foreach ($clan_tags as $clan_tag) { // Construire l'URL complète pour obtenir les données du clan $clan_url = 'https://api.clashroyale.com/v1/clans/' . urlencode($clan_tag); log_trace('Appel au WS /clans'); // Journalisation de l'appel au WS /clans // Effectuer la requête Curl pour obtenir les données du clan $clan_data = fetch_data($clan_url, $token); log_trace('Réponse du WS /clans'); // Journalisation de la réponse du WS /clans // Assurez-vous que les données du clan sont valides if (!empty($clan_data) && isset($clan_data['memberList'])) { $member_list = $clan_data['memberList']; // Boucle à travers la liste des membres pour obtenir les tags des joueurs foreach ($member_list as $member) { $player_tag = $member['tag']; $player_tags[] = $player_tag; } } } // Insérer les tags des joueurs dans une table if (!empty($player_tags)) { // Supprimer les tags précédents de la table (pour éviter les doublons) $conn->query("TRUNCATE TABLE tags_joueurs"); // Insérer les nouveaux tags foreach ($player_tags as $player_tag) { $conn->query("INSERT INTO tags_joueurs (tag) VALUES ('$player_tag')"); } } // Fermer la connexion à la base de données $conn->close(); ?>
<?php error_reporting(E_ALL); ini_set('display_errors', 1); include_once 'fonctions_partagees.php'; // Inclusion des fonctions partagées $token = ""; // Remplacez par votre token // Configuration de la base de données $servername = "localhost"; $username = ""; $password = ""; $dbname = ""; // Créer une connexion à la base de données $conn = new mysqli($servername, $username, $password, $dbname); // Vérifier la connexion if ($conn->connect_error) { die("La connexion à la base de données a échoué : " . $conn->connect_error); } // Récupérer les X premiers tags des joueurs à traiter depuis la table $max_tags_to_process = 200; // Remplacez X par le nombre souhaité $tags_to_process = array(); $result = $conn->query("SELECT * FROM tags_joueurs LIMIT $max_tags_to_process"); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $tags_to_process[] = $row['tag']; } } // Boucle à travers les tags à traiter foreach ($tags_to_process as $player_tag) { // Construire l'URL complète pour chaque joueur $base_url = 'https://api.clashroyale.com/v1/players/'; $player_url = $base_url . urlencode($player_tag); log_trace('Appel au WS /players'); // Journalisation de l'appel au WS /players // Effectuer la requête Curl pour obtenir les données du joueur $player_data = fetch_data($player_url, $token); log_trace('Réponse du WS /players'); // Journalisation de la réponse du WS /players // Assurez-vous que les données du joueur sont valides if (!empty($player_data)) { $player_info = $player_data; // Vérifiez si la clé "bestPathOfLegendSeasonResult" existe if (isset($player_info['bestPathOfLegendSeasonResult'])) { $bestPathOfLegendSeasonResult = $player_info['bestPathOfLegendSeasonResult']; // Vérifiez si la clé "trophies" existe et que les trophées sont différents de zéro if (isset($bestPathOfLegendSeasonResult['trophies']) && $bestPathOfLegendSeasonResult['trophies'] != 0) { $new_trophies = $bestPathOfLegendSeasonResult['trophies']; // Vérifiez d'abord si le joueur existe déjà en base de données $player_name = isset($player_info['name']) ? mysqli_real_escape_string($conn, $player_info['name']) : 'N/A'; $check_sql = "SELECT * FROM joueurs WHERE nom = '$player_name'"; $check_result = $conn->query($check_sql); if ($check_result->num_rows > 0) { // Le joueur existe déjà en base de données, vérifiez si les trophées ont changé $existing_player = $check_result->fetch_assoc(); $existing_trophies = $existing_player['trophées']; if ($existing_trophies != $new_trophies) { // Les trophées ont changé, mettez à jour la valeur en base de données $update_sql = "UPDATE joueurs SET trophées = '$new_trophies' WHERE nom = '$player_name'"; if ($conn->query($update_sql) === FALSE) { echo "Erreur lors de la mise à jour des données du joueur : " . $conn->error; } } } else { // Le joueur n'existe pas encore en base de données, insérez-le $insert_sql = "INSERT INTO joueurs (nom, trophées) VALUES ('$player_name', '" . mysqli_real_escape_string($conn, $new_trophies) . "')"; if ($conn->query($insert_sql) === FALSE) { echo "Erreur lors de l'insertion des données du joueur : " . $conn->error; } } } } else { // Le joueur n'a pas de données de trophées ou elles sont à zéro // Vous pouvez ajouter une logique ici pour gérer ces cas, si nécessaire } // Supprimer le tag traité de la table $conn->query("DELETE FROM tags_joueurs WHERE tag = '$player_tag'"); } } // Fermer la connexion à la base de données $conn->close(); ?>
et la page fonctions_partagees.php
<?php function fetch_data($url, $token) { $curl = curl_init($url); $headers = array( "Accept: application/json", "Authorization: Bearer " . $token, ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if (curl_errno($curl)) { // Gérer les erreurs Curl ici si nécessaire echo "Erreur Curl : " . curl_error($curl); } curl_close($curl); return json_decode($result, true); } function log_trace($message) { file_put_contents( __DIR__ . '/trace.log', sprintf("[%s] %s\r\n", date('Y-m-d H:i:s.u'), $message), FILE_APPEND ); } // Autres fonctions partagées si nécessaire // ... ?>
25 sept. 2023 à 16:01
Sujet résolu. Je n'avais pas changé l'adresse du proxy pour l'api En local c'est une autre adresse. Tout marche, tout baigne.