TwitterのAPIについての質問です。


自分への返信のうち、2304268200以降のIDをもつものを抽出し、それぞれの返信のIDと発言内容を表示させる、という機能を実装しようとして、以下のようなコードを書きました。
-------------------------------

$reply_get_url = "http://" . $username(←ユーザー名) . ":" . $password(←パスワード) . "@twitter.com/statuses/replies.json?since_id=2304268200";
$lines = json_decode(file_get_contents($reply_get_url));

foreach ($lines as $line){
print("line->id = " . $line->id);
print("line->text = " . $line->text);
}

-------------------------------
このプログラム、ローカルのApacheサーバーで実行すると正常に動作しましたが、契約している専用サーバー上で実行すると、発言内容はきちんと取れますが、それぞれの発言のIDが全て同じ、しかも「2304268200」より前のIDなのです。

実は1ヶ月前にはこのコード、専用サーバー上でも正常動作していました。
そう考えると、APIの仕様変更があったと考えるのが妥当な気がしますが、そうするとローカルのApacheサーバーでうまく動いていることの説明がつきません。

完全な解決策(あるのか?)でなくても良いので、手がかりになりそうなものでもお寄せいただけますと幸いです。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/07/03 02:25:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

専用サーバは固定IPを持っていますか?

これはまったくの想像ですが、Twitterは単位時間あたりのAPIリスクエストを制限しているようなので、その専用サーバが属しているIP範囲に、他に大量のTwitter APIをリクエストしているサーバがあり、そのために規制を受けているのかもしれません。

Twitter REST API Method: account rate_limit_status」を参考にしてください。

id:firemonkey

なるほど、固定IPは持っているのですが、そういった可能性もあるのかもしれないのですね・・・。

他との競合という可能性は考えていませんでした。ありがとうございます。

ただ、なぜか発言内容自体は取得できているのでリクエスト自体は受け付けられているのでは・・・?と思うのです。謎だ・・・。

2009/06/26 14:51:24
  • id:firemonkey
    試行錯誤してみたところ、どうやらプログラム3行目の

    file_get_contents($reply_get_url)

    で取得したデータだとIDは正常のようです。
    取得したデータをそのまま出力させると、それぞれ正しいIDが取れていました。

    となると、foreachでループさせている時にIDが変な値になっているのは、取得データにjson_decodeをかけてフォーマットしているせいかもしれません。
    取得データの形式を変えて再度試してみようと思いますが、確認のため「json形式だと不具合が出る」などの情報がありましたら書き込んでいただけますと幸いです。
  • id:maname
    もしかして、2,147,483,647問題?
    http://twitter.g.hatena.ne.jp/maname/20090614/1244949639
  • id:firemonkey
    >もしかして、2,147,483,647問題?

    !!!
    見てみましたが、かなりコレっぽい気がしてきました。不具合が起きはじめた時期と、2,147,483,647を超えたであろう時期がちょうど重なっています。
    データベースは使ってないので、単純に専用サーバーで扱える数値の最大範囲が2,147,483,647より小さいということでしょうか。調べてみます。

    情報ありがとうございます!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません