Loading...

Tag Archive for 'gae'

    AD: 猛买 | 快递查询 | Jobsdigg | 很棒的男装店

动手开发一个GAE应用(2)

继续昨天的文章。昨天做了一个可以从网上下载图片数据并存储的GAE应用,今天的部分,我们将在昨天的基础上做出一些改进。比如增加一个校验的部分,这样可以避免别人恶意使用;加入memcached支持,可以把经常用到的图片数据放到内存里;最后,再用ruby写一个客户端。 首先增加一个验证的部分,这里采用类似支付宝支付网关的验证方式:服务器端和客户端用一个相同的screct key,每次在提交请求的时候,把请求的参数加上screct key得到的字符串md5一下。把md5加密后的字符串作为校验的参数,一起包含在一个Get请求中提交给服务器。比如screct key是”blogkid”,请求的参数是”url=http://otho.douban.com/pics/logosmall.gif&uuid=douban“。在计算校验码的时候,先把screct key加在最后,比如写成”url=http://otho.douban.com/pics/logosmall.gif&uuid=douban&auth=blogkid“,之后计算整个字符串的md5结果,得到”ffdf712f7f69da41938bc14a0bf49207“。把这个结果加在get请求参数后面,最后就是”url=http://otho.douban.com/pics/logosmall.gif&uuid=douban&auth=ffdf712f7f69da41938bc14a0bf49207“,然后服务器端使用相同的方法进行验证。 客户端用ruby来写: require ‘digest/md5′ require ’net/http’ require ’uri’   REMOTE_STORE_TOKEN = "#YOUR_PRIVATE_SECRECT_KEY#"   class RemoteStore   def initialize remote_addr     @remote_addr = remote_addr   end     def put hash     hash[:auth] = Digest::MD5.hexdigest hash.map{|k,v| k.to_s+"="+v}.join("&")+"&auth="+REMOTE_STORE_TOKEN     Net::HTTP.get(URI.parse(@remote_addr+hash.map{|k,v| k.to_s+"="+v }.join("&")))   end end 真正put的方法,只有两行(ruby就是简洁呐)。 而服务器端的校验,需要改写我们昨天的ImportHandler: import md5 auth_code = "#YOUR_PRIVATE_SECRECT_KEY#"   class ImportHandler(webapp.RequestHandler):   [...]

动手开发一个GAE应用

GAE出来有段时间了,我浏览了一下Google的App Gallery,大多数应用都侧重在客户端。当然,也有牛人开发了一个极像WP的blog应用micoblog。 我想自己整一个GAE应用,用Google的服务器来保存我一个网站上的图片。现在的图片都是引用自卓越、当当,现在想保存到自己的地盘。如果能放在Google服务器上,一方面可以节约流量,另一方面也能使服务器不被一大堆小文件给拖累。毕竟有几十万个图片呐。思考一下,GAE上有urlFetch的API,完全可以满足需求。 新建一个文件夹,弄一个app.yaml的配置文件。 application: your_app_name version: 1 runtime: python api_version: 1 handlers: – url: .* script: main.py 因为需求很简单,所以用一个main.py,来处理所有请求。之后新建一个main.py。为了导入图片,需要先定义一个Photo的类(Photo这个名字其实不太合适)一个ImportHandler: from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext import db from google.appengine.ext import webapp from google.appengine.api import urlfetch   class ImportHandler(webapp.RequestHandler):     ”’Import Pictures”’     def get(self):         global auth_code         uuid = self.request.get(‘uuid’)     [...]

GAE离得很远

(瀑布汗,这篇文章没写完,要出门。结果不小心点了保存旁边的发布,于是提前就把一小段给发布出来了。) GAE出来的时候,很酷。前些日子我下载了SDK,照猫画虎地玩了一把,python的精巧别致,算是对成天埋头java中的我的一点调剂。昨天在GAE的邮件列表里看到了他们的RoadMap: 10/08 – 3/09 * Service for storing and serving large files * Datastore import and export utility for large datasets * Billing: developers can pay for more resource usage * Support for a new runtime language * Uptime monitoring site 其中的”Support for a new runtime language”,可能真的就是perl。但appspot.com在国内不少地方都访问不了,绑定独立域名后,CNAME指向的主机也连不上。平日拿来玩当然可以,但如果想做个啥东西在上面,基本上别指望能让国内用户用你的app了。不能怪Google不能怪别的,只怪生的地方不好。 不过,要是能用GAE做一个facebook上的app,倒是个不错的主意。