【问题标题】:How do I upload data to Google App Engine periodically?如何定期将数据上传到 Google App Engine?
【发布时间】:2010-12-13 23:00:15
【问题描述】:

我正在编写一个聚合应用程序,它从几个 Web 源中抓取数据并使用新颖的界面显示这些数据。我从中抓取的网站每隔几分钟就会更新一次,我想确保我的聚合器上的数据是最新的。

通过自动化脚本定期向我的 App Engine 应用程序提交新数据的最佳方式是什么?

约束:

  1. 应用程序是用 Python 编写的。

  2. 每个站点的抓取过程花费的时间超过一秒,因此我无法在 App Engine 处理程序中处理数据。

  3. 运行更新程序脚本的主机是共享的,所以我不想将密码存储在磁盘上。

  4. 我想将应用程序的代码检查到我们的代码库中。虽然我的同事没有恶意,但他们是恶作剧者,我想阻止他们在我的应用中插入虚假数据。

  5. 我知道 App Engine 支持一些 remote_api thingey,但我必须将该入口点放在身份验证后面(请参阅约束 3)或隐藏 URL(请参阅约束 4)。

建议?

【问题讨论】:

  • 如果您不能相信您的同事不会干扰生产应用程序,那么您需要新的同事!

标签: python security google-app-engine automation


【解决方案1】:

编写任务队列任务或 App Engine cron 作业来处理此问题。我不确定您在哪里听说任何类型的 App Engine 操作都有 1 秒的限制 - 请求限制为 30 秒,而 URL 提取的最大截止时间为 10 秒。

【讨论】:

  • 啊!我以为限制是1秒。谢谢!
【解决方案2】:

将数据输入 AppEngine 的唯一方法是调用您的 Web 应用程序(作为 Web 应用程序)并通过通常的 HTTP-ish 方式向其提供数据,即作为 GET 请求的参数(用于短数据)或 POST(如果是长或二进制)。

换句话说,您必须制作自己的小型数据加载器,将其作为 Web 应用程序访问,然后将数据存储到 AppEngine 后面的数据库中。

您可能至少需要对该应用程序进行密码保护,以便没有人将虚假数据加载到您的应用程序中。

【讨论】:

    【解决方案3】:

    您能否将抓取过程分解为独立的块,每个块都可以在 appengine 请求的时间范围内完成? (顺便说一句,它可以运行超过一秒)。然后,您可以使用任务 API 生成一堆任务,当它们组合在一起时,就可以完成完整的抓取。然后使用 cron API 每 N 分钟生成一次这些任务。

    【讨论】:

      【解决方案4】:

      我四处询问,一些朋友想出了两个解决方案:

      • 将带有共享密钥令牌的文件与应用程序一起上传,但在提交到代码库时,请更改令牌。

      • 使用一行创建一个小型数据存储模型,一个秘密令牌。

      在这两种情况下,令牌都可用于验证 POST 用于上传新数据的请求。

      【讨论】:

        【解决方案5】:

        【讨论】:

          猜你喜欢
          • 2010-10-19
          • 2013-07-13
          • 1970-01-01
          • 2011-03-25
          • 1970-01-01
          • 1970-01-01
          • 2016-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多