在搜索 2 或 3 后使用 PHP 在 Twitter 上搜索时,我收到了您的错误是速率限制。增强您在 PHP 中的冷静
function twitter_class()
{
$this->realNamePattern = '/\((.*?)\)/';
$this->intervalNames = array('second', 'minute', 'hour', 'day', 'week', 'month', 'year');
$this->intervalSeconds = array( 1, 60, 3600, 86400, 604800, 2630880, 31570560);
$this->badWords = array('somebadword', 'anotherbadword');
}
function searchURL($language, $query) {
$func_args=func_get_args();
$vars = array_map('urlencode', $func_args + array('', ''));
return vsprintf('http://search.twitter.com/search.atom?lang=%s&q=%s', $vars);
}
function getTweets($q,$lang, $limit=15)
{
$output = '';
// get the seach result
$ch = curl_init($this->searchURL($lang, $q));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$response = curl_exec($ch);
if ($response !== FALSE)
{
$xml = simplexml_load_string($response);
$output = '';
$tweets = 0;
for($i=0; $i<count($xml->entry); $i++)
{
$crtEntry = $xml->entry[$i];
$account = $crtEntry->author->uri;
$image = $crtEntry->link[1]->attributes()->href;
$tweet = $crtEntry->content;
// skip tweets containing banned words
$foundBadWord = false;
foreach ($this->badWords as $badWord)
{
if(stristr($tweet, $badWord) !== FALSE)
{
$foundBadWord = true;
break;
}
}
$tweet = str_replace('<a href=', '<a target="_blank" href=', $tweet);
// skip this tweet containing a banned word
if ($foundBadWord)
continue;
// don't process any more tweets if at the limit
if ($tweets==$limit)
break;
$tweets++;
// name is in this format "acountname (Real Name)"
preg_match($this->realNamePattern, $crtEntry->author->name, $matches);
$name = $matches[1];
// get the time passed between now and the time of tweet, don't allow for negative
// (future) values that may have occured if server time is wrong
$time = 'just now';
$secondsPassed = time() - strtotime($crtEntry->published);
if ($secondsPassed>0)
{
// see what interval are we in
for($j = count($this->intervalSeconds)-1; ($j >= 0); $j--)
{
$crtIntervalName = $this->intervalNames[$j];
$crtInterval = $this->intervalSeconds[$j];
if ($secondsPassed >= $crtInterval)
{
$value = floor($secondsPassed / $crtInterval);
if ($value > 1)
$crtIntervalName .= 's';
$time = $value . ' ' . $crtIntervalName . ' ago';
break;
}
}
}
这是我的代码,请查看它并找到我滞后的确切解决方案