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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
""" Author : Zeuxis Lo P-Date : 19/8/2009 14:05 P-Name : PyIChat Verison: 0.1.0 """
timeZone = 8 fileMessIndex = "database/message.idx" fileMessData = "database/message.txt"
import os import sys import json import time import urllib
class Message: def __init__(self): pass
def getMessage(self): if int(FORM['messId']) <= 0: return False else: table = {} f = open(fileMessData, 'r') for row in f.readlines(): idx, username, gender, color, say, timestamp, end = row.split('<>') if int(idx) > int(FORM['messId']): table[idx] = { 'messId': idx, 'username': username, 'gender': gender, 'color': color, 'say': say, 'timestamp': self.dateFormat(float(timestamp)) } f.close()
return table
def getMessageId(self): return open(fileMessIndex, 'r').read()
def save(self): try: f = open(fileMessIndex, 'r+') d = str(int(f.read())+1) f.seek(0, 0) f.write(d) f.close()
f = open(fileMessData, 'a+') f.writelines("%s<>%s<>%s<>%s<>%s<>%s<>\n" % (d, self.username, self.gender, self.color, self.say, self.timestamp)) f.close()
self.messId = d
return True except: return False
def dateFormat(self, timestamp, toFormat = "%Y-%m-%d %H:%M:%S"): return time.strftime(toFormat, time.gmtime(timestamp+timeZone*3600))
class Chat: def __init__(self): if FORM['sk'] == 'save': self.saveMessage() elif FORM['sk'] == 'getMessId': self.getMessageId() elif FORM['sk'] == 'show': self.showMessageById()
def showMessageById(self): message = Message() messageTable = message.getMessage() if messageTable == False: self.showError('顯示訊息失敗') else: self.showMessage(messageTable)
def getMessageId(self): message = Message() self.showMessage({'id': message.getMessageId()})
def saveMessage(self): if self.checkValue() == True: message = Message() message.username = FORM['username'] message.gender = FORM['gender'] message.color = FORM['color'] message.say = FORM['say'] message.timestamp = time.time() if message.save() == True: self.showMessage({ 'messId': message.messId, 'username': FORM['username'], 'gender': FORM['gender'], 'color': FORM['color'], 'say': FORM['say'], 'dateTime': self.dateFormat(time.time()) }) else: self.showError('發送訊息失敗')
def checkValue(self): if len(FORM['username']) <= 0: self.showError('暱稱不能為空') elif FORM['gender'] not in ('1', '2'): self.showError('性別不正確') elif len(FORM['color']) < 3: self.showError('沒有筆色') elif len(FORM['say']) <= 0: self.showError('沒有說話') else: return True
def dateFormat(self, timestamp, toFormat = "%Y-%m-%d %H:%M:%S"): return time.strftime(toFormat, time.gmtime(timestamp+timeZone*3600))
def showError(self, msg): self.showMessage(msg, 'ERR')
def showMessage(self, msg, status = 'MSG'): print json.dumps({'status': status, 'message': msg}) sys.exit()
if __name__ == "__main__": print "content-type:text/html; charset=utf-8" print
FORM = {}
if 'CONTENT_LENGTH' in os.environ: pairs = sys.stdin.read(int(os.environ['CONTENT_LENGTH'])).split('&') for pair in pairs: name, value = pair.split('=') FORM[name] = urllib.unquote_plus(urllib.unquote(value)) Chat()
|