从 API 获取大量数据

Getting numerious data from API

我对使用 public API 很陌生,我遇到了一个我不太确定如何处理的问题。最重要的是,我在 google 表格上进行了注册,在我的游戏之夜我将有大约 100-150 名玩家注册。当发生这种情况时,我需要检查他们并确保他们中的所有 150 个都拥有游戏并且至少玩了 50 个小时,这是我对越来越多的 smurf 帐户的衡量。

因此,我在我的服务器上编写了一些代码,这些代码将查看提供的 Steam ID,然后获取他们拥有的游戏以及他们玩的小时数。据此我确定了有问题的游戏并然后我简单地给出一个通过或失败。

虽然这一切都很好,但我越来越担心我发送的请求数量以及我是否应该以不同的方式处理它。现在,如果我有 150 个玩家,我将向 Steam 发送 150 个请求,这似乎不是正确的做法。

查看他们的 API,我无法找到任何类型的方法来 return 我的游戏由一定范围的玩家拥有。因此,我唯一能做的就是我上面描述的。

我的问题是:

使用public API时,比如Steam的api,可以使用我上面的方法吗?发送如此多的请求是否会让我被列为潜在的垃圾邮件发送者,或者在我开始担心之前这个数字是多少?

每天发送 150 API 个电话,在像 Steam 这样的主要供应商的情况下,这不算什么。如果您的服务变得冗长,他们将开始限制您的请求,但 Steam 的截止时间应该大约是每秒一个请求。

如果API提供批处理调用或查询调用,最好使用它。例如,GetPlayerSummaries 应该允许您在一次调用中提供多个 steamid。对于获取详细信息,据我所知,Steam 不提供批处理 API,使您正在做的事情成为正确的方法。

(切题评论:你可能想考虑这是否是实现你目标的最佳方式,或者是否改变游戏 design/matchmaking/etc。降低 smurf 账户的价值可能会更有效地攻击问题的根源。)

是的,用你的方法绝对没问题。


Steam Web API

来自Steam Web API Terms of Use

You are limited to one hundred thousand (100,000) calls to the Steam Web API per day.

消费 public APIs(不仅是 Steam 的)时,请始终留意使用条款。

如果您达到那个数字,您 可能会 开始担心。然后,可能发生的最糟糕的事情是您的请求将不再得到满足,并且您的 API 密钥可能会被撤销(这是它出现在这里的原因之一)。

据推测 Web API 有进一步的限制:


Steam Community Data

WARNING: The community XML data is deprecated. We recommend using the web APIs whenever possible.

很可能社区数据的速率限制要低得多,因为建议改用 Web API。


备注:

在开发 completionist.me 的过程中,我从未遇到过任何这些限制。一次是 30,000/天,没有一个未满足的请求发生(至少不是由速率限制引起的)。

如果您想确保在客户端使用作业队列进行节流以控制请求率并在一段时间后重试失败的作业(API 个请求)。

鉴于 API 得到很好的实施,您会在遇到任何“麻烦”之前收到 HTTP 429 - Too Many Requests。据我所知,Steam 的 Web API 并非如此。如果发生错误(大部分时间),它会以 HTTP 403 静默失败。