using google appengine_final
TRANSCRIPT
使用 Google AppEngine建立个人信息中心
weibo.com/sagasw2011-11
编程对我而言,就是永远玩不腻的玩具
- sagasw
Agenda
1 )云计算那些事儿 2 ) GoogleAppEngine 简介 3 ) GAE 搭建个人信息中心
4 )相关资源介绍
调查
1 ) Python 语言? 2 ) Google AppEngine ? 3 )云计算平台?
1 )云计算那些事儿
• IaaS (Infrastructure as a Service) o Amazon EC2 , Microsoft Azure
• PaaS (Platform as a Service) o GoogleAppEngine , SinaAppEngine , HeroKu, DotCloud
• SaaS (Software as a Service)oZoho , Google Apps,易度
云平台比较
http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf
调查结果 - 公有云计算平台使用
新浪微博 @_ 浪潮之巅 _ :
中国很多大公司 ( 主要是央企 ) ,对云计算理解就是IDC 和设备。
美国的 case 都是应用。美国这点认识比较一致: IDC 和最基础的东西让 Google , Facebook 和 Amazon去做。
http://weibo.com/2142166543/xtKu40qgP
http://addons.heroku.com/
2 ) Google AppEngine 简介
Google AppEngine云计算平台。支持 Go, Python, Java (JRuby, Rails etc.) ,有免费 Quota 。 优点:
o UrlFetch,Memcache,TaskScheduleo XMPP,Mail,Crono MapReduce,Channelo 支持 OAuth 认证或 Google 账号o Image 处理 o 域名绑定o 易使用,易管理o 免费限额大方
缺点 : o 无全文搜索o 调整后的付费方案o 需要熟悉新 SQL 操作方式
适用于:Wiki,CMS, 博客 , 微博 , 手机游戏后台 ,应用服务器 , 问答网站 , 电子书发布 ,SNS, 网店 , 工作流
不适合: 音频视频服务 , 大文件 , 密集计算
Google AppEngine 适用业务领域
Django
WebApp2
Tornado
https://github.com/facebook/tornado/tree/master/demos/appengine
Google AppEngine Web Framework
GAE 支持的 Python libraries
BeautifulSoup, FeedParser, PythonTwitter, ReadabilityPIL, PyCrypto, lxml 等等
什么样的 library 可直接用于 GAE ?• 不依赖 C 扩展• 不使用数据库• 不访问本地资源
http://pypi.python.org/pypi
Java on AppEngine
Play! Framework
http://www.slideshare.net/gasolin/play-framework-on-google-app-engine https://github.com/guillaumebort/play-gae
Scala Lift Framework
http://lift-example.appspot.com/ http://www.scala-lang.org/node/1826
JavaScript
http://www.appenginejs.org/
JRuby on Google AppEngine
code.google.com/p/appengine-jruby/github.com/jruby/jruby-rack
Lua on Google AppEngine
http://code.google.com/p/aelua/http://code.google.com/p/jillcode/http://code.google.com/p/kahlua/https://github.com/krka/kahlua2http://sourceforge.net/projects/luaj/
GAE SDK 1.5.5 Changes (Latest 1.6.0)
• Python 2.7 支持• 支持多线程,可使用 threading• 支持并发请求• 支持更多 Python lib ( PIL v1.1.7 )。• 前台请求的时间 30 秒增加到 60 秒, URLFetch 请求时间从 10 秒增加到 60 秒。 TaskQueue 响应时间增加。
From Keakon's blog
GAE 编程优化心得
• 尽量使用 MemCache• 组合 GoogleAppEngine & VPS • 通过 webservice 访问 VPS 数据库, GAE 缓存结果• 使用 google 或 VPS 搭建搜索功能• Nginx 反向代理 GAE (必须的)
VPS seller and coupon http://www.lowendbox.com/
Install Debian, Nginx in VPS http://www.howtoforge.com/
Google AppEngine 后台管理
3 ) GAE 建立个人信息中心
常用的个人信息服务列举• TwitterWeb 客户端,同步到新浪腾讯微博• RSS 聚合阅读• 获取网页,解析短网址• Cron Jobs• 在线个人笔记,在线个人博客• 网络小说阅读• 推送文章到 Kindle• 每日定时发送天气短信给自己或家人• 生日提醒(邮件,聊天工具,短信等)• 监控 iPhone 预订网页的内容变化 • 相册• Webproxy
已实现的功能及实现方式
1 )选择现成代码修改( Doodle, V2ex, GaeBBS )2 )同步发推 , 新浪微博功能, t.co 短网址 3 )定期采集 RSS4 )支持 Google Reader share5 ) HackerNews 全文阅读6 )网页内容变化,通过短信提醒7 )支持 XMPP 协议( gtalk )客户端自动聊天8 )网络小说 web client9 )发送 Flickr 每日 interesting 图片到新浪微博
同步到新浪微博 import mechanize br = mechanize.Browser() br.open("http://abcd.com/weibosdk/weibopost.php") br.select_form(nr=0) strform = status.encode('utf-8') br.form['text'] = str br.submit()
需要 VPS 上搭建微博 PHP SDK 作中转 或者使用 SinaAppEngine 作为中转
BeautifulSoap
from BeautifulSoup import BeautifulSoupVALID_TAGS = ['strong', 'em', 'p', 'ul', 'li', 'br', 'img', 'ol', 'blockquote']
def sanitize_html(value): soup = BeautifulSoup(value) for tag in soup.findAll(True): if tag.name not in VALID_TAGS: tag.hidden = True
return soup.renderContents()
https://gist.github.com/1298152
抓取网页 ( Webproxy )
推特客户端
https://gist.github.com/1312657
XMPP gtalk 聊天机器人
网页内容监控,发送邮件( 139.com )
免费 Quota 统计
实例一 发送 flickr 图片到新浪微博
• Cron 任务采集 flickr 的 explore 图片• 访问图片网址,获取 favor 信息(确定是否 pos
t )• 建立 task ,投递到 taskqueue (使用 ETA )• 在 SAE 上搭建中转服务• Mechanize 模拟 form submit 访问 SAE
• Fix bug ,调整参数
示例二 Mobile01 阅读
• 分析网页内容• 设计抓取方式• HTML readability
– viewtext.org,
– www.instapaper.com/m?u=
– Readitlaterlist api
• 下载图片• 添加文章
总结
• 好玩很重要• 云计算平台值得投入时间了解学习• 推荐使用 Python + Tornado
• 组合 WebService, API 的 Mashup 设计思路
Q & A