我是靠谱客的博主 迷你宝马,最近开发中收集的这篇文章主要介绍linux推送微信消息,自动推送微信公共账号群消息 - Python/Ruby/Perl/PHP - LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区! - ...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本帖最后由 凉白开 于 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运维与开源架构技术交流社区! - ...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部