python获取微信公共平台消息列表和用户头像

转载需注明原文地址:http://blog.csdn.net/btyh17mxy/article/details/25207889

刚写的模拟登陆的方式从获取微信公众平台消息列表和用户头像的库,之后还会继续增加相关功能,github地址https://github.com/btyh17mxy/wxwall

#!/usr/bin/env python
# coding: UTF-8
import json
import hashlib
import re
import random
import json
import requests
import logging
DEBUG_LEVEL = logging.DEBUG
try:
    import colorizing_stream_handler
    root = logging.getLogger()
    root.setLevel(DEBUG_LEVEL)
    root.addHandler(colorizing_stream_handler.ColorizingStreamHandler())
except Exception, e:
    print ‘can not import colorizing_stream_handler, using logging.StreamHandler()‘
    root = logging.getLogger()
    root.setLevel(DEBUG_LEVEL)
    root.addHandler(logging.StreamHandler())

‘‘‘base exception class.
‘‘‘
class WeixinPublicError(Exception):
    pass

‘‘‘raise when cookies expired.
‘‘‘
class WeixinNeedLoginError(WeixinPublicError):
    pass

‘‘‘rasie when unenable to login.
‘‘‘
class WeixinLoginError(WeixinPublicError):
    pass

class WeixinPublic(object):

    def __init__(self, account, pwd, token = None, cookies = None, ifencodepwd = False):
        self.account = account
        if ifencodepwd:
            self.pwd = pwd
        else:
            self.pwd = hashlib.md5(pwd).hexdigest()
        self.wx_cookies = cookies
        self.lastmsgid = 0
        self.token = token 

        if self.token == None or self.wx_cookies == None:
            self.token = ‘‘
            self.wx_cookies = ‘‘
            self.login()

    ‘‘‘login to weichat, get token and cookies.

    Raise:
        WeixinLoginError, when can not get token from respond.
    ‘‘‘
    def login(self):
        url = ‘https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN‘
        payload = {
                ‘username‘ : self.account,
                ‘imgcode‘ : ‘‘,
                ‘f‘ : ‘json‘,
                ‘pwd‘ : self.pwd,
                }
        headers = {
                ‘x-requested-with‘ : ‘XMLHttpRequest‘,
                ‘referer‘ : ‘https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN‘,
                }

        r = requests.post(url, data = payload, headers = headers)

        logging.info(‘------login------‘)
        logging.debug("respond:\t%s"%r.text)

        s = re.search(r‘token=(\d+)‘, r.text)
        if not s:
            logging.error(‘Login Error!!!‘)
            raise Exception("Login error.")
        self.token = int(s.group(1))
        logging.debug(‘token:\t%d‘%self.token)

        self.wx_cookies = ‘‘
        for cookie in r.cookies:
            self.wx_cookies += cookie.name + ‘=‘ + cookie.value + ‘;‘
        logging.debug(‘cookies:\t%s‘%self.wx_cookies)
        logging.info(‘------end login------‘)

    ‘‘‘get message list.

    raise:
        WeixinNeedLoginError, when need re-login.

    returns:
        messages in dict.
    ‘‘‘
    def get_msg_list(self):
        logging.info(‘------get_msg_list------‘)
        url = ‘https://mp.weixin.qq.com/cgi-bin/message?t=message/list&token=%s&count=20&day=7‘%self.token
        payload = {
                ‘t‘:‘message/list‘,
                ‘token‘:self.token,
                ‘count‘:20,
                ‘day‘:7,
                }
        headers = {
                ‘x-requested-with‘ : ‘XMLHttpRequest‘,
                ‘referer‘ : ‘https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN‘,
                ‘cookie‘ : self.wx_cookies,
                }

        r = requests.get(url, data = payload, headers = headers)

        c = "".join(r.text.split())
        s =  re.search(r‘list:\((.*)\).msg_item‘, c)
        if s == None:
            logging.error(‘need re-login‘)
            raise WeixinNeedLoginError(‘need re-login‘)
        else:
            msg_list =  s.group(1)
        logging.debug(‘msg_list:\t%s‘%msg_list)
        return msg_list
        logging.info(‘------end get_msg_list------‘)

    ‘‘‘get user icon.

    Args:
        fakeid.
        uri, local uri to store this img.
    ‘‘‘
    def get_user_icon(self, fakeid = 1155750780, uri = ‘‘):
        logging.info(‘------get_user_icon------‘)
        url = "https://mp.weixin.qq.com/misc/getheadimg"
        payload = {
                ‘token‘:self.token,
                ‘fakeid‘:fakeid,
                }
        headers = {
                ‘Cookie‘:self.wx_cookies,
                }

        r = requests.get(url, params = payload, headers = headers)
        respond_headers = r.headers
        if ‘content-type‘ in respond_headers.keys() and not respond_headers[‘content-type‘] == ‘image/jpeg‘:
            logging.error(‘download user icon error, need re-login.‘)
            raise WeixinNeedLoginError(‘download user icon error, need re-login.‘)

        if uri == ‘‘:
            f = open(‘%d.jpg‘%(fakeid),‘wb+‘)
        else:
            f = open(‘%s/%d.jpg‘%(uri, fakeid),‘wb+‘)
        f.write(r.content)
        f.close()
        logging.info(‘------end get_user_icon------‘)

if __name__ == ‘__main__‘:
    weixin = WeixinPublic("微信公众平台账户名","密码")
    weixin.get_msg_list()
    weixin.get_user_icon()

python获取微信公共平台消息列表和用户头像,布布扣,bubuko.com

时间: 2024-12-24 09:23:25

python获取微信公共平台消息列表和用户头像的相关文章

微信公共平台消息回复类

<?php/** * 微信公共平台消息回复类 * * */class BBCweixin{  private $APPID="******"; private $APPSECRET="******"; /*  *文本消息回复  *@param array object  *@param string content  *@return string  */ public function resText($object,$content,$flag=0){  

爬虫-微信公众平台消息获取

帮朋友抓取微信公众平台的用户评论信息. 下面只说核心的部分,怎么获取评论信息. 查看HTML代码,没有发现关于评论部分的标签.看来是用JS动态生成的,但是查找ajax请求也没有找到哪里有返回数据. 最后搜索一下,原来是在这里,很直白的写在了JS里: <script type="text/javascript"> wx.cgiData = { total_count : 91, latest_msg_id : '200325222', count : "20&quo

Python+django接入微信公共平台无法使用中文

使用Python语言和Django框架接入微信公共平台. 腾讯官方说明平台接入时中文使用的是UTF-8编码,于是,我们将views.py文件设置成了utf-8的编码,即:#coding:utf-8,我们能接收和正常处理微信服务器post过来的中文消息,但是我们没办法return中文回去,手机微信提示"该公共账号暂时无法提供服务,请稍后再试".也就是我们能接收人家的中文,没办法给人家返回中文. 这里大家都想到是Python编码问题,找问题的方向大多是使用decode()和encode()

微信公共平台开发-(.net实现)3--发送文本消息

最近,项目这边比较忙,没来得及续写,哎,先吐吐槽吧,在这个周六还得来上班,以后每个周六多要上,一天的滋味真有点受不鸟呀.还不习惯ing... 嗯,别的不说了现在开始接着上次http://www.cnblogs.com/QLJ1314/p/3838058.html  获取ACCESSTOKEN,开始吧,接下来我们就写发送文本消息吧. 首先建立一个微信消息实体类. 1 class wxmessage 2 { 3 public string FromUserName { get; set; } 消息发

微信公共平台开发-(.net实现)4--发送图文消息

之前说了让微信发送给关注我们的粉丝普通的文本信息,下面我们来看看如何发送图文信息,需要注意的是这里说的是,让微信发给我们,而不是我们拍个图片发给微信处理,上传图片在以后的再讲.下面是发送图文消息的函数,涉及title(标题),description(摘要),picurl(图片),链接 (url)几个关键的参数: 格式如下:(此为多图文形式) 其实格式呢就和上篇http://www.cnblogs.com/QLJ1314/p/3855371.html格式一样. 1 protected string

ASP.NET MVC 接入微信公共平台

ASP.NET MVC 接入微信公共平台 申请微信公共账号 既然要接入微信公共平台,微信公共号是必须的(当然如果只是测试的话也可以申请微信公共平台接口测试账号),来这里微信公共平台 申请微信公共号(注:申请微信公共号不能用已绑定微信的邮箱),微信公共平台有自己的官方文档,官方文档有不少资料,可以多看看,开发者模式默认是关闭的,需要配置并启用,如下图: URL即你的网站处理微信模块,必须是HTTP://开头的网站,笔者自己之前接入几天一直失败,最终发现是因为自己网站加密了用的是HTTPS,这个需要

微信公共平台开发源码

public partial class Index : System.Web.UI.Page { public string token = "AAA";//自己的 token protected void Page_Load(object sender, EventArgs e) { #region ////------签名验证 //string echostr = Request["echostr"].ToString(); //WriteLog(echost

1.获取微信公众平台access_token

微信公众平台接入指南见 微信官方文档 :https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的acces

微信公众平台消息接口开发(32)空气质量指数查询

原文:微信公众平台消息接口开发(32)空气质量指数查询 微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 空气质量指数 PM2.5 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/05/30/weixin-if32-air-quality.html 一.获取原版数据 在中国环境监测总站http://www.cnemc.cn/ 可以找到全国城市空气质量实时发布平台,其地址为 http://113.108.142.147:20