Skip to content

Instantly share code, notes, and snippets.

@laohyx
Created January 23, 2012 04:42
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save laohyx/1660660 to your computer and use it in GitHub Desktop.
Save laohyx/1660660 to your computer and use it in GitHub Desktop.
LaoRenren - Laohyx Renren simulation processor in Python
#!/usr/bin/python
# -*- encoding: utf-8 -*-
'''
LaoRenren 人人网模拟登录类 v0.1 2012/1/22 除夕夜
以LaoWeb.py封闭的人人网模拟登录、发状态、传照片等类。
支持保存状态,避免验证码
那些GPL就不废话了,转载修改请注明原作者。
laohyx@163.com
By Laohyx.
----------------------------------------------
使用范例
uid = "youremail@domain.com"
pwd = "pwd"
rr = LaoRenren(uid,pwd)
rr.login_interactive() # 登录
rr.upload_photo(open("overcast180.png"), "这是气象站的图标- -","366051571")
rr.save("test") # 保存登录信息
-------------
uid = "youremail@domain.com"
pwd = "pwd"
rr = LaoRenren(uid,pwd)
rr.load("test") #无需登录,直接载入登录信息
'''
from LaoWeb import LaoWeb, reSearch, unescape
import sys,json
reload(sys)
sys.setdefaultencoding('utf-8')
class LaoRenren:
def __init__(self,username,password):
self.web = LaoWeb()
self.username = username
self.password = password
self.homeurl = None
def login_interactive(self):
'''
交互式登录,如果出现验证码,将提示输入,图片保存在captcha.png中。
'''
url = "http://3g.renren.com/login.do?autoLogin=true&fx=0"
self.web.get(url)
data = {"origURL":"",
"lbskey":reSearch(r'name="lbskey" value="(.*?)"',self.web.html),
"ref":reSearch(r'name="ref" value="(.*?)"', self.web.html),
"email":self.username,
"password":self.password,
"login":"登录"}
url = "http://3g.renren.com/login.do?autoLogin=true"
self.web.post(url, data)
while self.web.html.find("验证码") > -1:
data = {"origURL":"",
"lbskey":reSearch(r'name="lbskey" value="(.*?)"',self.web.html),
"ref":reSearch(r'name="ref" value="(.*?)"', self.web.html),
"email":self.username,
"password":self.password,
"verifykey":reSearch(r'name="verifykey" value="(.*?)"', self.web.html),
"login":"登录"}
imgurl = reSearch(r'src="(.*?)" alt="此处为验证码"', self.web.html)
imgurl = "http://3g.renren.com" + imgurl
f = open("captcha.png","wb")
f.write(self.web.get(imgurl))
f.close()
code = raw_input("Captcha (at 'captcha.png'):")
data['verifycode'] = code.decode("utf-8")
self.web.post(url, data)
self.homeurl = self.web.response.geturl()
self.sid = reSearch(r'sid=(.*?)&',self.homeurl)
return True
def save(self,mark=None):
'''
将人人网登录状态保存在 USERNAME_MARK.cookie 与 USERNAME_MARK.json中。
'''
if mark == None:
mark = ""
self.web.cookie.save("%s_%s.cookie" % (self.username,mark))
info = {"sid":self.sid}
info_str = json.dumps(info)
f = open("%s_%s.json" % (self.username,mark),"w")
f.write(info_str)
f.close()
def load(self,mark=None):
'''
读取本地保存的人人网登录状态。
'''
if mark == None:
mark = ""
self.web.cookie.load("%s_%s.cookie" % (self.username,mark))
f = open("%s_%s.json" % (self.username,mark),"r")
info_str = f.read()
info = json.loads(info_str)
self.sid = info['sid']
def set_status(self,status):
'''
更新状态
'''
self.web.get(self.homeurl)
url = unescape(reSearch(r'action="(.*?)"', self.web.html))
data = {"sour":"home",
"status":status,
"pid":"",
"update":"发布"}
self.web.post(url, data)
return True
def upload_photo(self,fp,description,aid = None):
'''
上传照片。renren.upload_photo(open('photo.png'),'这是一张照片')
aid为相册id,如果没有将上传到手机相册。
'''
url = "http://3g.renren.com/album/wuploadphoto.do?&sid=" + self.sid
self.web.get(url)
data = {"post":"上传照片","theFile":fp,"description":description}
if aid == None:
data["albumid"]= reSearch(r'value="(.*?)" selected="selected"',self.web.html)
else:
data["albumid"]= aid
url = "http://3g.renren.com/album/wuploadphoto.do?type=3&sid=" + self.sid
self.web.upload(url, data)
return True
def main():
uid = "youremail@domain.com"
pwd = "pwd"
rr = LaoRenren(uid,pwd)
# rr.login_interactive()
# rr.save("test")
rr.load("test")
rr.upload_photo(open("overcast180.png"), "这是气象站的图标- -","366051571")
# rr.web.cookie.save("cookie.txt")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment