我正在寻找一款优秀的撒玛利亚人,它可以提供非常基本的框架来使用Google App Engine运行python脚本。我已经阅读了文档,检查了相关的SO问题,但是我对WebApp格式迷失了。我要做的就是每周运行6次运行一个接受参数的python脚本或几个python脚本,以监听网站中的更改,然后将其发布到Firestore。
我了解cron格式和大多数配置文件。我对如何为项目安排文件以及网址的工作方式感到困惑。
我要问的是一个关于如何有效运行python脚本的非常基本的示例。 This是迄今为止我发现的最好的资源,但是我真的无法理解该站点中此代码的作用:
`#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db
import feedparser
import time
class Item(db.Model):
title = db.StringProperty(required=False)
link = db.StringProperty(required=False)
date = db.StringProperty(required=False) class Scrawler(webapp.RequestHandler):
def get(self):
self.read_feed()
self.response.out.write(self.print_items())
def read_feed(self):
feeds = feedparser.parse( "http://www.techrepublic.com/search?t=14&o=1&mode=rss" )
for feed in feeds[ "items" ]:
query = Item.gql("WHERE link = :1", feed[ "link" ])
if(query.count() == 0):
item = Item()
item.title = feed[ "title" ]
item.link = feed[ "link" ]
item.date = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.time()))
item.put()
def print_items(self):
s = "All items:<br>"
for item in Item.all():
s += item.date + " - <a href='" + item.link + "'>" + item.title + "</a><br>"
return s application = webapp.WSGIApplication([('/', Scrawler)], debug=True) def main():
run_wsgi_app(application) if __name__ == "__main__":
main() `
这是我尝试使用python3.7进行测试的python脚本:
import sys
from datetime import datetime
import firebase_admin
from firebase_admin import firestore
app = firebase_admin.initialize_app()
db = firestore.client()
def hello_firestore(user_name):
db.collection('firestore_test').document('test').set({
'time': str(datetime.now()),
'user_name': user_name
})
if __name__ == "__main__":
try:
user_name = sys.argv[1]
except:
print('Error with the argument', file=sys.stderr)
try:
hello_firestore(user_name)
except:
print('Error accessing the database', file=sys.stderr)
sys.exit(0)
对于我所了解的,我必须使用Flask或类似的东西才能使其工作,但我并不太了解它是如何工作的,我要问的只是一个小样本和简短的解释,从那里我ll加两个和两个。
最好的问候
答案 0 :(得分:4)
最后,我的孩子们会再次爱我。 原来我正在查看错误的GCP资源,如@Dan_Cornilescu指出的那样,这可能是一种解决方法,但最简单的方法是与“ Cloud Scheduler”结合使用“ Cloud Functions”,我发现它只是通过只是机会。
This文章是提到它的第一篇文章,由于我的需求和缺乏技术上的got惜,我暂时无法使用,因为授课者再次使用Web应用程序来说明这种情况。不要挖它。 但这确实和您想象中的一样简单,在您的Google Cloud Console中:
要为您的Python函数使用一个或多个参数,您要使用有效负载并从其初始函数中使用以下参数:
pubsub_message = base64.b64decode(event['data']).decode('utf-8')
您可以将此pubsub_message
用作python函数的参数。
这就是所有人,容易,超级容易,最后,我认为这就像没有可视页面的GAE一样,正是我所需要的,我知道必须有一个更好的方法。
编辑:我在这里提到的文章描述了如何使用gcloud直接从计算机上载您的函数。
答案 1 :(得分:1)
我提到的answer仍然适用-您将无法在GAE cron上以独立方式运行脚本,仅因为cron服务实际上只是一组计划的GET请求。您也许可以达到相同的最终结果,但是可以:
您可以在Quickstart for Python 3 in the App Engine Standard Environment中找到Python 3骨架
当然,您当然可以使用IaaS服务而不是GAE,例如Google Compute Engine,在那里您可以使用传统的cron服务直接运行脚本。