使用 Python 实现微信公众号粉丝迁移流程


Posted in Python onJanuary 03, 2018

近日,因公司业务需要,需将原两个公众号合并为一个,即要将其中一个公众号(主要是粉丝)迁移到另一个公众号。按微信规范,同一用户在不同公众号内的 openid 是不同的,我们的业务系统不例外地记录了用户的 openid,因此,涉及到两个公众号的 openid 的转换。幸好,微信公众号平台在账号迁移描述提供了方法和API供调用,详见:

http://kf.qq.com/faq/170221aUnmmU170221eUZJNf.html

这里使用 Python 写个程序来完成,简单快捷,主要知识点有:

  • MySQL connector 使用,也就是 Python DB API 规范
  • HTTP客户端库 requests 使用
  • 微信公众号平台 API 使用

首先,建立新旧 openid 对照表。

CREATE TABLE change_openidlist(
  id BIGINT NOT NULL AUTO_INCREMENT,
  ori_openid varchar(100) NOT NULL,
  new_openid varchar(100) NOT NULL,
  CONSTRAINT crm_change_openidlist_pk PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci ;

如果没有安装,则需先安装以下类库。

pip install mysql-connector-python
pip install requests

接着,运行下面 python 程序,即可将新旧 openid 对照数据写到 change_openidlist,然后就可以根据这个表的数据去更新其它数据表了。

其它可见注释,不详述,当然不要忘了将 appid 和 secret 替换为自己公众号。

# -*- coding: utf-8 -*-
import requests
import mysql.connector
def handle_data():
  try:
    token = get_access_token()
    #自动提交方式 autocommit=True
    conn = mysql.connector.connect(host='127.0.0.1', port='3306', user='user', password='password', database='wx', use_unicode=True,autocommit=True);
    qcursor = conn.cursor(buffered=True)
    wcursor = conn.cursor()
    #旧公众号 openid
    qcursor.execute('select openid from wxmembers')
    size = 100
    while True:
      list = qcursor.fetchmany(size)
      if not list:
        break
      changeopenid_list = get_changeopenid_list(list,token)
      wcursor.executemany('insert into change_openidlist (ori_openid,new_openid) values (%s, %s)',changeopenid_list)
  except mysql.connector.Error as e:
    print ('Error : {}'.format(e))
  finally:
    qcursor.close
    wcursor.close()
    conn.close
    print 'openid handle finished!'
def get_access_token():
  new_appid = '00000'
  new_secret = '11111'
  url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential' # grant_type为固定值
  payload = {'appid': new_appid, 'secret': new_secret}
  r = requests.get(url,params = payload)
  response = r.json()
  return response['access_token']
def get_changeopenid_list(ori_openid_list,token):
  new_access_token = token
  ori_appid = '33333'
  url = 'http://api.weixin.qq.com/cgi-bin/changeopenid?access_token='+ new_access_token
  payload = {'to_appid': ori_appid, 'openid_list': ori_openid_list}
  r = requests.post(url,json = payload)
  response = r.json()
  result_list = response['result_list']
  openid_list = [[result['ori_openid'],result['new_openid']] for result in result_list if result['err_msg'] == 'ok']
  return openid_list
if __name__ == '__main__':
  handle_data()

总结

以上所述是小编给大家介绍的使用 Python 实现微信公众号粉丝迁移流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python逐行读取文件内容的三种方法
Jan 20 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
Python处理Excel文件实例代码
Jun 20 Python
Python实现的快速排序算法详解
Aug 01 Python
Python星号*与**用法分析
Feb 02 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 09 Python
python怎么对数字进行过滤
Jul 05 Python
python 监控logcat关键字功能
Sep 04 Python
python中实现栈的三种方法
Dec 19 Python
python中numpy数组与list相互转换实例方法
Jan 29 Python
EM算法的python实现的方法步骤
Jan 02 #Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 #Python
matplotlib绘制动画代码示例
Jan 02 #Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 #Python
Python 实现淘宝秒杀的示例代码
Jan 02 #Python
python基于twisted框架编写简单聊天室
Jan 02 #Python
python http接口自动化脚本详解
Jan 02 #Python
You might like
php去除字符串换行符示例分享
2014/02/13 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
2016/09/23 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
JS 文件大小判断的实现代码
2010/04/07 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
微信小程序五星评分效果实现代码
2017/04/06 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
Angular4.0中引入laydate.js日期插件的方法教程
2017/12/25 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
Django Web开发中django-debug-toolbar的配置以及使用
2018/05/06 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
在django中,关于session的通用设置方法
2019/08/06 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
介绍一下linux文件系统分配策略
2012/11/17 面试题
四风批评与自我批评发言稿
2014/10/14 职场文书
仰望星空观后感
2015/06/10 职场文书
五一放假通知怎么写
2015/08/18 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android