天天看点

python 网页微信_python-web微信实现

importreimporttimeimportjsonimportrequestsfrom django.shortcuts importrenderfrom django.shortcuts importHttpResponse#当前时间戳

CURRENT_TIME =None

QCODE=None

LOGIN_COOKIE_DICT={}

TICKET_COOKIE_DICT={}

TICKET_DICT={}

TIPS= 1USER_INIT_DATA={}

BASE_URL= "http://wx.qq.com"BASE_SYNC_URL= "https://webpush.weixin.qq.com"

def login(request): #登录获取二维码

base_qcode_url = 'https://login.wx.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&

globalCURRENT_TIME

CURRENT_TIME=str(time.time())

q_code_url=base_qcode_url.format(CURRENT_TIME)

response=requests.get(q_code_url)#二维码后缀

code = re.findall('uuid = "(.*)";',response.text)[0]globalQCODE

QCODE=codereturn render(request, 'login.html', {'code': code})def long_polling(request): #获取登录的信息

print('polling....')

ret= {'status': 408, 'data': None}#https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=IZpsHyzTNw==&tip=1&r=-897465901&_=1486956149964

#408,201,200

try:globalTIPS

base_login_url= 'https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid={0}&tip={1}&r=-897465901&_={2}'login_url=base_login_url.format(QCODE,TIPS,CURRENT_TIME)

response_login=requests.get(login_url)if "window.code=201" inresponse_login.text:

TIPS=0

avatar= re.findall("userAvatar = '(.*)';",response_login.text)[0]

ret['data'] =avatar

ret['status'] = 201

elif 'window.code=200' inresponse_login.text:#扫码点击确认后,获取cookie

LOGIN_COOKIE_DICT.update(response_login.cookies.get_dict())

redirect_uri= re.findall('redirect_uri="(.*)";', response_login.text)[0]globalBASE_URLglobalBASE_SYNC_URLif redirect_uri.startswith('https://wx2.qq.com'):

BASE_URL= 'https://wx2.qq.com'BASE_SYNC_URL= 'https://webpush.wx2.qq.com'

else:

BASE_URL= "http://wx.qq.com"BASE_SYNC_URL= "https://webpush.weixin.qq.com"redirect_uri+= '&fun=new&version=v2&

#获取票据,Cookie,返回值

response_ticket = requests.get(redirect_uri, cookies=LOGIN_COOKIE_DICT)

TICKET_COOKIE_DICT.update(response_ticket.cookies.get_dict())print(response_ticket.text)from bs4 importBeautifulSoup

soup= BeautifulSoup(response_ticket.text,'html.parser')for tag insoup.find():

TICKET_DICT[tag.name]=tag.string

ret['status'] = 200

#https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AZfYKn7CWTeZE_iMTHw[email protected]_0&uuid=IeFZHVi6Jw==&lang=zh_CN&scan=1

#https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticke[email protected]_0&uuid=we1gq4TyyA==&

exceptException as e:print(e)returnHttpResponse(json.dumps(ret))defindex(request):#初始化用户基本信息

#https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?r=-909239606&lang=zh_CN&pass_ticket=Tpc2XEec%252BJ0q2qNRw6nqWzGSsQ3jM2LZtBCVJZfjvMTDxjiyJ9mO5eRtCNOveeXO

user_init_url= '%s/cgi-bin/mmwebwx-bin/webwxinit?pass_ticket=%s&r=%s' % (BASE_URL, TICKET_DICT['pass_ticket'], int(time.time()))

form_data={'BaseRequest': {'DeviceID': 'e531777446530354','Sid': TICKET_DICT['wxsid'],'Skey': TICKET_DICT['skey'],'Uin': TICKET_DICT['wxuin']

}

}

all_cookie_dict={}

all_cookie_dict.update(LOGIN_COOKIE_DICT)

all_cookie_dict.update(TICKET_COOKIE_DICT)

response_init= requests.post(user_init_url, json=form_data, cookies=all_cookie_dict)

response_init.encoding= 'utf-8'user_init_data=json.loads(response_init.text)#for k,v in user_init_data.items():

#print(k,v)

