django搭建微信后台——批量获取用户信息

最近在给一个服务号做后台,有各种权限的感觉真好^_^

数据库设计

这次的需求需要针对订阅用户的等级提供不同的权限等,因此需要获取所有订阅用户的信息,创建了一个简单的user类来保存每个用户,django自带的user太复杂了,而且这里也根本不需要用户自己登陆什么的。

#models.py
class SimpleUser(models.Model):
    name = models.CharField(max_length=50, null=False, blank=False)
    open_id = models.CharField(max_length=100, null=False, blank=False)
    group = models.IntegerField(default=1, blank=False, null=False)
    def __unicode__(self):
        return str(self.group) + ':' + self.name

拿到权限后可以获取的用户信息很详细,以下是微信开发的文档里面给的示例:

{
    "subscribe": 1, 
    "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
    "nickname": "Band", 
    "sex": 1, 
    "language": "zh_CN", 
    "city": "广州", 
    "province": "广东", 
    "country": "中国", 
    "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", 
   "subscribe_time": 1382694957,
   "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
   "remark": "",
   "groupid": 0
}

在这里我只需要名字和分组两个信息,openid是拉取用户信息时就需要的不用说了。其他的可以按需求保存在数据库。

拉取逻辑

根据wechat_sdk的文档,获取用户信息有两种方式:

  • 官方接口: get_followers(first_user_id=None)方法获取所有关注者的openid(列表形式),返回的json数据包如下:
{
  "total":23000,
  "count":10000,
  "data":{"
     openid":[
        "OPENID1",
        "OPENID2",
        ...,
        "OPENID10000"
     ]
   },
   "next_openid":"NEXT_OPENID1"
}

此处需要注意的是,count的最大值为10000,当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求。 参考文档:
http://mp.weixin.qq.com/wiki/3/17e6919a39c1c53555185907acf70093.html

然后遍历列表,通过get_user_info(user_id[, lang='zh_CN'])方法挨个抓取所有用户的信息。

  • 非官方接口 :get_user_list(page=0, pagesize=10, groupid=0)方法获取关注者列表,给出的返回实例是这样的:
{
    "contacts": [
        {
            "id": 2431798261,
            "nick_name": "Doraemonext",
            "remark_name": "",
            "group_id": 0
        },
        {
            "id": 896229760,
            "nick_name": "微信昵称",
            "remark_name": "",
            "group_id": 0
        }
    ]
}

信息比较少,非官方接口相当于直接使用账号密码登陆到微信后台,目前还没使用过,我采用的是第一种方法。

def get_all_user(request):
    users_data = wechat.get_followers()
    for open_id in users_data['data']['openid']:
        #print open_id
        cur_user_info = wechat.get_user_info(open_id)
        #print cur_user_info
        cur_username = cur_user_info['nickname']
        cur_group_id = cur_user_info['groupid']
        cur_simpleuser = SimpleUser(
            name = cur_username,
            open_id=open_id,
            group=cur_group_id,
            )
        cur_simpleuser.save()
    return HttpResponse(json.dumps(users_data, ensure_ascii=False), content_type='application/json')

当然这只是简单实现了抓取过程,考虑到细节还要添加新关注用户自动创建用户实例,取关用户删除用户实例,以及手动刷新用户信息等等功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值