校内新鲜事洁癖

794阅读 0评论2011-12-08 坏坏小丸子
分类:

用来处理校内新鲜事强迫症,定期清空新鲜事,解脱了。

首次登录,下载验证码图片,手动输入。
之后利用cookie文件登录。

LOG_FILE_NAME='log文件' 
COOKIE_FILE_NAME='cookie保存文件' 
RENREN_EMAIL='用户名' 
RENREN_PASSWORD='密码'
LOCAL_VERIFYCODE_FILENAME='验证码下载文件名.jpg'


代码:
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-

  3. '''
  4. Time-stamp:
  5. '''
  6. import urllib
  7. import urllib2
  8. import cookielib
  9. import sys
  10. import time
  11. import thread
  12. import commands
  13. import re


  14. def loaded_the_cookie(cookie, file_name = 'cookie.txt'):
  15.     """
  16.     
  17.     Arguments:
  18.     - `file_name`:
  19.     - `cookie`:
  20.     
  21.     """
  22.     try:
  23.         cookie.load(file_name)
  24.     except IOError, e:
  25.         print e
  26.         return False
  27.     except Exception, e:
  28.         print e
  29.         return False
  30.     return True
  31.     pass


  32. def login(email, password):
  33.     """
  34.     Arguments:
  35.     - `email`:
  36.     - `password`:
  37.     """
  38.     post_parameters = get_post_parameters("")
  39.     
  40.     verifycode_src = post_parameters['icode_src']
  41.     file_name = download_verifycode(verifycode_src)

  42.     verifycode = send_msg_to_input('验证码下载完毕['+file_name+'],输入验证码:')
  43.     post_parameters['icode'] = verifycode

  44.     post_parameters['password']=password
  45.     post_parameters['email']=email
  46.     post_parameters['domain']='renren.com'

  47.     post_parameters['origURL']=''
  48.     post_parameters['key_id']='1'
  49.     post_parameters['autoLogin']='true'
  50.     
  51.     return do_login_success(post_parameters)
  52.         

  53. def send_msg_to_input(msg):
  54.     """
  55.     Arguments:
  56.     - `msg`:
  57.     """
  58.     return raw_input(msg)

  59. LOCAL_VERIFYCODE_FILENAME='default.jpg'
  60. def download_verifycode(src):
  61.     """
  62.     Arguments:
  63.     - `src`:
  64.     """
  65.     response = send_request(src)
  66.     f = open(LOCAL_VERIFYCODE_FILENAME,'w')
  67.     f.write(response)
  68.     f.close()
  69.     return LOCAL_VERIFYCODE_FILENAME
  70.     

  71. POST_PARAMETERS_PATTERN={
  72.     '_rtk':{'re':"get_check_x:'[0-9a-z]+'",'split':"'",'offset':1},
  73.     'requestToken':{'re':"get_check:'[0-9]+'",'split':"'",'offset':1},
  74.     'icode_src':{'re':'id="verifyPic_login".*src="[^"]+"','split':'"','offset':3},
  75.     }
  76. def get_post_parameters(url):
  77.     """
  78.     """
  79.     response = send_request(url)
  80.     post_parameters = {}
  81.     for key, pattern in POST_PARAMETERS_PATTERN.items():
  82.         for item in re.findall(pattern['re'], response):
  83.             post_parameters[key] = item.split(pattern['split'])[pattern['offset']]
  84.         
  85.     return post_parameters


  86.     
  87. def do_login_success(post_parameters):
  88.     """
  89.     
  90.     Arguments:
  91.     - `post_parameters`:
  92.     """
  93.     response = send_request("", post_parameters)
  94.     if 'code' in response and 'true' in response:
  95.         return True
  96.     return False
  97.     

  98. def send_request(url, post_parameters = None):
  99.     """
  100.     
  101.     Arguments:
  102.     - `url`:
  103.     - `post_data`:
  104.     """
  105.     if "http://" not in url:
  106.         url = "http://" + url
  107.     if post_parameters is not None:
  108.         post_data = urllib.urlencode(post_parameters)
  109.         req = urllib2.Request(url,post_data)
  110.     else:
  111.         req = urllib2.Request(url)
  112.         
  113.     resp = urllib2.urlopen(req)
  114.     result = resp.read()

  115.     return result


  116. def bind_handle_for_http(cookie):
  117.     """

  118.     """
  119.     opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
  120.     urllib2.install_opener(opener)


  121. def clear_news():
  122.     """
  123.     """
  124.     post_parameters = get_post_parameters("")
  125.     post_parameters['t'] = 'a'
  126.     return send_request("",post_parameters)
  127.     
  128.     
  129. def LOG(log, file_handle):
  130.     """
  131.     
  132.     Arguments:
  133.     - `log`:
  134.     - `file_handle`:
  135.     """
  136.     file_handle.write(log)
  137.     file_handle.flush()

  138. LOG_FILE_NAME='log.db'
  139. COOKIE_FILE_NAME='default.cookie'
  140. RENREN_EMAIL='***'
  141. RENREN_PASSWORD='***'



  142. if __name__ == '__main__':
  143.     cookie = cookielib.LWPCookieJar()
  144.     need_login = False
  145.     
  146.     if not loaded_the_cookie(cookie, COOKIE_FILE_NAME):
  147.         need_login = True
  148.         
  149.     bind_handle_for_http(cookie)
  150.     
  151.     if need_login:
  152.         while True:
  153.             if not login(RENREN_EMAIL, RENREN_PASSWORD):
  154.                 send_msg_to_input('登录失败,回车重试:')
  155.             else:
  156.                 cookie.save(COOKIE_FILE_NAME)
  157.                 break
  158.     f = open(LOG_FILE_NAME,'a')
  159.     while 1==1:
  160.         clear_news()
  161.         LOG(time.asctime() + '::cleared.\n',f)
  162.         time.sleep(10)
上一篇:二分查找排序,希尔排序,merge排序,二分排序
下一篇:让你的网页打开速度更快的九种技巧