diff options
author | yvesf <yvesf@d0e8fea9-7529-0410-93fb-d39fd5b9c1dd> | 2009-05-27 20:40:05 +0000 |
---|---|---|
committer | yvesf <yvesf@d0e8fea9-7529-0410-93fb-d39fd5b9c1dd> | 2009-05-27 20:40:05 +0000 |
commit | 66203bf1383ef3df1ec38840e49799329c4d49e4 (patch) | |
tree | f9113f606440fc8d034d549a8ed6d2747bbdbed5 /omegle.py | |
parent | a4ff0b42f0621fe75ce53b795baace1672bf07de (diff) | |
download | omegle-66203bf1383ef3df1ec38840e49799329c4d49e4.tar.gz omegle-66203bf1383ef3df1ec38840e49799329c4d49e4.zip |
cool
git-svn-id: http://xapek.org/svn/common/omegle@1016 d0e8fea9-7529-0410-93fb-d39fd5b9c1dd
Diffstat (limited to 'omegle.py')
-rw-r--r-- | omegle.py | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/omegle.py b/omegle.py new file mode 100644 index 0000000..f2efe8a --- /dev/null +++ b/omegle.py @@ -0,0 +1,155 @@ +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) + |