Twitter API和重复的推文

时间:2015-07-22 14:08:17

标签: php twitter

我通过CodeBird PHP使用twitter API在网站上使用Ajax显示推文。我在第一次通话后无法防止重复,因为max_id显示了包括max_id之后的推文。

看起来很傻,为什么他们这样做,对我来说,但我似乎也找不到其他人问同样的问题。我虽然这会是很多人遇到的事情。这让我觉得我没有做正确的事情。

    // Prepare Args
    $tw_args = array(
        'count' => 5,
        'trim_user' => true
    );

    // If we havea last id, set it
    if (isset($last_id)) {
        $tw_args['max_id'] = $last_id;
    }

    // new tweet arr
    $tweets = array();

    // get raw tweets
    $raw_tweets = (array) $cb->statuses_userTimeline($tw_args);

    // loop through tweets
    for ($i = 0; $i < count($raw_tweets); $i++) { 

        // Add just the ID and text to our new tweets array
        $tmp = array(
            'id' => $raw_tweets[$i]->id_str,
            'text' => $raw_tweets[$i]->text
        );

        array_push($tweets, $tmp);
    }


    // return tweets array
    return $tweets;

如何阻止twitter API以与max_id相同的ID返回推文?

2 个答案:

答案 0 :(得分:1)

如果我很清楚你要做的是什么,似乎max_id数组中包含$raw_tweets推文?

如果是这样,只需在循环中添加一个条件即可将max_id的推文添加为$tweets数组的id:

    // ...

    for ($i = 0; $i < count($raw_tweets); $i++) {

        // Check if the current tweet's id match max_id
        if($raw_tweets[$i]->id_str == max_id)
            continue;

        // Add just the ID and text to our new tweets array
        $tmp = array(
            'id' => $raw_tweets[$i]->id_str,
            'text' => $raw_tweets[$i]->text
        );

        array_push($tweets, $tmp);
    }

    // ...

答案 1 :(得分:0)

如果您的平台能够使用64位整数,只需从您确定为max_id的任何值中减去1即可。根据API文档here,“如果此调整后的max_id是有效的推文ID,或者如果它与其他用户发布的推文相对应,则无关紧要 - 该值仅用于决定过滤哪些推文“。这样可以防止收到任何重复项。

但是,如果你不能处理64位整数,文档说要跳过这一步,所以我认为没有比ZeusInTexas提供的更简单的解决方法。