我正在编写一个聚合应用程序,该应用程序从几个Web源中擦除数据并使用新颖的界面显示该数据。我每隔几分钟就会更新一次的网站,我想确保我的聚合器上的数据是最新的。
从自动脚本定期向我的App Engine应用程序提交新数据的最佳方法是什么?
约束:
该应用程序是用Python编写的。
每个网站的抓取过程花费的时间超过一秒,因此我无法在App Engine处理程序中处理数据。
将运行更新程序脚本的主机,因此我不想将我的密码存储在磁盘上。
我想检查应用程序的代码到我们的代码库中。虽然我的同事不是恶意的,但他们是恶作剧者,我想阻止他们将假数据插入我的应用程序。
我知道App Engine支持一些remote_api
稀疏,但我必须将该入口点置于身份验证之后(请参阅约束3)或隐藏URL(请参阅约束4)。 / p>
建议?
答案 0 :(得分:3)
编写任务队列任务或App Engine cron作业来处理此问题。我不确定你在哪里听到任何类型的App Engine操作都有1秒的限制 - 请求限制为30秒,URL提取的最长期限为10秒。
答案 1 :(得分:0)
将数据导入AppEngine的唯一方法是调用您的Web应用程序(作为Web应用程序)并通过通常的HTTP-ish方式提供数据,即作为GET请求的参数(用于短数据)或POST(如果长或二进制)。
换句话说,你必须制作自己的小型数据加载器,你将作为Web应用程序访问它,然后将数据存储到AppEngine后面的数据库中。
您可能至少希望在该应用上保护密码,以便不会将虚假数据加载到您的应用中。
答案 2 :(得分:0)
您是否可以将抓取过程分解为独立的块,每个块都可以在appengine请求的时间范围内完成? (可以运行超过一秒钟)。然后,您可以使用任务API生成一堆任务,这些任务在组合时可以完成整个刮擦。然后使用cron API每N分钟生成一次这些任务。
答案 3 :(得分:0)
我问了一下,有些朋友想出了两个解决方案:
使用共享密钥令牌和应用程序上传文件,但在提交代码库时,请更改令牌。
创建一个小型数据存储模型,其中包含一行,一个秘密令牌。
在这两种情况下,令牌都可用于验证用于上传新数据的POST
个请求。
答案 4 :(得分:0)
App引擎具有上传数据的工具。请参阅http://code.google.com/appengine/docs/python/tools/uploadingdata.html