import sys import httplib import urllib import time import json from threading import Thread, Lock class Timer(Thread): def __init__(self,func,interval=0.50): Thread.__init__(self) self.func = func self.interval = interval self.running = False def run(self): self.running = True while self.running: self.func() time.sleep(self.interval) def stop(self): self.running = False class OmegleChat(object): headers = { "Host" : "omegle.com", "Content-type": "application/x-www-form-urlencoded; charset=utf-8", "Accept": "application/json" } def __init__(self,poll_interval=0.5): self.conn = httplib.HTTPConnection('www.omegle.com') # self.conn.set_debuglevel(1) self.conn_lock = Lock() self.timer = Timer(self.events, poll_interval) def start(self): self.conn_lock.acquire() self.conn.request("POST", "/start", {}, OmegleChat.headers) self.conn_lock.release() r=self.conn.getresponse() body=r.read() id=body.split("\"") if id.__len__() == 3: self.id = id[1] print "Connected, id=%s" % self.id else: raise Exception("Bad response: %s" % body) #Poll events self.timer.start() def disconnect(self): self.timer.stop() self.conn_lock.acquire() self.conn.request("POST", "/disconnect", urllib.urlencode({'id' : self.id}), OmegleChat.headers) r = self.conn.getresponse() self.conn_lock.release() body = r.read() if body != "win": raise Exception("/disconnect; Bad response: %s" % body) def events(self): conn = httplib.HTTPConnection('www.omegle.com') conn.request("POST", "/events", urllib.urlencode({'id' : self.id}), OmegleChat.headers) r=conn.getresponse() body=r.read() self.dispatch_event(conn,body) conn.close() def send(self,msg): self.conn_lock.acquire() self.conn.request("POST", "/send", urllib.urlencode({'id':self.id,'msg':msg}), OmegleChat.headers) r=self.conn.getresponse() self.conn_lock.release() body = r.read() if body != "win": raise Exception("/send; Bad response %s" % body) def typing(self): self.conn_lock.acquire() self.conn.request("POST", "/typing", urllib.urlencode({'id':self.id}), OmegleChat.headers) r=self.conn.getresponse() self.conn_lock.release() body = r.read() if body != "win": raise Exception("/typing; Bad response %s" % body) def dispatch_event(self,conn,body): try: data_set=json.read(body) if not data_set: print "No Data received" return for data in data_set: if data[0] == "typing": self.on_typing() elif data[0] == "gotMessage" and data.__len__() == 2: self.on_message(data[1]) elif data[0] == "connected": self.on_connect() elif data[0] == "strangerDisconnected": self.timer.stop() self.on_disconnect() elif data[0] == "waiting": pass #unhandled else: print "Unknown JSON Data: %s" % body except json.ReadException: print "Json ReadException. Body: %s" % body def on_message(self,message): print "<<< %s" % message def on_connect(self): print "Connected" def on_typing(self): print "Stranger is typing" def on_disconnect(self): print "Stranger Disconnectet" if __name__ == "__main__": print "Lets chat. Type \"quit\" to disconnect" chat = OmegleChat() chat.start() while 1==1: try: cmd=sys.stdin.readline().strip() except KeyboardInterrupt: chat.disconnect() break if cmd=="quit": chat.disconnect() break else: print ">>> %s" % cmd chat.send(cmd)