Foursquare API:获取特定区域的详尽场地列表

Max*_*ski 4 api foursquare

我正在使用Foursquare API来获取某个类别的场地列表.一个重要的要求是列表是详尽的,即包括所有相关点.v2 /场所/搜索API端点在输出上强制限制50个场地.因此,想到的第一个想法是将区域分成几个部分(使用"sw"和"ne"参数)然后组合结果.

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

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

所以这里有一些问题:

  • 这是列出详尽清单的最佳方式吗?也许我错过了一些API功能?
  • 在这种情况下你有没有特定的算法?
  • 您如何减少必须丢弃的结果数量?

提前致谢!

Jon*_*son 10

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

话虽如此,您应该在场地搜索API中尝试使用categoryId过滤器.foursquare上的大部分数据都是食品(餐馆)和夜生活相关.

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

从来没有真正尝试使用这样的算法,因为categoryId过滤工作得足够好,但理论上,算法很简单,每个lat/lng 0.001是~111米.

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

让我们最初执行大量搜索(后来又停止这样做)的原因是有时foursquare会在不问你的情况下过滤掉结果(对我来说,它看起来像bug,因为它们是算法的一部分).所以例如我会搜索半径50米,找到我想要的地方(我知道我要搜索的是什么),扩展到500米,找不到它(并且得到的结果少于50个 - 因此它没有被删除,因为我打了盖子,它被丢弃了因为???),移动我的搜索位置〜北方300米,找到它 - >零星的行为.

我的观点是(以及为什么我们停止做了很多的搜索和改变我们的方法的原因),你想达到什么目的,"全覆盖"是非常难做到鉴于目前的API和当前使用策略,以及- >真的不重要.经过几个月的玩游戏后,我们发现我们应该查询foursqaure 我们的用户正在寻找和需要的内容,此时我们会缓存结果 - 随着时间的推移我们会有一个完整的报道,也许一开始我们会想念一些地方,但从长远来看,它并不重要.