Skip to content

Instantly share code, notes, and snippets.

@SeavantUUz
Last active January 4, 2016 08:49
Show Gist options
  • Save SeavantUUz/8597845 to your computer and use it in GitHub Desktop.
Save SeavantUUz/8597845 to your computer and use it in GitHub Desktop.
loliweibo.py
import requests
import base64
import re
import urllib
import rsa
import json
import binascii
import time
import SocketServer
import logging
username = 'yourname'
password = 'yourpass'
prelogin = '/sso/prelogin.php?entry=account&callback=sinaSSOController.preloginCallBack&su=YXhkaWFvcWkyMjAlNDBnbWFpbC5jb20%3D&rsakt=mod&client=ssologin.js(v1.4.14)&_={0}'.format(int(1000*time.time()))
logging.basicConfig(filename='weibo.log')
session = requests.Session()
url_prelogin = 'http://login.sina.com.cn{0}'.format(prelogin)
url_login = 'http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5)'
#get servertime,nonce, pubkey,rsakv
resp = session.get(url_prelogin)
json_data = re.search('\((.*)\)', resp.content).group(1)
data = json.loads(json_data)
servertime = data['servertime']
nonce = data['nonce']
pubkey = data['pubkey']
rsakv = data['rsakv']
# calc su
su = base64.b64encode(urllib.quote(username))
#calc sp
rsaPublickey= int(pubkey,16)
key = rsa.PublicKey(rsaPublickey,65537)
message = str(servertime) +'\t' + str(nonce) + '\n' + str(password)
sp = binascii.b2a_hex(rsa.encrypt(message,key))
postdata = {
'entry': 'weibo',
'gateway': '1',
'from': '',
'savestate': '7',
'userticket': '1',
'ssosimplelogin': '1',
'vsnf': '1',
'vsnval': '',
'su': su,
'service': 'miniblog',
'servertime': servertime,
'nonce': nonce,
'pwencode': 'rsa2',
'sp': sp,
'encoding': 'UTF-8',
'url': 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',
'returntype': 'META',
'rsakv' : rsakv,
}
resp = session.post(url_login,data=postdata)
login_url = re.findall('replace\("(.*)"\)',resp.content)
#print login_url
resp = session.get(login_url[0])
#print resp.content
uid = re.findall('"uniqueid":"(\d+)",',resp.content)[0]
#print uid
#url = "http://weibo.com/u/"+uid
#resp = session.get(url)
#print resp.content
def decode_content(content):
result = re.findall('<script>STK && STK.pageletM && STK.pageletM.view\((.*?)\)<\/script>',content)
for i in result:
r = i.encode("utf-8").decode('unicode_escape').encode("utf-8")
print r.replace("\/","/")
#url_search = "http://s.weibo.com/weibo/%s?topnav=1&wvr=5&b=1" % "php"
#resp = session.get(url_search)
#decode_content( resp.content )
def add_new(content,resp):
add_url = "http://weibo.com/aj/mblog/add?_wv=5&__rnd=%s770"% int(time.time())
add_data = {
'text':content,
'rank':0,
'rankid':'',
'location':'home',
'module':'stissue',
"hottopicid":"",
'_surl':'',
'pic_id':'',
'_t':0,
}
headers={}
headers ['set-cookie']= resp.headers['set-cookie']
headers['Referer'] = 'http://weibo.com/u/'+uid+'?topnav=1&wvr=5'
resp = session.post(add_url,data=add_data,headers=headers)
print resp.status_code
def parser(data):
#def select_bit(start,lst):
# return lst[start::2]
logging.info(data)
data = data.split()
header0,header1,lenth,Checksum = data[0],data[1],data[2],data[-1]
assert '0x55' == data[0] and '0xAA' == data[1]
content = data[3:-1]
content = ''.join(map(lambda x:chr(eval(x)),content))
return content.decode('gbk')
#add_new('test',resp)
class MyHandler(SocketServer.BaseRequestHandler):
def handle(self):
self.data = self.request.recv(1024)
content = parser(self.data)
add_new(content,resp)
if __name__ == "__main__":
HOST,PORT = "localhost",9945
server = SocketServer.TCPServer((HOST,PORT),MyHandler)
server.serve_forever()
@SeavantUUz
Copy link
Author

依赖requests和rsa

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment