Skip to content

Commit

Permalink
read APIgit add *pygit add *py :D :D :D
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Feb 2, 2014
1 parent b225c5a commit bfb135f
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 4 deletions.
23 changes: 23 additions & 0 deletions SEChatBrowser.py
Expand Up @@ -18,6 +18,7 @@ def __init__(self):
self.chatfkey=""
self.chatroot="http://chat.stackexchange.com"
self.sockets={}
self.rooms={}
def loginSEOpenID(self,user,password):
fkey=self.getSoup("https://openid.stackexchange.com/account/login").find('input',{"name":"fkey"})['value']
logindata={"email":user,"password":password,"fkey":fkey}
Expand Down Expand Up @@ -69,6 +70,9 @@ def getSomething(self,relurl):
def getSoup(self,url):
return BeautifulSoup(self.session.get(url).content)
def initSocket(self,roomno,func):
"""
Does not work. Use polling of /events
"""
eventtime=json.loads(self.postSomething("/chats/"+str(roomno)+"/events",{"since":0,"mode":"Messages","msgCount":100}))['time']
print eventtime
wsurl=json.loads(self.postSomething("/ws-auth",{"roomid":roomno}))['url']+"?l="+str(eventtime)
Expand All @@ -88,6 +92,25 @@ def runner():
print "r2"
def post(self,url,data):
return self.session.post(url,data)
def joinRoom(self,roomid):
roomid=str(roomid)
self.session.head(self.getURL("/rooms/"+roomid))
self.rooms[roomid]={}
eventtime=json.loads(self.postSomething("/chats/"+str(roomid)+"/events",{"since":0,"mode":"Messages","msgCount":100}))['time']
self.rooms[roomid]["eventtime"]=eventtime
def pokeRoom(self,roomid):
roomid=str(roomid)
if(not self.rooms[roomid]):
return false
pokeresult=self.postSomething("/events",{"r"+roomid:self.rooms[roomid]['eventtime']})
pokeresult=json.loads(pokeresult)
try:
roomresult=pokeresult["r"+str(roomid)]
newtime=roomresult["t"]
self.rooms[roomid]["eventtime"]=newtime
except KeyError:
"NOP"
return pokeresult
def getURL(self,rel):
if(rel[0]!="/"):
rel="/"+rel
Expand Down
24 changes: 23 additions & 1 deletion SEChatWrapper.py
@@ -1,5 +1,6 @@
import SEChatBrowser

import threading
import time
class SEChatWrapper:
def __init__(self,site="SE"):
self.br=SEChatBrowser.SEChatBrowser()
Expand All @@ -15,3 +16,24 @@ def login(self,username,password):
self.br.loginMSO()
def sendMessage(self,room,text):
return self.br.postSomething("/chats/"+room+"/messages/new",{"text":text})
def joinRoom(self,roomid):
self.br.joinRoom(roomid)
def watchRoom(self,roomid,func,interval):
def pokeMe():
while(True):
try:
pokeresult=self.br.pokeRoom(roomid)
events=pokeresult["r"+str(roomid)]["e"]
func(events)
except KeyError:
"NOP"
finally:
time.sleep(interval)
thethread=threading.Thread(target=pokeMe)
thethread.setDaemon(True)
thethread.start()
return thethread

"""
[{"event_type":1,"time_stamp":1391324366,"content":"boooo","id":25123259,"user_id":31768,"user_name":"ManishEarth","room_id":11540,"room_name":"Charcoal HQ","message_id":13536215}]
"""
3 changes: 3 additions & 0 deletions __init__.py
@@ -0,0 +1,3 @@
"""
The ChatExchange package
"""
13 changes: 10 additions & 3 deletions test.py
Expand Up @@ -2,6 +2,7 @@
import SEChatWrapper
import getpass
import os
import time

#Run `. setp.sh` to set the below testing environment variables
if("ChatExchangeU" in os.environ):
Expand All @@ -14,9 +15,15 @@
else:
password=getpass.getpass("Password: ")

a=SEChatWrapper.SEChatWrapper("SE")
a=SEChatWrapper.SEChatWrapper("MSO")
a.login(username,password)
def omsg(msg):
print msg
a.br.initSocket("11540",omsg)
print "\n>> ("+msg[0]['user_name']+") ",msg[0]['content']
a.joinRoom("89")

a.watchRoom("89",omsg,1)
#print a.sendMessage("11540","Manish is still testing the wrapper --the wrapper, ca 15 milliseconds ago")
print "Ready"
while(True):
b=raw_input("<< ")
a.sendMessage("89",b)

0 comments on commit bfb135f

Please sign in to comment.