5 つの地域をサブスクライブすることで、Instagram API にリアルタイム機能を実装しました。これらの地域はブカレストのほぼ全域をカバーしているので、Instagram のサーバーから多くのアクションを取得する必要があると考えています。
PHP(CodeIgniter)ですべてを実装した方法は次のとおりです。
- Instagram API からの生の投稿を分析し、地理 ID を取得して、それぞれの地理 ID に基づいてその地域から地理エンドポイントにアップロードされた最近の写真をリクエストする、5 つの地域すべてのコールバック ページを作成しました。
- この応答を解析し、後で取得できるように写真のデータをキャッシュします
- http://hipstagram.ro/で過去 30 件の結果を表示しています。
問題は、これらのエリアの 1 つから携帯電話で写真を撮っていくつかのテストを行ったところ、写真が表示される場合と表示されない場合があることです。実装はエラーをスローしていませんが、奇妙に動作します。したがって...未回答の質問がいくつかあります。
Q: リクエストが欠落している可能性はありますか? Instagram API ドキュメントには、2 秒以内にリクエストを承認する必要があると記載されています。コールバック メソッド (PHP CodeIgniter) でコードがどのように見えるかを次に示します。
if ($_SERVER ['REQUEST_METHOD'] == 'POST') {
header("Content-Length: 0");
header("Connection: close");
flush();
// do stuff with file_get_contents('php://input')
// also, get new photos...
$data = json_decode (file_get_contents('php://input'));
if (is_array ($data))
foreach ($data as $geo) {
$this->db->query ("LOGGING SOMETHING HERE...");
// make some a cURL request to the geography endpoint
// get the photos, save them in the database
$this->live->updateGeo ($geo->object_id);
}
}
Q: リクエストが見つからない場合:
$this->live->updateGeo
(cURL呼び出しが終了するのを待つ)時間が追加されたため、コールバックに時間がかかりすぎるためですか?- サーバーがルーマニアにあり、Instagram からのすべてのリクエストが米国の IP から来ているためですか?
生のアクセス ログを分析したところ、ときどきリクエストが急増し、その後長い沈黙が続きました。Instagram API が私に何も投稿していないか、2 秒以内に応答しないためだと思います。そうでなければ...なぜそれらのリクエストが一度に行われるのですか(数秒で5〜10のリクエスト)?たまたま 5 ~ 10 人が同時に写真を撮って、全員が携帯電話をポケットに戻しているわけではありません :)