用GAE架设WAP站点

标签:Google App Engine

前天研究MIME Type时,顺便研究了一下WAP站点的搭建,然后发现GAE居然也支持WAP,于是就写点心得吧。

先给个例子,再解释下实现。

首先是app.yaml文件:
application: test #这里写你的app id
version: 1
runtime: python
api_version: 1

handlers:

- url: /(.*\.(wml))
  static_files: static/\1
  upload: static/(.*\.(wml)) # 这里就是wml文件的存放地点,我设在static文件夹下了
  mime_type: text/vnd.wap.wml # 这行可有可无,因为GAE居然能识别wml文件

- url: /(.*\.(gif|png|jpg))
  static_files: static/\1
  upload: static/(.*\.(gif|png|jpg))
然后写个测试页面,假设是test.wml,然后扔到static文件夹下,注意文件格式一定要保存为UTF-8格式:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card id="hello" title="Hello">
<p>哈哈</p>
<a href="test.wml">测试链接</a>
<img src="test.jpg" alt="test" />
</card>
</wml>
最后随便找个test.jpg文件,扔到static文件夹下,一个简单的wap页面就建好了。

至于测试嘛,你可以用Opera浏览器访问这个地址:
http://localhost:8080/test.wml


例子看完了,就来解释它了。

首先是app.yaml,我主要处理了wml和图像文件的url地址。
注意那个mime_type,也许你会用到比较特殊的mime_type,而GAE不会自动识别出来,就需要按上述方法加上。
你可以参照《MIME TYPE 大全》来添加GAE无法识别的MIME Type。

然后是wml文件。一个WAP页面其实就是一个wml文件,它相当于一个html文件。
由于wml本身也是xml,所以语法实际上和xhtml差不多,必须符合xml规范(标签要关闭,&等标记必须转义)。
此外还有个重要区别,没有body标签,而有card标签,而且一个页面可以有多个card。(card实际上就是书签。)也不能用JavaScript和CSS,不过多了几个标签用于处理事件。
至于详细信息,可以参考《WML语法大全》
所以这个也没什么需要讲述的了,懂html的都知道test.wml干了什么。
最后强调一下,如果要显示中文,需要将文件保存为UTF-8格式,因为默认情况下,GAE会自动在Content-Type中设置UTF-8格式的文件头。
或者将所有的中文都用转义字符表示,比如哈哈写成&#54c8;&#54c8;。这种方式出现乱码的几率最小,但处理起来很麻烦。

然后就是动态页面了。由于动态页面的Content-Type默认为"text/html; charset=UTF-8",不符合WAP页面的要求,所以必须设置一下:
self.response.headers['Content-Type'] = 'text/vnd.wap.wml; charset=UTF-8'
当然,你也可以设置为其他编码,不过很多手机无法识别gbk等编码。

此外就是要注意排版,由于手机屏幕小,网速慢,一页的内容别太多了,多分几页比较好。

嗯,有空我去把GAE上的blog改造成手机也能访问的吧~

4条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?