#php #api #twitter
#php #API #Twitter
Вопрос:
Я использую следующий код для извлечения количества твитов из API Twitter:
$cache_file = "cache/$username-twitter.cache";
$last = filemtime($cache_file);
$now = time();
$interval = $interval * 60; // ten minutes
// Check the cache file age
if ( !$last || (( $now - $last ) > $interval) ) {
// cache file doesn't exist, or is old, so refresh it
// Get the data from Twitter JSON API
//$json = @file_get_contents("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=" . $username . "amp;count=" . $count, "rb");
$twitterHandle = fopen("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=$usernameamp;count=$count", "rb");
$json = stream_get_contents($twitterHandle);
fclose($twitterHandle);
if($json) {
// Decode JSON into array
$data = json_decode($json, true);
$data = serialize($data);
// Store the data in a cache
$cacheHandle = fopen($cache_file, 'w');
fwrite($cacheHandle, $data);
fclose($cacheHandle);
}
}
// read from the cache file with either new data or the old cache
$tweets = @unserialize(file_get_contents($cache_file));
return $tweets;
Конечно, $username и другие переменные внутри запроса fopen верны, и он выдает правильный URL, потому что я получаю ошибку:
Предупреждение: fopen (http://api.twitter.com/1/statuses/user_timeline.json?screen_name=Schodemeissamp;count=5 ) [function.fopen]: не удалось открыть поток: HTTP-запрос не удался! HTTP / 1.1 400 неверных запросов в /home/ellexus1/public_html/settings.php в строке 187
эта ошибка ^^ возвращается всякий раз, когда я пытаюсь открыть свою страницу.
Есть идеи, почему это может быть? Нужно ли мне использовать OAuth, чтобы даже просто получать мои твиты !? Должен ли я регистрировать свой веб-сайт как место, где могут появляться сообщения?
Я действительно не уверен, почему это происходит. Мой хост JustHost.com , но я не уверен, имеет ли это какое-либо значение. Все идеи приветствуются!
Спасибо.
Эндрю
PS. Этот код находится внутри функции, в которой имя пользователя, интервал и количество передаются правильно, следовательно, в коде ошибки он создал правильно сформированный адрес.
Комментарии:
1. Странно, это работает для меня
curl -D - "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=Schodemeissamp;count=5"
Ответ №1:
Скорее всего, вы получаете ограниченную скорость
400 Bad Request: Запрос был недействительным. Сопроводительное сообщение об ошибке объяснит, почему. Это код состояния, который будет возвращен во время ограничения скорости.
150 запросов в час для не прошедших проверку подлинности вызовов (на основе IP-адресации)
350 запросов в час для аутентифицированных вызовов (на основе вызовов аутентифицированных пользователей)
Вы должны пройти аутентификацию, чтобы избежать появления этих ошибок.
А также, пожалуйста, используйте cURL
при работе с twitter. Я использовал file_get_contents
и fopen
для вызова API Twitter и обнаружил, что он очень ненадежен. Вы бы время от времени сталкивались с этим.
Замените fopen
на
$ch = curl_init("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=$usernameamp;count=$count");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$it = curl_exec($ch); //content stored in $it
curl_close($ch);
Ответ №2:
Это может помочь
Error codes
https://developer.twitter.com/en/docs/basics/response-codes.html
Определение кодов ошибок приведено в приведенной выше ссылке