我通过订阅5个地理位置在Instagram API上实现了实时功能 . 这些地区几乎覆盖了布加勒斯特地区,所以我想我应该从Instagram的服务器上获得很多动作 .

这是我在PHP中实现所有内容的方式(CodeIgniter):

  • 我为所有5个地理区域创建了一个回调页面,用于分析Instagram API中的原始帖子,获取地理ID,然后根据相应的地理ID请求从该区域上传的最近照片到the geography endpoint

  • 我解析了这个响应并缓存了照片的数据,以便稍后检索

  • 我在http://hipstagram.ro/上显示最近30个结果

问题是我通过手机从其中一个区域拍摄照片进行了一些测试,有时我的照片显示,有时则没有 . 实现不会抛出任何错误,但它的工作原理很奇怪 . 因此......我有几个未回答的问题:

问:我可以丢失请求吗?它在Instagram API docs中说我应该在不到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);
        }
}

问:如果我遗漏了请求:

  • 是不是因为 $this->live->updateGeo (等待cURL调用结束)的时间增加,回调时间过长?

  • 是因为我的服务器在罗马尼亚,Instagram的所有请求都来自美国IP?

我已经分析了原始访问日志,并且不时会收到大量请求,然后是长时间的沉默 . 我认为这是因为Instagram API没有向我发布任何内容,或者因为我在不到2秒的时间内没有回应 . 否则......为什么这些请求一次全部发生(几秒钟内5-10个请求)?它不像5-10人碰巧同时拍摄所有照片然后每个人只是把手机放回口袋:)