Herhaal het laatste gedeelte van de loop
Code (php)
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
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>";
}
}
?>
$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>";
}
}
?>
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.
Code (php)
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
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);
?>
$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
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?
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
die zou elke 10 seconden de waarde blijven herhalen, totdat het antwoord geen 429 (meer) is
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.