概述
本帖最后由 凉白开 于 2014-5-4 10:59 编辑
微信公众平台的基础接口没有推送群消息的api(高级接口貌似也没有),所以用python写了个程序模拟微信公众平台的post请求来实现这个功能,附带实现了发送消息给单个用户。
需要的模块
requests:给人用的HTTP请求模块,python自带的urllib和urllib2实在是难用。requests支持会话模式,意思就是所有的请求都用一个实例,共享同一个cookies,十分方便。具体参考官方文档(中文):http://cn.python-requests.org/zh_CN/latest/index.html
实现
requests.seesion()就是会话模式
首先设置主请求头
然后login()函数登录,获取token。发送的密码用md5加密
最后masssend()函数发送群消息
singlesend()函数用来给单人发送消息,形参tofakeid不是用户的微信号,并且和api中"FromUserName 发送方帐号"也不一样,这样就没办法将用户直接关联起来,只能手动观察绑定-。-
ps:如果在本机浏览器上登录了微信公众平台,然后在另一个电脑上运行脚本,可能会导致脚本登录失败,解决的办法是退出本机登录。
#coding:utf-8
"""
微信公众平台管理界面
"""
import requests
import hashlib
import random
import ttlsa
import json
import sys
session=requests.session()
session.headers={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3',
'Accept-Encoding': 'deflate',
'DNT': '1',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://mp.weixin.qq.com/',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Cache-Control': 'no-cache'
}
token=None
def login(username,pwd):
"""登录"""
#正确响应:{"base_resp":{"ret":0,"err_msg":"ok"},"redirect_url":"/cgi-bin/home?t=home/index&lang=zh_CN&token=898262162"}
global token
pwd=hashlib.md5(pwd).hexdigest()
url='https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN'
data={'f':'json',
'imgcode':'',
'pwd':pwd,
'username':username}
res=session.post(url,data)
print 'response: login',res.text
j=json.loads(res.text)
status=j['base_resp']['err_msg']
if status=='ok':
token=j['redirect_url'].split('=')[-1]
return True
return False
def singlesend(tofakeid,content):
"""发送消息给单个人
多次发送消息可能需要发送心跳信息(未测试)"""
#正确响应:{"base_resp":{"ret":0,"err_msg":"ok"}}
url='https://mp.weixin.qq.com/cgi-bin/singlesend'
data={'ajax':'1',
'content':content,
'f':'json',
'imgcode':'',
'lang':'zh_CN',
'random':str(random.random()),
't':'ajax-response',
'tofakeid':tofakeid,
'token':token,
'type':'1',
}
res=session.post(url,data)
print 'response: singlesend',res.text
j=json.loads(res.text)
status=j['base_resp']['err_msg']
if status=='ok':
return True
return False
def masssend(content):
"""群发消息"""
#正确响应:{"ret":"0", "msg":"ok"}
url='https://mp.weixin.qq.com/cgi-bin/masssend'
data={'ajax':'1',
'city':'',
'content':content,
'country':'',
'f':'json',
'groupid':'-1',
'imgcode':'',
'lang':'zh_CN',
'province':'',
'random':str(random.random()),
'sex':'0',
'synctxnews':'0',
'synctxweibo':'0',
't':'ajax-response',
'token':token,
'type':'1'
}
res=session.post(url,data)
print 'response: masssend',res.text
j=json.loads(res.text)
if j['msg']=='ok':
return True
return False
if __name__=='__main__':
res=login('username','password')
print 'response: login',res
if not res:
sys.exit()
#群发
res=masssend('呵呵')
print 'response: masssend',str(res)
#发送给单人
#res=singlesend('尼玛蛋')
#print 'response: singlesend',str(res)
文章标题: 自动推送微信公共账号群消息
本文地址: http://www.ttlsa.com/python/wechat-auto-push-group-message/
最后
以上就是迷你宝马为你收集整理的linux推送微信消息,自动推送微信公共账号群消息 - Python/Ruby/Perl/PHP - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - ...的全部内容,希望文章能够帮你解决linux推送微信消息,自动推送微信公共账号群消息 - Python/Ruby/Perl/PHP - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - ...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复