第一次写与API有关的东西,算是一边练习Python及GAE,一边练习API接口的相关的操作。这是我做的一个利用GAE同步更新饭否与 TWITTER的DEMO,不保存帐户信息,每次需要手工填入用户名密码,再加入数据库存储等相应辅助模块即可做出与HelloTxt、Ping.fm类似的应用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
#!/usr/bin/env python #coding:utf-8 import wsgiref.handlers import urllib import base64 from google.appengine.api import urlfetch from google.appengine.ext import webapp class MainPage(webapp.RequestHandler): def get(self): #self.response.headers['Content-Type'] = 'text/plain' self.response.headers.add_header("Expires", "Thu, 01 Dec 1994 16:00:00 GMT") header(self) self.response.out.write('''<div id="letter"> <form action="/sign" method="post"> <div>Twitter username:<input type="text" name="tusername" id="username" value="" /> password:<input type="text" name="tpassword" id="password" value="" /></div> <div>Fanfou username:<input type="text" name="fu" id="username2" value="" /> password:<input type="text" name="fp" id="password2" value="" /></div> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Post"></div> </form></div> ''') footer(self) class PostPage(webapp.RequestHandler): def post(self): header(self) msg = self.request.get('content') page_msg=msg msg = msg.encode('utf8') tu = self.request.get('tusername') tp = self.request.get('tpassword') fu = self.request.get('fu') fp = self.request.get('fp') #update(tu,tp,'twitter',msg) #update(fu,fp,'fanfou',msg) self.response.out.write('''<div id="letter">''') if update(tu,tp,'twitter',msg)==True: self.response.out.write(''' <p>Twitter Post Susscessful</p> ''') else: self.response.out.write(''' <p>Twitter Post Faild</p> ''') if update(fu,fp,'fanfou',msg)==True: self.response.out.write(''' <p>Fanfou Post Susscessful</p> ''') else: self.response.out.write(''' <p>Fanfou Post Faild</p> ''') self.response.out.write(''' <p><a href="/" >Back</></p></div> ''') footer(self) #self.redirect('/') def header(self): self.response.out.write('''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/> <link type="text/css" rel="stylesheet" href="./styles/main.css" media="screen" /> <title>Hello,World</title> </head> <body>''') def footer(self): self.response.out.write(''' <div id="footer"><p><img src="http://code.google.com/appengine/images/appengine-silver-120x30.gif" alt="Powered by Google App Engine" /></p><p>Powered by <a href="http://ioio.name/">IoIo.NaMe</a></p></div> </body> </html>''') def update(username,password,twitter,msg): authStr = username + ":" + password #self.response.out.write(authStr.encode("base64")[0:-1]) if twitter=='twitter' : url='http://twitter.com/statuses/update.json' else: url='http://api.fanfou.com/statuses/update.json' #msg="Update by GAE.由GAE更新." form_fields = {"status":msg} form_data = urllib.urlencode(form_fields) #self.response.out.write(form_data) result = urlfetch.fetch(url=url, payload=form_data, method=urlfetch.POST, headers={"Content-type": "application/x-www-form-urlencoded", "Accept": "text/xml", "Authorization": "Basic "+authStr.encode("base64")[0:-1]}) if result.status_code == 200: return True else: return False def main(): application = webapp.WSGIApplication([('/', MainPage), ('/sign', PostPage)], debug=True) wsgiref.handlers.CGIHandler().run(application) if __name__ == '__main__': main() |
-EOF-