Rajouter un timer pour espacer les requêtes
Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :Donc une des dernières choses qu'on va rajouter dans cette première version du script, ça va êtreun moyen d'espacer les requêtes. Donc je vais enlever ici le slice que j'avais fait pour ne
00:00:09 :faire les requêtes que sur les trois premiers films. Et ce qu'on va faire c'est donc qu'onva créer une classe, là encore on va donner le plus gros du travail à notre IA. Donc ce que je
00:00:17 :veux faire c'est avoir une classe en fait qui va encapsuler toute la logique de l'objet request,donc de l'objet session qu'on fait avec request, pour en plus rajouter un mécanisme qui va nouspermettre d'espacer les requêtes d'une valeur qu'on va déterminer dans le fichier d'environnement.
00:00:31 :Donc dans mon IA je vais lui expliquer tout ça. Je veux que tu refactores le script pour rajouterune classe qui va gérer la session avec le module request, et j'aimerais que tu ajoutes un mécanismequi permette d'espacer le temps entre chaque requête pour ne pas surcharger le serveur. Ce
00:00:47 :délai doit pouvoir être géré avec une variable dans le fichier .env pour pouvoir facilement lemodifier. Donc ça a l'air tout bon avec le module request ici, voilà je rajoute le petit s juste
00:00:57 :pour être sûr, avec une variable dans le fichier .env, parfait il a compris. Donc on va lui laisserfaire tout ça, normalement ça devrait pas être trop compliqué, il va j'espère faire une classeséparée, cinéma session, c'est pas mal mais je pense que je changerai le nom parce que c'est un
00:01:10 :peu trop spécifique, je vais l'appeler par exemple plutôt session manager ou un truc comme ça. Doncil a fait beaucoup de choses ici, alors on va voir il a créé une classe session, la session requestc'est bon, configuration du proxy, mécanisme de délai, méthode pour effectuer les requêtes, parfait,
00:01:25 :on a la variable d'environnement, une valeur par défaut, initialisation, get proxies, wait fordelay, ok donc on va aller voir tout ça plus en détail dans le code directement, on va aller voirnotre variable également dans le fichier .env, donc il ne l'a pas ajouté, comme je vous disais je
00:01:41 :pense que j'ai l'impression qu'il ne peut pas ajouter dans ce fichier .env, qu'il ne peut pasle lire en fait, ni le modifier, ce qui n'est pas trop mal d'ailleurs parce que ça évite d'avoirdes variables avec des secrets qui sont envoyés directement dans l'IA, donc je trouve que c'est
00:01:55 :assez bien comme mécanisme si c'est effectivement ça qui est effectué. Donc on va aller voir ici,on a notre wait for delay, ce que je vais faire c'est comme là on va avoir beaucoup de modifications,je vais tout accepter, si jamais il y a des problèmes on peut toujours faire un restore
00:02:09 :pour revenir à ce qu'on avait avant, donc je vais tout accepter, ça va être plus simple comme ça jevais avoir une vue globale du script et je vais réduire un petit peu aussi le font size pourqu'on voit un peu mieux tout sur une seule ligne. Donc je vais tout collapser, on a notre cinema
00:02:21 :session ici, j'ai l'impression qu'il a vraiment tout mis à l'intérieur, il a même mis le getmovie schedules, donc ça c'est pas forcément quelque chose que je vais vouloir garder,je vais vouloir probablement garder ça à l'extérieur comme une fonction séparée,mais sur le reste, donc on a le get proxy, c'est bien, dans le init on a la récupération de la
00:02:38 :session, donc une création de la session, le changement du user agent, le request delay,c'est bon, get proxy ça doit être la même chose que ce qu'on avait ici, donc c'est parfait aussi,et là dans le wait for delay, donc il va faire une vérification pour vérifier si le temps entre la
00:02:52 :requête actuelle et ce qu'il a stocké dans une variable qu'il doit avoir mis dans le init ici,voilà le last request time, donc dans cette variable last request time, il va récupérer letemps actuel, il va faire une différence entre les deux pour vérifier si le délai s'est écoulé ou
00:03:06 :non, et si c'est le cas il va faire un time.sleep, donc c'est exactement ce que je voulais, et dansle get, avant du coup de faire le get, ça va être un wrapper autour de notre get, il va toutsimplement appeler ce wait for delay, il fait le encoding d'ailleurs pour tout ce qu'on va faire
00:03:20 :avec ce get, donc c'est parfait comme ça même la première requête va avoir cet encoding, et là onva avoir le get movie schedule qui va être effectué à partir de notre classe, et effectivement là vousvoyez on a le self.get, donc il va utiliser lui même pour faire cette opération, comme je vous
00:03:33 :dis je pense que je vais quand même préférer mettre ça en dehors pour garder ça dans unefonction séparée, ou alors faire deux classes, une classe qui va être juste la session avecrequest, et une autre classe qui va être celle qui va faire les appels vers notre API pour récupérer
00:03:46 :les données. Et si on revient dans le main, du coup là voilà on crée le cinema session, on lui passele use proxy, ensuite on fait l'appel à cette URL, donc pour la première mécanique avec le getAllMovies,donc là vous voyez que au niveau du code c'est pas encore très bien séparé, justement on a
00:04:01 :certaines choses qui sont dans une classe, d'autres choses qui sont dans le main, donc c'est tout çaqu'il va falloir voir dans les prochaines parties pour avoir un code un peu plus facile à maintenir,mais la logique principale est là, et on va tester avec du coup notre variable, alors là je vais
00:04:14 :voir où est-ce qu'il a mis la variable, j'ai pas encore vu de constante ou autre, donc là requestForDelayvoilà il va récupérer requestDelay ici, mais elle n'est pas dans le fichier d'env, donc on vala rajouter ici, requestDelay, et on va mettre un délai de 1.0, on va mettre un peu plus pour
00:04:29 :voir si ça marche, on va mettre 5, et là je vais relancer le script pour voir si on a bien un délai,ça semble être le cas effectivement, là le problème c'est qu'on n'a pas de logger, donc onne voit pas combien de temps exactement, on suppose que c'est bon parce qu'on voit bien qu'il y a un
00:04:44 :petit délai entre chaque, mais je vais lui demander de rajouter quand même un logger en debug, on vase mettre ici en debug, et on va lui demander de rajouter un logger sur le délai, c'est parfaitmaintenant rajoute un logger sur le délai pour qu'on voit bien le délai qui est effectué entre
00:04:58 :chaque requête, donc je lui demande de rajouter ça, donc il nous fait un logger.debug avec letemps précis duquel on attend, première requête, pas de délai, parfait, donc ça a l'air tout bon,j'accepte, je vais relancer le script, et là vous voyez on a bien le délai qui est affiché dans
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.