Python小练习-自动登录人人发送消息并返回好友列表

主要是由urllib,urllib2,cookielib这三个模块。对这三个标准库不熟悉可以学习一下,我也不是很熟系,练习一下。

比如  urllib2 - The Missing Manual

         cookielib and ClientCookie 

主要就是模拟人人登录,通过httpfox抓包来对登录网站的过程进行分析,将密码和发送的消息post到服务器上就可以,用cookielib模块处理cookie,然后就是正则匹配的问题了。

 1 #!/usr/bin/env python
 2 #coding=utf-8
 3 import urllib
 4 import urllib2
 5 import cookielib
 6 import re
 7 from sgmllib import SGMLParser
 8 from datetime import *
 9 class Loginrenren(SGMLParser): 
10     friendlist = [] 
11     header = {'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:16.0) Gecko/20100101 Firefox/16.0'} 
12     def __init__(self,username,password):
13         SGMLParser.__init__(self)
14         self.username = username
15         self.password = password
16         cj = cookielib.CookieJar()
17         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
18         urllib2.install_opener(opener)
19     def login(self):
20         '''login in and return uid'''
21         logpage = "http://www.renren.com/Login.do"
22         data = {'email':self.username,'password':self.password}
23         login_data = urllib.urlencode(data)
24         res = urllib2.Request(logpage,login_data)
25         self.file=urllib2.urlopen(res).read()
26         idPos = self.file.index("'id':'")
27         self.uid=self.file[idPos+6:idPos+15]
28         tokPos=self.file.index("get_check:'")
29         self.tok=self.file[tokPos+11:tokPos+21]
30         rtkPos=self.file.index("get_check_x:'")
31         self.rtk=self.file[rtkPos+13:rtkPos+21]
32         #html = res.read()
33         print 'login now...'
34         print "Getting user id of you now"
35         res = urllib2.urlopen("http://www.renren.com/home")
36         html = res.read()
37         uid = re.search("'ruid':'(\d+)'",html).group(1)
38         print "login and got uid successfully"
39         return uid
40     def getfriendlist(self):
41         req = urllib2.Request(url='http://friend.renren.com/myfriendlistx.do',headers = self.header)
42         result = urllib2.urlopen(req).read()
43         friend = str(re.search('friends=\[{.*}\]',result).group())
44         friendId = re.findall(r'"id":(.*?),.*?,"name":"(.*?)"',friend)
45         for f in friendId:
46             self.friendlist.append(f)
47             print f[1].decode('unicode-escape')
48     def postmessage(self,content):
49         url = "http://shell.renren.com/"+self.uid+"/status"
50         postdata = {'content':content,
51                     'hostid':self.uid,
52                     'requetToken':self.tok,
53                     '_rtk':self.rtk,
54                     'channel':'renren',
55                    }
56         log_data = urllib.urlencode(postdata)
57         req2 = urllib2.Request(url,log_data)
58         self.hax = urllib2.urlopen(req2).read()
59         print ''+datetime.now().strftime('%Y-%m-%d %H:%M:%S %p')+' 你发送了一条为 "'+content+'" 的消息'
60 users = Loginrenren('youremailaddress',"yourpassword")
61 users.login()
62 users.getfriendlist()
63 content = raw_input("请输入内容:")
64 users.postmessage(content)

requestToken和_rtk不知道怎么求,查的。

其他不说了,代码不难,忘了谁说的了,代码可以自己解释自己 - -

posted @ 2013-03-29 18:23  时光旅行的懒猫  阅读(509)  评论(0编辑  收藏  举报