【问题标题】:Live Streaming Tweets without being rate limited不受速率限制的直播推文
【发布时间】:2013-01-14 02:06:26
【问题描述】:

我正在创建一个仪表板,用于在制作时在地图上绘制启用地理的推文。最大的问题是,为了让我模拟它是真实的,每秒钟都会发出一个新的请求。

根据 Twitter 的 API 限制,对于 unAuth/OAth(分别),REST API 调用限制为每小时 150/350,因此每秒调用一次是行不通的。也许我不得不接受刷新延迟,但我很好奇是否有解决方法。

有没有办法让我拥有一个真正的实时提要,一旦用户发布推文,它就会在地图上放置一个点?

这是我的部分代码供参考:

// url is set above with the search query
function firstQuery(terms, oldestTweet, page, pic) {
    getLimiter++;
    var encodedTerms = encodeURIComponent(terms);
    $.getJSON(url + '&page=' + page + '&max_id=' + oldestTweet + '&include_entities=1&result_type=recent&rpp=100&callback=?', function(tweets) {
        if ($(tweets.results).length) {
            if (storedLatestTweet < tweets.results[0].id) {
                storedLatestTweet = tweets.results[0].id;
            }
            page++;
            tweetCount = tweetCount + tweets.results.length;
            storedOldestTweet = tweets.results[tweets.results.length - 1].id;
            harvest(tweets, pic);
            firstQuery(terms, oldestTweet, page, pic);
        } else {
            // continue to loop if more need to be plotted with the oldest tweet id known
            if (getLimiter < 65 && tweetNumber < 10) {
                page = 1;
                firstQuery(terms, storedOldestTweet, page, pic);
            }
            return latestLoop(); // loops the request
        }
    });
}

function latestLoop() {
    latest(terms, storedLatestTweet, page, pic);

    // use queryLoop so that the timeout can be killed on new search
    queryLoop = setTimeout(function() {
        latestLoop();
    }, 1000); // the loop rate of the request...1 second isn't gonna work
}

【问题讨论】:

    标签: twitter request jsonp


    【解决方案1】:

    您可以通过 Twitter Stream API 在 Twitter 上进行实时处理。但是流 api 不会向您发送所有推文,您必须指定关键字来过滤包含给定关键字的推文,或者指定 userId 来关注来自给定用户的推文,或者指定地理位置来过滤来自特定地点的推文。此外,关键字数量、要关注的用户 ID 等也有限制。最后,twitter 将为您提供全球流量中最多 1% 的推文。因此,例如,如果您想出一个跟踪不到 1% 的全球流量的过滤器,您将获得所有推文(理论上),否则您将错过一些推文,因为推特不会与您共享它们。

    还有一个公开的示例流,可以为您提供一些来自 twitter 的示例数据。如果您只是为了实验而这样做,它可以帮助您。 https://dev.twitter.com/docs/api/1.1/get/statuses/sample

    我给你的建议是确定你想在 Twitter 上关注什么,并为流媒体 API 提供一个巧妙的过滤器,并从你的地图中跟踪结果。您还可以通过定期再次调用搜索 api 来填充应用程序中丢失的数据来提升您的结果(有时由于直播中的多种原因导致推文无法传递,您可以通过搜索 api 检索它们)

    https://dev.twitter.com/docs/streaming-apis/streams/public

    【讨论】:

    • 这将用于特定的关键字,但这些很可能远小于整个消防软管的 1%。为了实现这一点,我是否会完全摆脱请求循环,因为连接对 Twitter 流是开放的?
    • 没错。只需打开一个连接即可查看数据流。当您需要更改过滤器(添加关键字等)或由于某种原因引发异常时,您可能需要重新启动连接(twitter api在大多数情况下工作顺利,连接不会被中断那么多,但也有可能发生。由于这种机会很少,最好监控流的状态。
    • 我在弄清楚如何将我的循环转换为可以处理流的东西时遇到了一些麻烦。你能帮帮我吗?
    • 在您提供的代码中,您使用的是不同于流 api 的搜索 api。不幸的是,我不知道您编写该代码的语言,也无法为您正确修改它。我使用 java 和 twitter4j 流式传输 twitter。在以下文档中只需检查最新示例(第 9 个)twitter4j.org/en/code-examples.html
    • 顺便说一句,您的流媒体需要作为另一个进程工作,并且它将始终工作以确保您不会错过任何数据。检查流 api 以查看 twitter 所需的参数。 dev.twitter.com/docs/api/1.1/post/statuses/filter
    猜你喜欢
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 2023-02-06
    • 2021-07-24
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多