Bonjour, je récupère correctement en base de données les noms des joueurs et leur meilleur trophée correspondant du hall des légendes provenant de l'api clash royale. Mais cela est trop long a être rempli du coup le délais d'affichage sur mon site finit par être dépassé. Le problème vient du nombre de requêtes que je suis obligé de faire me semble t-il. Avez-vous une idée pour tenter de résoudre ce problème. Merci d'avance car je suis dans une impasse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php
 
function fetch_data($urls, $token) {
    $multi = curl_multi_init();
    $curl_array = array();
    $result = array();
 
    foreach ($urls as $i => $url) {
        $curl_array[$i] = curl_init($url);
 
        $headr = array();
        $headr[] = "Accept: application/json";
        $headr[] = "Authorization: Bearer " . $token;
 
        curl_setopt($curl_array[$i], CURLOPT_HTTPHEADER, $headr);
        curl_setopt($curl_array[$i], CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl_array[$i], CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, 1);
 
        curl_multi_add_handle($multi, $curl_array[$i]);
    }
 
    $running = null;
    do {
        curl_multi_exec($multi, $running);
    } while ($running > 0);
 
    foreach ($urls as $i => $url) {
        $result[$i] = json_decode(curl_multi_getcontent($curl_array[$i]), true);
        curl_multi_remove_handle($multi, $curl_array[$i]);
    }
 
    curl_multi_close($multi);
    return $result;
}
 
$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('#clantag1', '#clantag2', '#clantag3', '#clantag4');
 
// 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(array($clan_url), $token);
 
    // Assurez-vous que les données du clan sont valides
    if (!empty($clan_data) && isset($clan_data[0]['memberList'])) {
        $member_list = $clan_data[0]['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(array($player_url), $token);
 
    // Assurez-vous que les données du joueur sont valides
    if (!empty($player_data) && isset($player_data[0])) {
        $player_info = $player_data[0];
 
        // 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;
}
 
// Fermer la connexion à la base de données
$conn->close();
 
?>
Sur ma page web ça bloque à la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
} while ($running > 0);
avec le message
Fatal error: Maximum execution time of 120 seconds exceeded in C:\xampp\htdocs\***** - PHP\scriptcrfullpathlegend.php on line 26