Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python
- ''' Who's logged into the sopython Chatroom
- Written by PM 2Ring 2015.03.22
- '''
- import sys, urllib, re, time
- sopython_url = 'http://chat.stackoverflow.com/rooms/6/python'
- def main():
- #Get maximum age of last post in hours from command line
- maxage = float(sys.argv[1]) if len(sys.argv) > 1 else 1
- #Convert to seconds
- maxage *= 3600.0
- url = sopython_url
- print 'Fetching sopython Chatroom data...\n'
- try:
- fd = urllib.urlopen(url)
- data = fd.read()
- except IOError, s:
- print >>sys.stderr, s, '\nAborting'
- raise SystemExit, 1
- finally:
- fd.close()
- try:
- start = data.index('CHAT.RoomUsers.initPresent([')
- finish = data.index(']);', start)
- except ValueError:
- print >>sys.stderr, "Names list not found!"
- raise SystemExit, 1
- data = data[start:finish+1]
- #print data
- extract(data, maxage)
- def extract(data, maxage):
- timefmt = '%X %x'
- diamond = u'\u25C6'
- extras = {'owner': '*', 'moderator': diamond}
- pat = r'\{.* name: \("([^"]+)"\), .* reputation: (\d+), last_post: (\d+)(.+)*\}'
- data = re.findall(pat, data)
- now = time.time()
- print 'People logged in at %s\n' % time.strftime(timefmt)
- #Get data for all posters who's last post time is within age limit
- newdata = []
- max_name_width = 0
- for name, rep, lptime, tail in data:
- lptime = float(lptime)
- if now - lptime <= maxage:
- timestr = time.strftime(timefmt, time.localtime(lptime))
- name = name.decode('unicode-escape') + ' '
- tail = ' '.join([extras[k] for k in extras if k in tail])
- newdata.append((name, timestr, rep, tail))
- max_name_width = max(max_name_width, len(name))
- max_name_width += 2
- print '%-s %-17s %-6s' % ('Name'.ljust(max_name_width), 'Last post', 'Rep')
- for name, timestr, rep, tail, in newdata:
- print '%-s %-17s %6s %s' % (name.ljust(max_name_width,'.'), timestr, rep, tail)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement