summaryrefslogtreecommitdiff
path: root/omegle.py
diff options
context:
space:
mode:
Diffstat (limited to 'omegle.py')
-rw-r--r--omegle.py155
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)
+