2017-08-09 1 views
0

Je dois faire mille requêtes à l'API IGDB et j'ai du mal à faire ce travail. Chaque fois que je lance mon script, il se charge pendant un certain temps, puis mon hébergeur me dit "Erreur: il y a un problème ... Il semble que quelque chose s'est mal passé." (pas très utile je sais). Puisque je crois que le problème vient du nombre de demandes, j'ai essayé de le réduire mais je suis à 60 demandes avec une pause de 4 secondes entre chacune et toujours pas de succès.Comment faire correctement un millier de requêtes à une API en PHP

Mon dernier essai:

$splice = array_splice($array, 0, 60); 

foreach($splice as $key => $value){ 

    $request = wp_remote_get('https://igdbcom-internet-game-database-v1.p.mashape.com/games/?fields=*&search='.$value['Name'], 
       array('headers' => array( 
          'Accept' => 'application/json', 
          'X-Mashape-Key' => 'Key'))); 

    $body = wp_remote_retrieve_body($request); 

    $data_api = json_decode($body, true); 

    sleep(4); 

} 

Est-ce que quelqu'un sait ce que je fais mal? Je suis à court d'idées ...

+0

Vous ne faites probablement rien de mal .. sauf, vous tombez en attente de délai. En général, le serveur Web (Apache, Nginx, etc.) dispose d'un délai défini pour attendre une réponse du script avant d'afficher la page 'erreur'. De plus, PHP lui-même a une limite de temps. Du côté PHP, vous pouvez définir 'set_time_limit (0)' pour le désactiver. Du côté du serveur web - vous ne pourrez peut-être pas le changer, selon votre fournisseur. Généralement, vous devriez en faire une commande de console au lieu d'une page Web. –

+1

Pourquoi essayez-vous d'effectuer une importation en vrac à partir d'une page Web à l'intérieur d'un CMS ???? !!!!!! – symcbean

Répondre

0

Cela risque fort d'être rien de plus que la réponse de PHP ou du serveur. Bien qu'il existe des moyens de contourner ces titres, ils ne sont pas pour rien.

Vous devez utiliser l'interface de ligne de commande pour exécuter des requêtes de fret, et non une interface CGI. L'accès CGI s'adresse aux utilisateurs réguliers, quel que soit leur rôle/privilège. En tant que développeur, vous avez accès au code, et au serveur (ou au moins votre administrateur système si vous êtes dans une équipe). Vous DEVRIEZ utiliser la ligne de commande pour faire ces requêtes. Cela prendra moins de temps, aura moins de chance d'échouer et les journaux d'erreurs seront imprimés immédiatement, sauf si vous les redirigez vers un fichier.

+1

Désolé pour la réponse tardive car j'étais absent ce week-end mais merci pour vos conseils! J'utilise maintenant MobaXterm en tant que client SSH pour essayer d'exécuter ces requêtes. J'ai quelques problèmes à envoyer une demande de cette façon, mais c'est un problème différent. Merci encore! – Adrien