Created
January 23, 2012 04:42
-
-
Save laohyx/1660660 to your computer and use it in GitHub Desktop.
LaoRenren - Laohyx Renren simulation processor in Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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