1234567891011121314151617181920212223242526 |
- <?php
- 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];
- }
- ?>
|