为JIEblog生成符合规范的网站供稿

最近着手改进网站的代码,一方面通过memcache降低CPU使用,另一方面想把网站供稿在feedburner上烧制一下,以减少网络程序访问产生的CPU占用。以前的供稿在Google Reader上虽然显示正常,但在Feedburner上烧录后却只有乱码。研究了一下发现是由于feedburner是根据供稿的编码来识别代码,而不是根据实际的编码,因为这个XML模板是用Intype默认的ANIS编码编写的所以造成了这个错误。

另外用http://feedvalidator.org/验证了一下这个供稿,发现还有不少问题。文章内部字符和标记的错误就不计了,剩下的主要是时间格式不符合规范。其实以前这个时间规范的问题一直会影响Google Reader,不过不知道Google什么时候改正了时间显示的方式,用Google Reader抓取的时间代替了供稿生成的时间,所以我的这个问题也一直没有修正。

Atom使用的这个时间格式标准被称为rfc3339 Timestamps,其实编写一个能生成符合这个rfc3339标准的python代码也不算难,而我可能以后会用django生成的供稿,所以为了节约时间还是直接Google了一个rfc3339 for Python,上面还有Pyfeed这种东西,真是遗憾了,以后干什么一定要先Google一下。

在用http://jieblog.appspot.com烧录的时候发现feedburner居然直接识别了appspot的子域名并且返还了这么个地址http://feeds.feedburner.com/appspot/euFN。不过在没有修改完善之前还是不使用这个供稿了,毕竟修改供稿造成阅读器的项目混乱是很麻烦的。

为JIEblog添加Memcache

虽然从控制台上看Application Quotas还都够用,但是Current Load里首页和feeds两个项目平均CPU占用都有警告:

This URL uses a heigh amount of CPU and may soon exceed its quota.

看着总是不太舒服。首页的高CPU自然比较正常,而feeds因为我没有使用feedburner这类的工具烧制RSS现在的确有点后悔了,再加上这个feeds还是Google Webmaster工具的Sitemap所以占用也会很高。而Google Reader甚至有时候在我发布文章后1分钟内就会更新。

Appengine的FAQ里提到衡量CPU使用的两个主要途径是:

  1. Runtime CPU:应用程序本身产生的CPU使用,这显然是和代码的质量有关系
  2. API CPU:用于调用App Engine API产生的CPU使用,例如:datastore API , urlfetch API, image API, 等。

第一条我显然没有太多时间做。。。所以直接转向第二条,使用Memcache进行优化。Appengine文档里有个很简单的例子,目前我只用Memcache尝试提取首页的Post数据,然后看看效果是否明显:

def get_data(the_key, time_exp):
  data = memcache.get("Post")
  if data is not None:
	return data
  else:
	data = query_for_data()
	if not memcache.add(the_key, data, time_exp):
		logging.error("Memcache set failed.")
	return data

通过使用这个函数,首先检查memcache的data是否有the_key这个数据,如果有的话直接返还data,如果没有的话则调用query_for_data()这个函数。然后将query_for_data()的结果加入memcache,而memcahe则是按照设定的time_exp进行更新。

留言Spam造成Google错误

很抱歉...
您的查询看起来类似于来自计算机软件的自动请求。为了保护我们的用户,请原谅我们现在暂时不能处理您的请求。
另外,计算机软件的自动请求很可能来自于恶意软件,如果您怀疑您的计算机或网络已受到恶意软件感染,最好运行病毒检查工具或间谍软件删除工具,以确保您的系统或者网络不会受到病毒或其他可疑软件的威胁。
如果您不断收到这条错误消息,请删除您的 Google Cookie 并重新访问 Google,可能就能解决这个问题。有关特定浏览器的说明,请访问您浏览器的在线支持中心。
对由此带来的不便,我们深表歉意;希望可以看到您再次使用 Google。

昨天晚上访问网站的时候出现这个错误,然后换了个IP再次访问就可以正常打开了。开始以为是自己哪里的程序写的不对劲,服务器负载太大Google 禁止访问了,第二天才发现留言里面多了好多spam信息,应该这就是出现错误的原因。因为是无名小站没什么访问,所以评论系统一直就是“裸奔”状态,或许我也应该写段类似验证码的代码来防止spam,不过首先还是在首页上把评论显示出来吧,否则spam来了都不知道。

Creative Commons 3.0 BY