使用SVN来管理作业CODE

模仿着网上一些高人的做法,从这周起我也开始使用Google Project Hosting来管理我平时作业的源代码以及一些小练习的代码,这种做法的好处在于不会出现代码丢失了就找不到了,能够及时在服务器上有备份,另一方面很方便对比更新前后的代码(如图),总之是好处多多。当然也有不好的地方,使用这种方法的前提是你同意开源你所写的代码,也就是说放在服务器上任何人都可以(可能)查看到它;对于一些你不想公开(共享)出来的代码就不能使用Google Project Hosting来管理了。
-EOF-

利用 GAE同步更新饭否与TWITTER,建立你的HELLOTXT

第一次写与API有关的东西,算是一边练习Python及GAE,一边练习API接口的相关的操作。这是我做的一个利用GAE同步更新饭否与 TWITTER的DEMO,不保存帐户信息,每次需要手工填入用户名密码,再加入数据库存储等相应辅助模块即可做出与HelloTxt、Ping.fm类似的应用。

#!/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('''
Twitter username: password:
Fanfou username: password:
''') 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('''
''') if update(tu,tp,'twitter',msg)==True: self.response.out.write('''

Twitter Post Susscessful

''') else: self.response.out.write('''

Twitter Post Faild

''') if update(fu,fp,'fanfou',msg)==True: self.response.out.write('''

Fanfou Post Susscessful

''') else: self.response.out.write('''

Fanfou Post Faild

''') self.response.out.write('''

Back

''') footer(self) #self.redirect('/') def header(self): self.response.out.write(''' Hello,World ''') def footer(self): self.response.out.write(''' ''') 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-

Python获取IP地址

获取本机IP和Port,远程IP和Port

# -*- coding: cp936 -*-
"""
使用socket获取更多的信息
getsocketname:获得本机的信息(IP和port)
getpeername:获得远程机器的信息(IP和port)
fileno:每一个socket对应一个fd,使用此方法可以获得fd,为一个整数
"""
import socket
 
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
port = socket.getservbyname("http","tcp")
 
s.connect(("www.google.com",port))
print "Connect from",s.getsockname()
print "Connect to",s.getpeername()
print "file descriptor",s.fileno()
s.close()

直接获取远程IP

import socket
socket.gethostbyname('google.com')

直接获取本地IP

import socket
socket.gethostbyname(socket.gethostname())
socket.gethostbyname_ex(socket.gethostname())

-EOF-