自动推送微信公共账号群消息

原创
2014/05/04 11:00
阅读数 3.5K

微信公众平台的基础接口没有推送群消息的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('ttlsa.com')
    #print 'response: singlesend',str(res)


展开阅读全文
打赏
4
76 收藏
分享
加载中

引用来自“琥哥”的评论

很容易被封号的!lz小心啊!

为啥?
2014/05/07 09:16
回复
举报
很容易被封号的!lz小心啊!
2014/05/05 16:04
回复
举报
这个早已经做过了。。但是现在腾讯已经出限制了。。发送条数达到一定会有验证码。。而且被发现用软件这样群发会封号的。不敢搞了。
2014/05/04 14:43
回复
举报
小运博主

引用来自“心中彩虹”的评论

想什么,有什么!
楼主介绍的内容,我得好好试试,如果可行,请你吃大餐!
大家作证
2014/05/04 14:30
回复
举报
想什么,有什么!
楼主介绍的内容,我得好好试试,如果可行,请你吃大餐!
2014/05/04 14:29
回复
举报
小运博主
有任何问题请大家留言
2014/05/04 11:09
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742
0
2014/05/04 11:08
回复
举报
更多评论
打赏
8 评论
76 收藏
4
分享
返回顶部
顶部