2023-11-20 12:42:57 +01:00
< ? php
2024-08-27 20:40:14 +02:00
function ckratelimit ( $headers ) {
$aaheaders = [];
array_shift ( $headers );
foreach ( $headers as $header )
if ( preg_match ( '#^([^:]+): (.*)$#' , $header , $matches ) === 1 )
$aaheaders [ strtolower ( $matches [ 1 ])] = $matches [ 2 ];
//$aaheaders['x-ratelimit-remaining']=0;
//print_r($aaheaders);
if ( ! isset ( $aaheaders [ 'date' ])) return [ 'ok' => false , 'error' => 'no «date» header' ];
if ( ! isset ( $aaheaders [ 'x-ratelimit-reset' ])) return [ 'ok' => false , 'error' => 'no «x-ratelimit-reset» header' ];
if ( ! isset ( $aaheaders [ 'x-ratelimit-remaining' ])) return [ 'ok' => false , 'error' => 'no «x-ratelimit-remaining» header' ];
if ( preg_match ( '#^\d+$#' , $aaheaders [ 'x-ratelimit-remaining' ]) !== 1 ) return [ 'ok' => false , 'error' => '«x-ratelimit-remaining» header is not an integer' ];
$remaining = $aaheaders [ 'x-ratelimit-remaining' ] + 0 ;
$date =@ strtotime ( $aaheaders [ 'date' ]);
if ( ! is_int ( $date )) return [ 'ok' => false , 'error' => '«date» header could not be converted to a unix timestamp' ];
$reset =@ strtotime ( $aaheaders [ 'x-ratelimit-reset' ]);
if ( ! is_int ( $reset )) return [ 'ok' => false , 'error' => '«x-ratelimit-reset» header could not be converted to a unix timestamp' ];
// don't do the one on the line below, since it happens lots of times
//if ($reset<$date) return ['ok'=>false,'error'=>'the unix timestamp parsed from «x-ratelimit-reset» header is less than the unix timestamp parsed from «date» header'];
if ( $remaining == 0 )
return [ 'ok' => true , 'sleep' => $reset - $date + 1 , 'remaining' => $remaining ];
else
return [ 'ok' => true , 'sleep' => 0 , 'remaining' => $remaining ];
2023-11-20 12:42:57 +01:00
}
?>