У меня была очень похожая проблема в последнее время.Я использую этот скрипт Реми Шарпа для большинства моих запросов в твиттере: http://remysharp.com/2007/05/18/add-twitter-to-your-blog-step-by-step/
Что вам нужно понять, так это то, что таймаут API соответствует IP-адресу.Таким образом, если время ожидания API для вас истекло на основании вашего тестирования, оно не будет превышено для другого человека с другим IP-адресом.Теперь, если кто-то обращается к сайту в корпорации или в бизнесе, а другие в том же месте делают то же самое, этот тайм-аут будет происходить почти мгновенно.
Чтобы обойти это, вам нужно кэшировать свои результаты.,Я сделал это следующим образом.
Я создал систему кэширования в твиттере, используя следующий код:
$twitter_username = "tadywankenobi"; //
$number_of_tweets = "10";
$options[CURLOPT_URL] = 'http://api.twitter.com/1/statuses/user_timeline.xml?screen_name='.$twitter_username.'&count='.$number_of_tweets.'&include_rts=1';
$options[CURLOPT_PORT] = 80;
$options[CURLOPT_FOLLOWLOCATION] = true;
$options[CURLOPT_RETURNTRANSFER] = true;
$options[CURLOPT_TIMEOUT] = 60;
$tweets = cache($options);
$twxml = new SimpleXMLElement($tweets);
echo "<ul>";
for($i=0;$i<=($number_of_tweets-1);$i++){
$text = $twxml->status[$i]->text;
echo "<li>".auto_link_twitter($text)."</li>";
}
echo "</ul>";
function cache($options) {
$cache_filename = "/var/cache/tweets.xml";
if(!file_exists($cache_filename)){
$handle = fopen($cache_filename, 'w') or die('Cannot open file: '.$my_file);
fclose($handle);
}// Check if cache file exists and if not, create it
$time_expire = filectime($cache_filename) + 60*60; // Expire Time (1 hour) // Comment for first run
// Set time to check file against
if(filectime($cache_filename) >= $time_expire || filesize($cache_filename) == 0) {
// File is too old or empty, refresh cache
$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
if($response){
file_put_contents($cache_filename, $response);
}
else{
unlink($cache_filename);
}
}else{
$response = file_get_contents($cache_filename);
}
return $response;
}
В конце функция кэширования создает файл на сервере.и хранит обратную связь Twitter XML там.Затем система проверяет возраст этого файла и, если он моложе часа, получает результаты оттуда.В противном случае он снова заходит в твиттер.Вам нужно иметь файл, доступный для записи в папку / var / cache (создайте его, если его там нет).
Я вроде как взломал этот код вместе, поэтому дайте мне знать, если у вас возникнут какие-либо проблемыс этим.Он также использует функцию auto_link_twitter (), которая создает ссылки, необходимые в тексте Twitter.Я этого не писал, поэтому сейчас попробую найти ссылку на него.
Надеюсь, что все поможет,
T
ОБНОВЛЕНИЕ: Я не могу вспомнить, где я взял функцию auto_link_twitter (), так что вот она.Если человек, который написал это, прочитает этот пост, мои извинения, я не смог бы найти источник снова.
function auto_link_twitter($text) {
// properly formatted URLs
$urls = "/(((http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.[a-z]+(\.[a-z]{2,2})?)\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
$text = preg_replace($urls, " <a href='$1'>$1</a>", $text);
// URLs without protocols
$text = preg_replace("/href=\"www/", "href=\"http://www", $text);
// Twitter usernames
$twitter = "/@([A-Za-z0-9_]+)/is";
$text = preg_replace ($twitter, " <a href='http://twitter.com/$1'>@$1</a>", $text);
// Twitter hashtags
$hashtag = "/#([A-Aa-z0-9_-]+)/is";
$text = preg_replace ($hashtag, " <a href='http://twitter.com/#!/search?q=%23$1'>#$1</a>", $text);
return $text;
}