Advertisement
Guest User

SO_Chatters.py

a guest
Mar 29th, 2015
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | None | 0 0
  1. #! /usr/bin/env python
  2.  
  3. ''' Who's logged into the sopython Chatroom
  4.  
  5.    Written by PM 2Ring 2015.03.22
  6. '''
  7.  
  8. import sys, urllib, re, time
  9.  
  10. sopython_url = 'http://chat.stackoverflow.com/rooms/6/python'
  11.  
  12. def main():
  13.     #Get maximum age of last post in hours from command line
  14.     maxage = float(sys.argv[1]) if len(sys.argv) > 1 else 1
  15.  
  16.     #Convert to seconds
  17.     maxage *= 3600.0
  18.  
  19.     url = sopython_url
  20.     print 'Fetching sopython Chatroom data...\n'
  21.  
  22.     try:
  23.         fd = urllib.urlopen(url)
  24.         data = fd.read()
  25.     except IOError, s:
  26.         print >>sys.stderr, s, '\nAborting'
  27.         raise SystemExit, 1
  28.     finally:
  29.         fd.close()
  30.  
  31.     try:
  32.         start = data.index('CHAT.RoomUsers.initPresent([')
  33.         finish = data.index(']);', start)
  34.     except ValueError:
  35.         print >>sys.stderr, "Names list not found!"
  36.         raise SystemExit, 1
  37.  
  38.     data = data[start:finish+1]
  39.     #print data
  40.     extract(data, maxage)
  41.  
  42.  
  43. def extract(data, maxage):
  44.     timefmt = '%X %x'
  45.  
  46.     diamond = u'\u25C6'
  47.     extras = {'owner': '*', 'moderator': diamond}
  48.  
  49.     pat = r'\{.* name: \("([^"]+)"\), .* reputation: (\d+), last_post: (\d+)(.+)*\}'
  50.     data = re.findall(pat, data)
  51.  
  52.     now = time.time()
  53.     print 'People logged in at %s\n' % time.strftime(timefmt)
  54.  
  55.     #Get data for all posters who's last post time is within age limit
  56.     newdata = []
  57.     max_name_width = 0
  58.     for name, rep, lptime, tail in data:
  59.         lptime = float(lptime)
  60.         if now - lptime <= maxage:
  61.             timestr = time.strftime(timefmt, time.localtime(lptime))
  62.             name = name.decode('unicode-escape') + ' '
  63.             tail = ' '.join([extras[k] for k in extras if k in tail])
  64.             newdata.append((name, timestr, rep, tail))
  65.             max_name_width = max(max_name_width, len(name))
  66.  
  67.     max_name_width += 2
  68.     print '%-s %-17s %-6s' % ('Name'.ljust(max_name_width), 'Last post', 'Rep')
  69.     for name, timestr, rep, tail, in newdata:
  70.         print '%-s %-17s %6s %s' % (name.ljust(max_name_width,'.'), timestr, rep, tail)
  71.  
  72.  
  73. if __name__ == '__main__':
  74.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement