Пожалуйста, сообщите мне, если я могу выполнить
это с помощью Google App Engine.
Конечно! Например, в Python urlfetch
(с URL-адресом в качестве аргумента), чтобы получить содержимое, затем простой re.search(r'Value=(\d+)').group(1)
(если содержимое так же просто, как вы показываете), чтобы получить значение, и db.put
для хранить его. Вы хотите, чтобы детали Python были прописаны, или вы предпочитаете Java?
Редактировать : urllib / urllib2 также возможен (GAE поддерживает их сейчас).
Так что cron.yaml
должно быть что-то вроде:
cron:
- description: refresh "value"
url: /refvalue
schedule: every 6 hours
и app.yaml
что-то вроде:
application: valueref
version: 1
runtime: python
api_version: 1
handlers:
- url: /refvalue
script: refvalue.py
login: admin
Конечно, у вас могут быть и другие записи в одном или обоих, но это подмножество, необходимое для «обновления значения». Возможный refvalue.py
может быть:
import re
import wsgiref.handlers
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.api import urlfetch
class Value(db.Model):
thevalue = db.IntegerProperty()
when = db.DateTimeProperty(auto_now_add=True)
class RefValueHandler(webapp.RequestHandler):
def get(self):
resp = urlfetch.fetch('http://whatever.example.com')
mo = re.match(r'Value=(\d+)', resp.content)
if mo:
val = int(mo.group(1))
else:
val = None
valobj = Value(thevalue=val)
valobj.put()
def main():
application = webapp.WSGIApplication(
[('/refvalue', RefValueHandler),], debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()
В зависимости от того, что еще делает ваше веб-приложение, вы, вероятно, захотите переместить class Value
в отдельный файл (например, models.py
с другими моделями), который, конечно, затем придется импортировать (из этого .py
файл и другие, которые делают что-то интересное со всеми вашими сохраненными значениями). Здесь я принял во внимание некоторые возможные аномалии (на целевой странице не найдено Value=
), но не другие (сервер целевой страницы не отвечает или выдает ошибку); Трудно точно знать, какие аномалии вам нужно учитывать и что вы хотите делать, если они возникают (я здесь просто записываю None
в качестве значения во время аномалии, но вы, возможно, захотите сделать больше. .. или меньше - я оставлю это на ваше усмотрение! -)