Herhaal het laatste gedeelte van de loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koh do

koh do

18/03/2015 20:17:20
Quote Anchor link
Op het moment haal ik wat informatie binnen via een API. Nu komt het wel eens voor, dat ik de rate limit overschrijd. Dus zou ik graag een if-statement maken die deze header opvangt en wanneer deze daadwerkelijk 429 is. 10 sec slaapt en vervolgens de loop opnieuw uitvoert

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php


$array
= array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,);

foreach($array AS $value){

    $api_key = '000-000-000-000';
    $url = 'https://api.url.com/' . $value . '?api_key=' . $api_key;

    // Open connection
    $ch = curl_init();

        // Set the url, number of GET vars, GET data
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        // Execute request
        $result = curl_exec($ch);

        // Check for 429
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

        // Close connection
        curl_close($ch);


    if($httpCode == 429) {

        echo 'error: 429<br>';

        // sleep(10);
        // loop this foreach again


    } else {

        echo "<pre>";
        print_r($result);
        echo "</pre>";

    }

}


?>
 
PHP hulp

PHP hulp

10/05/2021 21:23:06
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 20:41:46
Quote Anchor link
Definieer "wat informatie".

Onthoud je ook eerder opgehaalde informatie? Zo nee: overweeg dat in plaats van deze constructie.

Rate limits zijn normaal best schappelijk volgens mij (of de dienst is gratis, in beide gevallen krijg je op den duur wat je betaalt :)), en zijn er niet voor niets.
 
Ivo P

Ivo P

18/03/2015 20:46:18
Quote Anchor link
wil je de hele loop opnieuw starten, of vanaf de laatste poging verder gaan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php


$array
= array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10,);

// Open connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$api_key = '000-000-000-000';

foreach($array AS $value){


    $url = 'https://api.url.com/' . $value . '?api_key=' . $api_key;

    // Set the url, number of GET vars, GET data
    curl_setopt($ch, CURLOPT_URL, $url);

    do {
      // Execute request
      $result = curl_exec($ch);

      // Check for 429
      $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if($httpCode == 429) {
         echo 'error: 429<br>';
         sleep(10);
         // we zullen de curl_exec dus opnieuw gaan doen.
       }
    }
while ($httpCode == 429);

    echo "<pre>";
    print_r($result);
    echo "</pre>";

}

// Close connection
curl_close($ch);

?>
Gewijzigd op 18/03/2015 20:48:05 door Ivo P
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2015 21:07:56
Quote Anchor link
Wil je misschien ook je timelimt uitschakelen, anders timeout je script.

Maar je hebt dan niet echt garantie van "eindiging".

Het lijkt mij beter om bij te houden waar je was gebleven, zodat je iig geen dingen dubbel doet.

Dit komt dus uiteindelijk toch weer bij een oplossing uit waaarbij je dingen opslaat.

Tenzij het je doel is om een API continu plat te bombarderen met dezelfde verzoeken?

Ik kan ook niet opmaken wat je script uiteindelijk *doet*. Alleen maar output produceren waar je verder niets mee doet? Wat is je uiteindelijke doel?
 
Koh do

koh do

19/03/2015 08:27:41
Quote Anchor link
Uiteraard sla ik het meeste op. Dit is ook maar een voorbeeld om mijn vraag wat duidelijker te maken. Het gaat hier niet alleen om de foutmelding "rate limit" (deze zijn overigens zeer schappelijk) het kan elke melding zijn. Mijn vraag is: kan ik de pointer van de foreach één terug zetten zodat hij nogmaals de zelfde loop maakt? dus niet de hele loop alleen het laatste element waar de foutmelding is ontstaan.

Of zou ik voor een loop als deze, waar ik soms een stap terug zou willen voor een for-loop moeten gaan?? Zo ja, is er dan ook een mogelijkheid om een key-element mee te geven?
Gewijzigd op 19/03/2015 08:32:38 door koh do
 
Ivo P

Ivo P

19/03/2015 09:33:01
Quote Anchor link
zoiets als mijn code hierboven?

die zou elke 10 seconden de waarde blijven herhalen, totdat het antwoord geen 429 (meer) is
 
Peter  paul

peter paul

19/03/2015 12:02:35
Quote Anchor link
Ah, ik had heel je post niet gezien. Dat is een geweldig idee, ik zat een beetje vast in mijn denkpatroon met die foreach-loop maar dit werkt misschien nog wel beter. Bedankt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.