在一个任务中,我正在使用查询迭代一组项目.从查询中提取每个实体后,我也在执行URL请求.迭代了大量这些项后,我看到以下错误:
BadRequestError: The requested query has expired. Please restart it with the last cursor to read more results.
Run Code Online (Sandbox Code Playgroud)
创建查询后,查询的租约是多少?
使用Python,我将日期和时间作为datetime.datetime存储到GAE中.有没有办法获得日期时间的值,以毫秒为单位,而不是完全格式化的字符串版本?
根据datetime.datetime的文档,我没有在日期时间类上看到任何本地方法. http://docs.python.org/release/2.5.2/lib/datetime-datetime.html
原始日期值以这种方式存储:
date_time_float = 1015182600 #some date as timestamp
date_time_object = datetime.fromtimestamp(date_time_float);
Run Code Online (Sandbox Code Playgroud)
当我从商店中提取数据时,它的类型是:
type(exported_date_time) # type: datetime.datetime
Run Code Online (Sandbox Code Playgroud)
有转换为字符串表示的strftime,但我正在寻找的是将'exported_date_time'转换为毫秒.
我想在给定的url字符串前添加'http'方案名称,如果它缺少的话.否则,留下网址,所以我认为urlparse是正确的方法.但是每当没有方案并且我使用get url时,我在方案和域之间得到///而不是'//'.
>>> t = urlparse.urlparse('www.example.com', 'http')
>>> t.geturl()
'http:///www.example.com' # three ///
Run Code Online (Sandbox Code Playgroud)
如何转换此网址,使其实际看起来像:
'http://www.example.com' # two //
Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个非平凡的GAE应用程序,我不确定是否需要根据GAE对HTTP的请求超时限制来使用cron作业,任务,后端或所有内容的组合要求.
我需要做的不同步骤是:
1)我有超过15,000个站点,我需要定期从中提取数据,而无需任何用户交互.站点总数不会变为静态,但它们都会保存在数据存储区[Table0]中,并沿着它们读取的时间间隔保存.间隔可以每天到每30天定期变化.
2)对于符合"拉"计划标准的步骤#1中的每个站点,我需要通过HTTP GET从中获取数据(同样,它可能是所有站点或少至2或3个站点).一旦我从站点获得响应,解析结果并将此数据保存到数据存储区[Table1].
3)对于最近在[Table1]中放入数据存储区的所有数据(它们都有一个特殊标志),我需要向第三方站点发出额外的HTTP请求以进行一些额外的处理.一旦我从该站点收到数据,我就会将所有相关信息存储到数据存储区中的另一个表[Table2]中.
4)一旦数据可用并从步骤#3准备就绪,我需要完成所有这些并执行一些额外的转换并更新数据存储区中的原始表[Table1].
我不确定我需要使用哪些不同的组件来确保我可以完成每项工作,而不会超出GAE网络请求的响应截止日期.对于由cron作业和任务发起的请求,我相信您可以在10分钟内完成它,而典型的用户驱动请求则允许30秒.
我正在尝试创建一个内存中的xml文档,以便root的子节点都需要一个名称空间.
最终文档看起来应该是这样的:
<Feed>
<FeedEntity Id="0000"
xmlns="http://schemas.example.com/search/query/2010/5/revision">
<FeedRequest locale="en-US" title="<some value>"/>
</FeedEntity>
... another FeedEntity element ...
</Feed>
Run Code Online (Sandbox Code Playgroud)
但是,当我打印出我使用ElementTree lib创建的文档时,它看起来更像是这样的:
<Feed>
<ns0:FeedEntity Id="0000"
xmlns:ns0="http://schemas.example.com/search/query/2010/5/revision">
<FeedRequest locale="en-US" title="<some value>"/>
</ns0:FeedEntity>
</Feed>
Run Code Online (Sandbox Code Playgroud)
这是我创建文档的方式:
counter = 0
namespace = "http://schemas.example.com/search/query/2010/5/revision"
root = Element("Feed")
node_name = "{%s}FeedEntity" % (namespace, );
feed_entity_element = Element(node_name)
feed_entity_element["Id"] = "%04d" % (counter,);
feed_request_element = Element("FeedRequest");
feed_request_element["Culture"] = self.culture;
feed_request_element["Query"] = address;
# append each of the elements to the xml document
feed_entity_element.append(feed_request_element);
root.append(feed_entity_element);
str_data = ET.tostring(root)
print str_data
Run Code Online (Sandbox Code Playgroud)
如何摆脱最终XML中的"ns0"部分,使其看起来更像上面提到的第一个例子?
我已经指定了一个cron作业(在开发中测试),但它似乎没有运行.如何确保工作在生产中有效?
cron.yaml:
cron:
- description: cron test gathering
url: /test/cron
schedule: every 2 minutes from 09:00 to 23:00
Run Code Online (Sandbox Code Playgroud)
app.yaml中:
application: cron_test
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
script: main.py
Run Code Online (Sandbox Code Playgroud)
main.py:
url_map = [ ('/test/cron', test.CronHandler),
('/error', err.Err404Handler)]
application = webapp.WSGIApplication(url_map, debug=False)
def main():
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
Run Code Online (Sandbox Code Playgroud)
FeedCron定义为:
class CronHandler(webapp.RequestHandler):
def get(self):
logging.info("NOTE: CronHandler get request");
return None
Run Code Online (Sandbox Code Playgroud)
我期待在应用引擎的日志中看到"请注意:CronHandler获取请求"这一行.我正在使用GoogleAppEngineLauncher应用程序(版本:1.5.3.1187)来启动和停止应用程序.
我正在创建一个基于'HTMLParser'的子类来提取html内容.每当我有字符refs如
' ' '&' '–' '…'
Run Code Online (Sandbox Code Playgroud)
我想用他们的英语同行替换他们
' ' (space), '&', '-', '...', and so on.
Run Code Online (Sandbox Code Playgroud)
将一些简单的字符引用转换为正确的表示形式的最佳方法是什么?
我的文字类似于:
Some text goes here&after that, 6:30 pm–8:45pm and maybe
something like …
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
Some text goes here & after that, 6:30 pm-8:45pm and maybe
something like ...
Run Code Online (Sandbox Code Playgroud)