2011-01-18 3 views
3

У меня есть работа cron в python, которая работает на моем localhost, но когда она развернута для appengine, она больше не работает.Cron работает на локальном хосте, но не при развертывании 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 

Это отлично работает локально, но на сервере я получаю следующее сообщение об ошибке:

'results' Traceback (most recent call last): File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/init.py", line 515, in call handler.get(*groups) File "/base/data/home/apps/hoosheer/4.347697940058059704/hoosheer_main.py", line 199, in get result = json_response['results'] KeyError: 'results'

Это сделало работу, пока не развернет свою вторую версию. Есть ли способ исправить это?

+1

Вам нужно проверить, что находится в ответе, который вы получаете из твиттера. Я думаю, что в нем нет «результатов», возможно, произошла какая-то ошибка (превышена какая-то твиттер-квота?). Добавьте logging.info ('JSON RESPONE:% s'% json_text) в свой код и зарегистрируйте журналы приложений, которые возвращаются из твиттера. –

+0

Да, меня преклонил Павел. Я бы пообещал разумную сумму денег, что Twitter просто подсчитывает * все * запросы, поступающие из App Engine, как один пользователь и говорит: «Больше не для вас». Вам может быть позволено запросить ваш собственный логин, чтобы получить квоту с отгороженными. – Malvolio

ответ

3

Поле JSON 'results' не возвращается, поскольку запросы на Ip, которые разрешены Twitter, достигли max quota доступных запросов; это объясняет, почему с вашего внутреннего IP-адреса у вас нет никаких проблем, и вы не получите код ответа HTTP 420.

Unluckily Google App Engine использует общий пул IP-адресов * для исходящих запросов URL-адресов и Twitter search APIs не поддерживает аутентификацию.

Search API Rate Limiting

Requests to the Search API, hosted on search.twitter.com, do not count towards the REST API limit. However, all requests coming from an IP address are applied to a Search Rate Limit. The Search Rate Limit isn't made public to discourage unnecessary search usage and abuse, but it is higher than the REST Rate Limit. We feel the Search Rate Limit is both liberal and sufficient for most applications and know that many application vendors have found it suitable for their needs.

Это заставит вас серьезно подумать, является ли Google App Engine правильным выбором для вашего приложения.

* У меня была та же проблема here, но, к счастью, разработчик API включил механизм аутентификации, который позволяет аутентифицированные запросы с одного и того же IP-адреса.

+1

благодарит за вашу помощь. Я перехожу к использованию Hunch в GAE, у которого не должно быть одинаковых проблем :) – qwop

Смежные вопросы