#!/usr/bin/python # -*- coding: UTF8 -*- # # ttm_server.py - Serveur Talk To Me # # auteur: tux@serviceinformatique06.com # version: 0.1 # Licence: GPL # # Serveur web minimaliste (une seule page) # Affiche un formulaire et envoie le texte vers le tts de tux # import os, sys, re, urlparse, urllib, base64, threading from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from tuxisalive.api.TuxAPI import * argv = os.sys.argv argc = len(argv) FROM_IP = ['192.168.1.1','192.168.1.2'] if argc < 2: print "usage: ttm_server.py PORT" sys.exit(0) PORT = int(argv[1]) class say(threading.Thread): def __init__(self,tts,locutor='Julie',pitch=100): threading.Thread.__init__(self) self.tts=tts self.locutor=locutor self.pitch=pitch self.start() def run(self): if tux.access.waitAcquire(10.0, ACCESS_PRIORITY_NORMAL): tux.mouth.open() tux.tts.setEncoding( "utf-8" ) tux.tts.speak(self.tts,self.locutor,self.pitch) tux.mouth.close() tux.access.release() class customHTTPServer(BaseHTTPRequestHandler): def get_html(self,text=""): global tux, FROM_IP ok = False IP = self.client_address[0] for item in FROM_IP: if item == IP: ok = True if not ok: print 'unauthorized :' + IP self.send_response(404) return params = dict({'locutor':'Bruno','pitch':100,'tts':'','histo':'','headers':'yes'}) for duo in urlparse.urlparse(self.path).query.split('&'): v=duo.split('=') if len(v) > 1: params[v[0]]=urllib.unquote_plus(v[1]) params[v[0]]=params[v[0]].replace( "'", ''') locutors = dict({'Bruno':'','Julie':''}) if params['locutor']=='Julie': locutors['Julie']='selected' else: locutors['Bruno']='selected' histo = '' try: histo = base64.decodestring(params['histo']) except : pass if params['tts']!='': say('Message web: ' + params['tts'],params['locutor'],params['pitch']) histo = re.sub(r'<[^>]*?>', '', histo + params['locutor'] + ': '+params['tts'] + "\n") ifheaders = '' if params['headers'] != 'yes': ifheaders = '' html = """
""" + ifheaders + """
""" + histo + '
' if params['headers'] == 'yes': html = """ Talk To Me """ + html + '' self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() self.wfile.write(html) def do_GET(self): self.get_html() def do_POST(self): self.get_html() def main(): global tux tux = TuxAPI('127.0.0.1', 54321) tux.server.autoConnect(CLIENT_LEVEL_RESTRICTED, 'Serveur Talk To Me' , 'NONE') tux.server.waitConnected(10.0) tux.dongle.waitConnected(10.0) tux.radio.waitConnected(10.0) try: server = HTTPServer(('',PORT),customHTTPServer) print 'server started at port ' + str(PORT) server.serve_forever() except KeyboardInterrupt: server.socket.close() tux.server.disconnect() tux.destroy() if __name__=='__main__': main()