在Twitter API中使用since_id和max_id

jne*_*iku 4 javascript twitter increment biginteger

我希望我能够过度思考这个并且有一个明显的解决方案.

来自API(GET状态/ user_timeline)

max_id - 返回ID小于(即早于)或等于指定ID的结果.

"或等于"表示它将包含我发送的ID为我的max_id参数的推文.

-

我的问题是这样的:如果我存储了我最早的推文的ID(来自之前的请求),我如何从此ID中减去1以排除它在我的下一个请求中返回?

显而易见的解决方案是执行类似'&max_id ='+ lastID-1的操作,但是对于这样的数学运算而言,推特ID是大的,并且javascript会对结果进行舍入.

有关雪花更新的详细信息:https: //dev.twitter.com/docs/twitter-ids-json-and-snowflake

可行的解决方案:

有人提到我可以使用BigInteger Javascript库:http://silentmatt.com/biginteger/,但在我看来,这对于诸如小任务来说是多余的.

我是否必须对字符串(id_str)使用递归并将其递增或递减1?我讨厌使用hack来处理那些应该工作的小细节.

-

如果您遇到此问题,请分享您的解决方案.

谢谢!

Bob*_*uer 5

我遇到了同样的问题,最后通过从最后一位数中减去1来解决它,然后考虑我们通过递归从0减去1的情况.

function decrementHugeNumberBy1(n) {
    // make sure s is a string, as we can't do math on numbers over a certain size
    n = n.toString();
    var allButLast = n.substr(0, n.length - 1);
    var lastNumber = n.substr(n.length - 1);

    if (lastNumber === "0") {
        return decrementHugeNumberBy1(allButLast) + "9";
    }
    else {      
        var finalResult = allButLast + (parseInt(lastNumber, 10) - 1).toString();
        return trimLeft(finalResult, "0");
    }
}

function trimLeft(s, c) {
    var i = 0;
    while (i < s.length && s[i] === c) {
        i++;
    }

    return s.substring(i);
}
Run Code Online (Sandbox Code Playgroud)