Cron在本地主机上工作,但在部署Appengine时不工作

时间:2011-01-18 09:13:28

标签: python google-app-engine cron

我在python中有一个cron作业,可以在我的localhost上运行,但是当它部署到appengine时,它不再有效。

  pl = db.Query(Venue).order("id")
    list = pl.fetch(limit=0)
    for p in pl:
        base_url = 'http://search.twitter.com/search.json?rpp=100&q=4sq.com/'
        query = p.twitter_ID
        url_string = base_url + query
        json_text = fetch(url_string)
        json_response = simplejson.loads(json_text.content) 
        result = json_response['results']
        for f in result:
            user = f['from_user'] 
            print user   

这在本地工作正常,但在服务器上我收到以下错误:

  

'结果'追踪(最近的电话   最后):文件   “/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py”   第515行,致电       handler.get(* groups)文件“/base/data/home/apps/hoosheer/4.347697940058059704/hoosheer_main.py”,   第199行,在得到       result = json_response ['results'] KeyError:'results'

在我部署第二个版本之前,这确实有效。有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

未返回JSON 'results'字段,因为Twitter允许的每Ip请求已达到max quota个可用请求;这解释了为什么从你的国内IP你没有任何问题,你没有得到HTTP 420响应代码。

不幸的是,Google App Engine使用共享IP地址池 * 来处理传出的urlfetch请求,Twitter search APIs不支持身份验证。

  

搜索API速率限制

     

托管在Search API上的请求   search.twitter.com,不要算   朝着REST API限制。然而,   所有来自IP地址的请求   适用于搜索速率限制。   未进行搜索速率限制   公众劝阻不必要的   搜索使用和滥用,但确实如此   高于REST速率限制。我们   感觉搜索速率限制是两者   自由和充足的   应用程序并知道很多   应用程序供应商已找到它   适合他们的需要。

这会迫使您认真考虑Google App Engine是否适合您的应用。

*我遇到了同样的问题here但幸运的是,API的开发人员启用了一种身份验证机制,允许来自同一IP的经过身份验证的请求。