【问题标题】:Foursquare API: Getting an exhaustive list of venues in a given areaFoursquare API:获取给定区域的详尽场地列表
【发布时间】:2012-06-06 22:33:15
【问题描述】:

我正在使用 Foursquare API 来获取某个类别的场地列表。 一个重要的要求是清单是详尽的,即包括所有相关点。 v2/venues/search API 端点对输出实施 50 个场所的限制。 所以想到的第一个想法是将区域分成几个部分(使用“sw”和“ne”参数),然后组合结果。

显然,点的密度会因位置而异,因此我们需要使用某种自适应算法来灵活调整搜索窗口的大小,使其包含所有点。此外,遇到速率限制的风险也会增加,因此我们可能需要算法在其请求配额用完时停止。

最后,判断搜索窗口是否应该进一步缩小的唯一方法似乎是计算结果中的点数:如果我们的点数少于 50,那么我们就有了一个完整的列表部分,可以继续下一个;否则,我们应该进一步拆分它。这似乎很浪费,因为我们将丢弃中间结果(即搜索树中除了叶子之外的所有结果)。

以下是我的一些问题:

  • 这是汇总详尽列表的最佳方式吗?也许我是 缺少一些 API 功能?
  • 在这种情况下您会使用任何特定算法吗?
  • 您将如何减少必须丢弃的结果数量?

提前致谢!

【问题讨论】:

  • 对于任何感兴趣的人:我们无法使用技术手段解决此问题。我们必须做出一个业务层面的决定,让我们能够避开这个限制。
  • 您是否尝试过使用 offset 参数来迭代定义区域的结果?

标签: api foursquare


【解决方案1】:

一个重要的免责声明是,当您在同一区域执行大量搜索时,foursquare 不喜欢它。

话虽如此,您应该考虑在场地搜索 api 中尝试使用 categoryId 过滤器。 Foursquare 上的大部分数据都与食物(餐厅)和夜生活相关。

因此,如果您排除这些(通过包括其他人,无法排除),您可以搜索更大的区域,但仍会获得低于 50 个结果。

从未真正尝试过使用这种算法,因为 categoryId 过滤效果很好,但理论上,该算法很简单,每个 lat/lng 0.001 约为 111 米。

使用小半径搜索(大都市地区约为 200)和三角测量(扫描)区域。

让我们最初执行大量搜索(后来停止这样做)的原因是,有时foursquare 会在不询问您的情况下过滤掉结果(对我来说,它看起来像错误,对他们来说是算法的一部分)。因此,例如,我会在 50 米半径范围内搜索,找到我想要的地方(我知道我在搜索什么),扩展到 500 米,但没有找到它(得到的结果少于 50 个 - 所以它没有被丢弃,因为我击中了上限,它被丢弃了,因为???),将我的搜索位置向北移动约 300 米,找到它 -> 零星行为。

我的观点是(以及我们停止进行大量搜索并改变方法的原因),您想要实现的目标是,“完全覆盖”非常很难做到,因为当前的 API 和当前的使用策略,而且 -> 真的不重要。在玩了几个月之后,我们发现我们应该查询foursqaure 以了解我们的 用户目前正在寻找和需要什么,我们缓存结果 - 随着时间的推移,我们将获得完整的覆盖,也许一开始我们会错过一些地方,但从长远来看,这并不重要。

【讨论】:

  • 谢谢,乔纳森。这些都是非常好的点,尤其是关于过滤行为。我认为,如果我们无法在技术和法律范围内找到一种方法来实现它,我们可能也需要重新考虑我们的方法。
  • 详尽的拉取 + 过滤器对于那些尝试做推荐的人来说很重要:它对起点的控制最小。
【解决方案2】:

希望这不是您正在做的事情,但作为一个友好的提醒:抓取foursquare 的网站和/或API 是其服务条款非常禁止的。

【讨论】:

  • 感谢您的提醒。 Foursquare 是否提供任何允许此类使用的计划?
  • 没有具体的计划,但这是经常被要求的,我们正在考虑如何更好地服务于这个用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多