【问题标题】:How To Aggregate API Data?如何聚合 API 数据?
【发布时间】:2011-01-16 11:11:36
【问题描述】:

我有一个连接到 2 个流行 API 的系统。我需要将每个数据聚合成一个统一的结果,然后可以进行分页。该项目的范围意味着该系统最终可能支持 10 种 API。

每个 API 对每个请求的最大限制为 50 个结果。

聚合这些数据的最佳方法是什么,使其可靠,即有序、无重复等

我在 LAMP 环境中使用 CakePHP 框架,但是,我认为这个问题涉及所有编程语言。

到目前为止,我的方法是查询每个提供商的搜索 API,然后填充 MySQL 表。由此可以对结果进行排序、分页等。不过,我关心的是性能:API 通信、解析、插入,然后在一次执行中全部读取。

我错过了什么,有人有其他想法吗?我确信这是许多替代解决方案的常见问题。

任何帮助将不胜感激。

【问题讨论】:

    标签: php api cakephp aggregation


    【解决方案1】:

    是的,这是一个常见问题。

    搜索类似https://stackoverflow.com/search?q=%5Bphp%5D+background+processing的问题

    尝试此操作的每个人都意识到,调用其他站点获取数据的速度很慢。前一两个看起来很快,但其他网站中断(并且您的应用中断)并且其他网站很慢(并且您的应用很慢)

    您必须断开前端与后端的连接。

    选择 1 - 使用后台进程预查询数据,该进程只需获取和加载数据库。

    选择 2 - 启动一个长时间运行的后台进程并从 JavaScript 函数检查它是否已经完成。

    选择 3 - 用户的初始请求会产生后台进程 - 然后您通过电子邮件将链接发送给他们,以便他们在工作完成后返回。

    【讨论】:

      【解决方案2】:

      我有一个网站,它有超过 100 个 rss/atom 提要,这就是我所做的:

      1. 我有一个提要列表和一个对它们进行迭代的 cron 作业,大约每分钟 5 个提要,这意味着我每 20 分钟左右循环一次所有提要。
      2. 我解除提要,并尝试将每个条目插入数据库,使用 url 作为唯一字段,如果 url 存在,我不插入。输入日期是我当前的系统时钟,由我的应用程序插入,因为 rss 中的日期字段不可信,在某些情况下甚至无法解析。
      3. 对于一些提要,只有经验才能告诉你,我也搜索重复的标题,一些网站出于自己的原因更改了网址。
      4. 现在所有项目都放在同一个数据库表中,可供查询。

      最后一个想法:如果您的应用程序可能在生产中添加了新的提要,您确实还应该检查提要是否是“新的”(即:数据库中没有以前的条目),如果是,您应将所有当前可用的链接标记为无效,否则,当您添加提要时,该提要中会出现一块文章,所有文章都具有相同的日期和时间。 (简单地说:我描述的方法仅用于将来添加到提要中,过去的文章将不可用)。

      希望这会有所帮助。

      【讨论】:

      • 另外一个:如果您因任何原因无法使用 cron,您始终可以使用基于 Web 的 ping 服务,例如 watchour.com(我觉得我必须透露,它是由我的一个朋友)。如果您认为我可以提供任何帮助,请随时直接与我联系。
      • 感谢伟大的 cmets 和建议。我应该提到我正在构建的应用程序是一个搜索工具。我使用 Search API 并且需要实时显示结果。想想汽车保险比较网站。我认为用户在执行计算时等待的页面可能是检索系统的最佳选择。你怎么看?
      • 如果,如您所说,这可能相当于聚合了数十个单独的 api,那么您不能在页面加载时执行此操作,除非有最多的受众。没有“普通”互联网用户愿意等待超过 6-7 秒。
      猜你喜欢
      • 2015-07-27
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2021-12-01
      • 2017-03-26
      相关资源
      最近更新 更多