【问题标题】:Vanity urls + REST + Web crawler虚荣网址 + REST + 网络爬虫
【发布时间】:2013-02-05 15:55:16
【问题描述】:

我有一个应用程序使用来自多个应用程序 APIS(Facebook、Twitter、Instagram 等)的数据,从 PHP 中的 REST 端点访问它们。

我正在为我的应用用户构建一个虚 URL,例如 http://www.myapp.com/username

如果我有一个数据库,我可以从数据库中获取用户数据以显示在用户页面中。

使用 REST 服务,每次我进入 URL 时,都会调用从主要网站获取信息的 API。

问题越来越大,因为该应用会从搜索引擎爬虫那里获得大量流量(我不会降低爬取率)

第一个问题:由于 API 提供有限的访问权限(每小时 2000 次查询),有一种方法可以跳过 api 调用(例如,使用 memcache)?

第二个问题:我想制作一个虚荣的网址,所以每次我调用http://www.myapp.com/username我都必须调用api来获取用户ID,然后是用户名,我想知道这是否是正确的方法,大多数网站通过url重写来做到这一点,但是当你有外部数据而不是你的内部数据库时如何处理呢?

感谢您的阅读,需要任何帮助!

【问题讨论】:

    标签: php apache api url rest


    【解决方案1】:

    关于使用 memcache,您将遇到的大问题是验证和过期缓存数据。

    假设你是这样实现的:

    function getSomeData() {
        if (Memcache::has('key-for-data')) {
            return Memcache::get('key-for-data');
        } else {
            $data = RestApi::getData();
            Memcache::put('key-for-data', $data);
            return $data;
        }
    }
    

    这似乎很合理,但是如果通过任何其他方式访问 REST API 会发生什么? (就像另一个第三方应用程序将数据发布到相同的 API)。然后,缓存的数据可能无效,您将不知道。

    从您的应用程序的角度来看,对底层数据存储的更改是完全随机的,而且完全不透明且不可知,因此它不是缓存的好目标。

    另一方面,如果您可以在数据更新时从服务中获得某种“推送”通知(即订阅服务),您可以将其用作使相关缓存条目无效的触发器。然而,这是额外的复杂性,需要两端都支持。

    对不起,这不是一个真正的答案,但它是一个部分答案,评论太长了:-)

    【讨论】:

      【解决方案2】:

      尝试使用某种框架。它应该使路由更简单。

      url 重写将在 vi .htaccess 中发生,因此用户永远不会看到 url 的重写。

      我能想到的两种方式是:

      1. 在 .htaccess 中重写,以便您定义的所有路由都保持不变,并且在所有其他情况下(即http://www.example.com/username),用户控制器方法被注入到用户名和 url 之间。

      2. 定义路由,以便处理所有已知路由,并让默认路由负责确定用户 ID 并执行所有必要的操作。

      对于缓存,使用 memcache/redis 来缓存您的查询/用户对象/任何其他经常访问的内容。

      【讨论】:

      • 我正在使用 codeigniter,实际上问题是我不希望爬虫用调用淹没我的令牌。抓取了太多页面,然后我达到了最大的 api 调用次数
      • 帮我理解。您是否正在使用某些将 url 调用次数限制为每小时 2000 次的服务?否则每小时 2000 次查询是不现实的。
      • 是的,我需要在每个页面上查询这个,问题是谷歌爬虫,加载页面超过了最大限制。问题是是否有办法在不减慢爬行速度的情况下不发生这种情况
      • 在后端使用任何缓存都可以,但是爬虫仍然需要访问您的 api(pages),您说这是有限的。然后,您必须扩展允许的请求数量。您可以做的另一件事是修改 robots.txt。只有当 404 个请求也被计入您的限制时,这才会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2012-08-01
      • 2015-05-12
      相关资源
      最近更新 更多