aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author藍挺瑋 <lantw44@gmail.com>2012-12-16 23:00:06 +0800
committerLAN-TW <lantw44@gmail.com>2012-12-16 23:00:06 +0800
commit548e5ff804ecdf27ed4384cc23f1dd09ef60e172 (patch)
treeff2e7daef4ac8153f84856b1c26aa9c1d7a84283
parent33dcdb7fcf6f04668bdf057c251129bd5bbf55cf (diff)
downloadinccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.tar.gz
inccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.tar.zst
inccalendar-548e5ff804ecdf27ed4384cc23f1dd09ef60e172.zip
初步完成 fetch.py,同時引入 lxml 函式庫作為 XML 和 HTML 操作用
-rw-r--r--access/fetch.py73
-rw-r--r--app.yaml7
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)])
diff --git a/app.yaml b/app.yaml
index 2952aad..05d6feb 100644
--- a/app.yaml
+++ b/app.yaml
@@ -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