USER_INIT_DATA.update(user_init_data)"""form_data = {

'BaseRequest':{

'DeviceID': 'e531777446530354',

'Sid': TICKET_DICT['wxsid'],

'Skey': TICKET_DICT['skey'],

'Uin': TICKET_DICT['wxuin']

}

}

all_cookie_dict = {}

all_cookie_dict.update(LOGIN_COOKIE_DICT)

all_cookie_dict.update(TICKET_COOKIE_DICT)

response_init = requests.post(user_init_url,json=form_data,)

response_init.encoding = 'utf-8'

print(response_init.text)"""

return render(request, 'index.html',{'data': user_init_data})defcontact_list(request):"""获取联系人列表

:param request:

:return:"""

#https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?lang=zh_CN&pass_ticket={0}&r={1}&seq=0&skey={2}

base_url = "{0}/cgi-bin/mmwebwx-bin/webwxgetcontact?url= base_url.format(BASE_URL, TICKET_DICT['pass_ticket'], str(time.time()), TICKET_DICT['skey'])

all_cookie_dict={}

all_cookie_dict.update(LOGIN_COOKIE_DICT)

all_cookie_dict.update(TICKET_COOKIE_DICT)

response= requests.get(url,cookies=all_cookie_dict)

response.encoding= 'utf-8'contact_list_dict=json.loads(response.text)return render(request, 'contact_list.html',{'obj': contact_list_dict})def send_msg(request): #发送信息

from_user_id= USER_INIT_DATA['User']['UserName']

to_user_id= request.POST.get('user_id')

msg= request.POST.get('user_msg')

send_url= BASE_URL + "/cgi-bin/mmwebwx-bin/webwxsendmsg? + TICKET_DICT['pass_ticket']

form_data={'BaseRequest': {'DeviceID': 'e531777446530354','Sid': TICKET_DICT['wxsid'],'Skey': TICKET_DICT['skey'],'Uin': TICKET_DICT['wxuin']

},'Msg':{"ClientMsgId": str(time.time()),"Content": '%(content)s',"FromUserName": from_user_id,"LocalID": str(time.time()),"ToUserName": to_user_id,"Type": 1},'Scene':0

}importjson#字符串

form_data_str =json.dumps(form_data)#进行格式化

form_data_str = form_data_str %{'content':msg}#转换成字节

form_data_bytes = bytes(form_data_str,encoding='utf-8')

all_cookie_dict={}

all_cookie_dict.update(LOGIN_COOKIE_DICT)

all_cookie_dict.update(TICKET_COOKIE_DICT)

response= requests.post(send_url, data=form_data_bytes, cookies=all_cookie_dict, headers={'Content-Type': 'application/json'})print(response.text)return HttpResponse('ok')def get_msg(request):#接收信息

sync_url = BASE_SYNC_URL + "/cgi-bin/mmwebwx-bin/synccheck"sync_data_list=[]for item in USER_INIT_DATA['SyncKey']['List']:

temp= "%s_%s" % (item['Key'], item['Val'])

sync_data_list.append(temp)

sync_data_str= "|".join(sync_data_list)

nid=int(time.time())

sync_dict={"r": nid,"skey": TICKET_DICT['skey'],"sid": TICKET_DICT['wxsid'],"uin": TICKET_DICT['wxuin'],"deviceid": "e531777446530354","synckey": sync_data_str

}

all_cookie={}

all_cookie.update(LOGIN_COOKIE_DICT)

all_cookie.update(TICKET_COOKIE_DICT)

response_sync= requests.get(sync_url, params=sync_dict, cookies=all_cookie)print(response_sync.text)if 'selector:"2"' inresponse_sync.text:

fetch_msg_url= "%s/cgi-bin/mmwebwx-bin/webwxsync?sid=%s&skey=%s& % (BASE_URL, TICKET_DICT['wxsid'], TICKET_DICT['skey'], TICKET_DICT['pass_ticket'])

form_data={'BaseRequest': {'DeviceID': 'e531777446530354','Sid': TICKET_DICT['wxsid'],'Skey': TICKET_DICT['skey'],'Uin': TICKET_DICT['wxuin']

},'SyncKey': USER_INIT_DATA['SyncKey'],'rr': str(time.time())

}

response_fetch_msg= requests.post(fetch_msg_url, json=form_data)

response_fetch_msg.encoding= 'utf-8'res_fetch_msg_dict=json.loads(response_fetch_msg.text)

USER_INIT_DATA['SyncKey'] = res_fetch_msg_dict['SyncKey']for item in res_fetch_msg_dict['AddMsgList']:print(item['Content'], ":::::", item['FromUserName'], "---->", item['ToUserName'], )return HttpResponse('ok')