Превышение твиттер-звонков, хотя я только сделал максимум 1 час - PullRequest
2 голосов
/ 15 декабря 2011

Я только что создал сайт с новым хостом и загруженными битами и бобами только для того, чтобы обнаружить, что мой скрипт для получения твитов определенных пользователей сломался. Мне сказали, что я превысил свой предел в 150 вызовов на API Twitter.

В то время это могло иметь смысл, так как я все тестировал и много перезагружал страницу. Однако сегодня я сделал только пару попыток, но все, что я когда-либо получаю, это та же самая ошибка. Я даже переписал свой код так, чтобы он кэшировал все запрошенные твиты в течение часа, то есть самое большее 1 звонок в час, но он все еще не меняется. Вот код, который я использую для получения, кэширования и получения твитов;

function getUrl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    $content = curl_exec($ch);
    curl_close($ch);

    return $content;
}

function getContent($file, $url, $hours = 1)
{
    //vars
    $CurrentTime = time();
        $ExpireTime = $hours * 60 * 60;
    $FileTime = filemtime($file);
    if(file_exists($file) && ($CurrentTime - $ExpireTime < $FileTime))
    {
        //echo 'returning from cached file';
        return json_decode(file_get_contents($file), true);
    }
    else
    {
        $content = getUrl($url);
        $fh = fopen($file, 'w');
        fwrite($fh, $content);
        fclose($fh);
        //echo 'retrieved fresh from '.$url.':: '.$content;     
        return json_decode($content, true);
    }
}

$NumTweets = 3;
$AccountName = "TWITTERUSERNAME"; //this can be any username
$URL = "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=".$AccountName."&count=".$NumTweets;
$XML = getContent('./lib/inc/tweets.txt', $URL);

Затем я использую следующее, чтобы определить твиты и время их создания, а затем распечатываю их в похожей усадьбе;

    for($i = 0; $i < $NumTweets; $i++)
    {
        $Tweet['text'][$i] = formatTwitString($XML[$i]['text']);
        $Tweet['time'][$i] = formatTwitTime($XML[$i]['created_at']);
    }

Функции форматирования не имеют значения, я знаю, что они работают нормально.

Дело в том, что если я вручную ввожу переменную $ URL, которая генерируется в моем браузере, я могу без проблем загружать твиты, только при загрузке через веб-сайт я получаю сообщение об ошибке, я пытался скопировать содержимое используя этот метод и сохраняя его в файл на другом веб-сервере и заменяя Twitter-URL-адрес URL-адресом других серверов, и это работало нормально,

так что я не думаю, что с моим кодом что-то не так, но почему-то мои звонки в твиттер ополаскиваются, могут ли это быть другие сайты на том же хосте (iPage.com), использующие эти звонки в твиттер как-то? Я немного растерялся, пожалуйста, помогите, Спасибо.

1 Ответ

1 голос
/ 15 декабря 2011

Существует вероятность того, что ваши запросы в Twitter отправляются с основного общего IP-адреса сервера, в результате чего ограничение скорости будет доступно другим пользователям на сервере. Вы можете обойти это, аутентифицируясь в Twitter при выполнении запросов API.

https://dev.twitter.com/docs/rate-limiting#rest

Проходя аутентификацию, вы получаете собственный предел скорости независимо от используемого IP-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...