当前位置: 首页 > 知识库问答 >
问题:

Instagram实时API重复请求

长孙鸿波
2023-03-14

我有一个问题,当我创建实时订阅时,我会收到来自不同Instagram IP地址的重复通知。我设置了它,以便在收到通知时,使用min_tag_id设置发送最新更新请求。我将其存储在我的数据库中,以便在下一个请求中使用它。我并不总是得到重复,但当我这样做时,通知的所有内容都是相同的(time、object、changed_aspect),只是我可以看出它们与我的调试输出不同,它列出了两个几乎相同的请求...唯一不同的信息是不同的IP地址和REQUEST_TIME_FLOAT的差异约为1/10秒。它们甚至具有相同的HTTP_X_HUB_SIGNATURE值。

我的一般算法是:

process_subscription_update($data){
    # get old min_id
    $min_tag_id = mysqli_fetch_object(mysqli_query($dbconnecti,sprintf("SELECT instagram_min_id+0 as instaid FROM xxxx WHERE xxxx=%d",$_GET['xxxx'])));
    $min_id = $min_tag_id->instaid;
    # make api call
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL, 'https://api.instagram.com/v1/tags/'.$_GET['tag'].'/media/recent?client_id=xxxx&min_tag_id='.$min_id.($min_id==0?'&count=1':''));
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $result = curl_exec($ch);
    curl_close($ch);
    $i = json_decode($result);
    if ($min_id == $i->pagination->min_tag_id) { exit; }
    # write new min_id to db
    record_min_id($i->pagination->min_tag_id);
    $data2 = $i->data;
    foreach($data2 as $d) {
        process_instagram($d);
    }
    // debugging output: ****************
    $file = file_get_contents($_SERVER['DOCUMENT_ROOT'].'instagram/updates.txt');
    $foo = "\n";
    foreach($_SERVER as $key_name => $key_value) {
        $foo .= $key_name . " = " . $key_value . "\n";
    }
    $fulldata = $file . "\n\n\n" .  $result . "\n min_id = " . $min_id . $foo;
    $fulldata .= "\nTIME:".$data[0]->time;
    $fulldata .= "\nOBJECT:".$data[0]->object;
    $fulldata .= "\nCHANGED_ASPECT:".$data[0]->changed_aspect;
    file_put_contents($_SERVER['DOCUMENT_ROOT'].'instagram/updates.txt', $fulldata);    
    // end debugging output *************

}

我想避免在process_instagram函数中检查instagram消息id是否已经存在于我的数据库中,由于副本只相隔1/10秒,我不知道这是否有效。

还有其他人经历过这种情况和/或有解决方案吗?

共有1个答案

宓毅庵
2023-03-14

我解决了这个。我想我对收到重复的通知无能为力。因此,当将Instagram写入我的数据库时,我有一个用于Instagram id的字段,并对该字段设置了唯一的约束。完成mysqli插入后,我检查errno=1062,如果是,我退出。

mysqli_query($dbconnecti,"INSERT INTO xxx (foo, etc, instagram_id ...")
if ($dbconnecti->errno==1062) { exit; }
...
// more script runs here if we don't have a duplicate.
 类似资料:
  • 对如何监控更大的区域有什么想法吗?或者你听说过人们得到更高的利率限制吗?

  • 我正在使用实时API中的标记订阅构建一个应用程序,并有一个与容量规划有关的问题。我们可能会有大量的用户同时向订阅的标签发帖,所以问题是API会多长时间向订阅处理endpoint发帖?例如,如果在一两秒钟内有100个用户发帖到#TestHashtag,我会收到100个帖子还是API将这些帖子作为一个更新进行批处理?一个相关的问题:是否有发送邮件的最大速率(例如,每秒一个或每十秒一个,等等)?

  • 因此,在我看来,有两个问题:1)请求应该是POST(对我不起作用)还是GET(对我起作用)。2)为什么instagram返回空数据,而不是POST到callback_url。

  • 我之所以产生这个疑问,是因为在Instagram的实时订阅页面上说:注意,这个订阅是针对客户机所有经过身份验证的用户的,而不仅仅是特定的用户。 这意味着我只能订阅在Instagram中授权我应用的用户??我必须做一个应用程序,消费instagram订阅,当有一个新的照片,它自动保存在数据库中。谢谢

  • 我阅读了Instagram订阅API的新文档。它说,在你订阅后,当人们在他们的页面上发布新媒体时,Instagram会通知你。 我想被通知当一个用户的帖子收到一个新的喜欢或评论? 你觉得这可能吗?

  • 我的问题是:-API有什么变化吗?-应用程序中有什么变化吗(这样不是每一张照片都将被公布)?-还有其他人遇到这个问题吗?-我有什么办法可以让它重新工作吗? 我知道这不是一个完美的问题,但我无法在谷歌上挖掘任何东西,instagram开发者页面直接在这里寻求支持。非常感谢任何帮助。