1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
#!/usr/bin/python
import browser
import time
import os
SERVER_HOST = 'www.scannerjammer.com'
SERVER_PORT = 19898
API_HEADER = "#@scanjam 0.2\n"
API_LOGIN = "http://"+SERVER_HOST+":"+str(SERVER_PORT)+"/api/auth/sneakin"
API_POLL = "http://"+SERVER_HOST+":"+str(SERVER_PORT)+"/api/room/poll"
API_POST_VIDEO = "http://"+SERVER_HOST+":"+str(SERVER_PORT)+"/api/room/video"
API_POST_MSG = "http://"+SERVER_HOST+":"+str(SERVER_PORT)+"/api/room/say"
API_LOGOUT = "http://"+SERVER_HOST+":"+str(SERVER_PORT)+"/api/auth/logout"
class ScanJam:
def __init__ (self, userid, username, room):
self.userid = userid
self.username = username
self.room = room
self.browser = browser.Browser ()
self.session = None
self.last = 0
self.login ()
def login (self):
print "getting token for", self.username
if os.path.exists("sessions/"+self.username+".session"):
f = open ("sessions/"+self.username+".session", "r")
self.session = f.read().strip()
f.close ()
return
params = { 'userid': self.userid, 'username': self.username }
f = self.browser.post(API_LOGIN, params)
api = f.read().split("\n")
if api[0] != "#@scanjam 0.2" or api[1] != "OK":
print "ERROR GETTING TOKEN"
return None
payload = api[2].split("\t")
print "GOT SESSION:", payload[2]
self.session = payload[2]
f = open ("sessions/"+self.username+".session", "w")
f.write (self.session)
f.close ()
print "sleeping"
time.sleep(0.5)
def image (self, url):
params = { 'session': self.session, 'room': self.room, 'msg': url }
f = self.browser.post(API_POST_MSG, params)
# print f.read()
time.sleep(1)
def video (self, url):
params = { 'session': self.session, 'room': self.room, 'msg': url }
f = self.browser.post(API_POST_VIDEO, params)
# print f.read()
time.sleep(1)
def poll (self):
params = { 'session': self.session, 'room': self.room, 'last': self.last }
f = self.browser.post(API_POLL, params)
if f is None:
return []
lines = f.read().split("\n")
self.last = lines[1].strip()
msgs = []
for line in lines:
r = line.split("\t")
try:
int(r[0])
if len(r) < 4:
continue
# 0 id 1 date 2 nick 3 msg
msgs.append({ 'date': r[1], 'nick': r[2], 'msg': r[3] })
except:
continue
time.sleep(1)
return msgs
def say (self, url):
params = { 'session': self.session, 'room': self.room, 'msg': url }
f = self.browser.post(API_POST_MSG, params)
time.sleep(1)
|