diff options
author | 藍挺瑋 <lantw44@gmail.com> | 2012-12-16 23:00:06 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2012-12-16 23:00:06 +0800 |
commit | 548e5ff804ecdf27ed4384cc23f1dd09ef60e172 (patch) | |
tree | ff2e7daef4ac8153f84856b1c26aa9c1d7a84283 | |
parent | 33dcdb7fcf6f04668bdf057c251129bd5bbf55cf (diff) | |
download | inccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.tar.gz inccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.tar.zst inccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.zip |
初步完成 fetch.py,同時引入 lxml 函式庫作為 XML 和 HTML 操作用
-rw-r--r-- | access/fetch.py | 73 | ||||
-rw-r--r-- | app.yaml | 7 |
2 files changed, 80 insertions, 0 deletions
diff --git a/access/fetch.py b/access/fetch.py new file mode 100644 index 0000000..053484b --- /dev/null +++ b/access/fetch.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python +# -*- coding: UTF-8 -*- + +import webapp2 + +from google.appengine.api import users +from google.appengine.ext import db + +from lxml import etree + +def XMLBuildCalEvent(calevent, entry): + newdata = etree.SubElement(calevent, 'key') + newdata.text = str(entry.key()) + newdata = etree.SubElement(calevent, 'title') + newdata.text = entry.title + newdata = etree.SubElement(calevent, 'content') + newdata.text = entry.content + newdata = etree.SubElement(calevent, 'icon') + newdata.text = str(entry.icon) + newdata = etree.SubElement(calevent, 'beginyear') + newdata.text = str(entry.beginyear) + newdata = etree.SubElement(calevent, 'beginmonth') + newdata.text = str(entry.beginmonth) + newdata = etree.SubElement(calevent, 'begindate') + newdata.text = str(entry.begindate) + newdata = etree.SubElement(calevent, 'endyear') + newdata.text = str(entry.endyear) + newdata = etree.SubElement(calevent, 'endmonth') + newdata.text = str(entry.endmonth) + newdata = etree.SubElement(calevent, 'enddate') + newdata.text = str(entry.enddate) + newdata = etree.SubElement(calevent, 'datafrom') + newdata.text = entry.datafrom + +class FetchEvent(webapp2.RequestHandler): + def get(self): # GET 適用於已知 key 的狀況 + mykey = self.request.get('key') + eventroot = etree.Element('inccalender') + calevent = etree.SubElement(eventroot, 'calevent') + entrykey = db.Key(mykey) + entry = db.get(entrykey) + XMLBuildCalEvent(calevent, entry) + + self.response.headers['Content-Type'] = 'text/xml; charset=UTF-8' + self.response.out.write( + etree.tostring(eventroot, pretty_print=True, xml_declaration=True, + encoding='UTF-8')) + + def post(self): # POST 適用於需要查詢的情況,要提供年月 + guserid = users.get_current_user() + if not guserid: + return + + byear = self.request.get('byear') + bmonth = self.request.get('bmonth') + data = db.GqlQuery("SELECT * FROM CalEvent " + "WHERE ANCESTOR IS :1 ORDER BY begindate", + db.Key.from_path('user', guserid.email())) + + eventroot = etree.Element('inccalender') + for entry in data: + calevent = etree.SubElement(eventroot, 'calevent') + XMLBuildCalEvent(calevent, entry) + + self.response.headers['Content-Type'] = 'text/xml; charset=UTF-8' + self.response.out.write( + etree.tostring(eventroot, pretty_print=True, xml_declaration=True, + encoding='UTF-8')) + + + + +app = webapp2.WSGIApplication([('/access/fetch', FetchEvent)]) @@ -8,6 +8,9 @@ libraries: - name: jinja2 version: latest +- name: lxml + version: latest + handlers: - url: /css static_dir: css @@ -17,6 +20,10 @@ handlers: static_dir: js secure: optional +- url: /images + static_dir: images + secure: optional + - url: /access/(.*) script: access.\1.app secure: always |