0

PHP を使用して、ユーザーからの最新のツイートを表示しています。これはワードプレスにあります。これはほとんどの場合機能しますが、時々、次のエラーが発生します。

file_get_contents( http://api.twitter.com/1/statuses/user_timeline/[username].json ) [function.file-get-contents]: ストリームを開くことができませんでした: HTTP 要求が失敗しました! HTTP/1.1 400 Bad Request in [...]/twitter.php 行 47

Twitter API の制限を超えていないことは間違いありません。キャッシュ コードに欠陥があるとしても、ローカルでホストされているため、他の誰もこれを見ることができず、1 時間に 150 回ページを表示することもできないからです。 . ユーザー名とデータベースのエントリが実際に取得されていることをテストしました。これは私のコードです:

<?php
function twitter($username) {
$tweet = '';
echo $username;
if (!get_option('twitter_last_updated')) {
    $format='json';
    $tweet_raw=file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}");
    $tweet = json_decode($tweet_raw);
    add_option('twitter_last_updated', time(), "", "yes");
    add_option('twitter_last_updated_author', $username, "", "yes");
    add_option('twitter_last_updated_data', $tweet_raw, "", "yes");
} elseif (time() - get_option('twitter_last_updated') > 30 || get_option('twitter_last_updated_author') != $username) {
    $format='json';
 $tweet_raw=file_get_contents("http://api.twitter.com/1/statuses/user_timeline/{$username}.{$format}");
    $tweet = json_decode($tweet_raw);
    update_option('twitter_last_updated', time());
    update_option('twitter_last_updated_author', $username);
    update_option('twitter_last_updated_data', $tweet_raw);
} else {
$tweet = json_decode(get_option('twitter_last_updated_data'));
} ?>
<!-- display the tweet -->
<?php } ?>

これについて何か助けていただければ幸いです。私は完全に困惑しています。

4

4 に答える 4

2

まず、ネットワーク経由で「ファイル」を取得するために file_get_contents を使用しないでください。カールを使用する必要があります。システム応答の遅延、または負荷分散のために Twitter がリダイレクトを発行している可能性があります。file_get_contents はリダイレクトに従わず、基本的にすぐにタイムアウトします。Curl はリダイレクトに従うように設定でき、タイムアウトが指定されていない場合はネットワーク タイムアウト (1 分だと思います) に従います。最も重要なことは、curl がなぜ失敗したのかを知ることができるということです。

于 2010-07-10T21:43:42.697 に答える
1

関数を呼び出す頻度はどれくらいですか。私の記憶が正しければ、Twitterは最近、1時間あたりの最大通話数を150〜から1時間あたり75に変更しました。許容量を使い果たしないように、結果をキャッシュすることをお勧めします。

このスラッシュドットストーリーを参照してください:Twitterスロットリングがサードパーティのアプリにヒット

于 2010-07-10T21:40:04.673 に答える
0

私はあなたが持っているもののようなものを書きました、そしてそれは3つのリクエストごとのように失敗し続けます、解決策はphpがユーザーにエラーを返すのを避けるためにfile_get_contentsに小さなキャッシュシステムと@を構築することでした。

Twitterが失敗し、多くの場合失敗する場合は、以前に構築されたキャッシュからデータをフェッチするだけです。

また、このオンフライを追加することはお勧めしません。Twitterの問題により、ページ全体の構築が遅くなる可能性があります。

于 2010-07-11T00:07:14.257 に答える
0

WordPress HTTP APIを使用しないのはなぜですか?これはまさにそれが設計されたものです-プラットフォームやセットアップに関係なく、標準のWordPress関数を使用してHTTPを操作するためのラッパーです。

于 2010-07-10T23:47:54.903 に答える