使用 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 相关文章推荐
如何搜索查找并解决Django相关的问题
Jun 30 Python
python进阶教程之模块(module)介绍
Aug 30 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
教你用Python写安卓游戏外挂
Jan 11 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
python3.6数独问题的解决
Jan 21 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
Python 中由 yield 实现异步操作
May 04 Python
Python configparser模块封装及构造配置文件
Aug 07 Python
python实现定时发送邮件
Dec 23 Python
matplotlib grid()设置网格线外观的实现
Feb 22 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
《破坏领主》销量已超100万 未来将继续开发新内容
2020/03/08 其他游戏
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
php MYSQL 数据备份类
2009/06/19 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
js 性能优化之快速响应的用户界面
2017/02/15 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
React如何避免重渲染
2018/04/10 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
python提取内容关键词的方法
2015/03/16 Python
Python实现字典的key和values的交换
2015/08/04 Python
pandas 数据归一化以及行删除例程的方法
2018/11/10 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python中return不返回值的问题解析
2020/07/22 Python
python实现画图工具
2020/08/27 Python
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
linux面试题参考答案(9)
2016/01/29 面试题
英语硕士生求职简历的自我评价
2013/10/15 职场文书
会计专业毕业生自荐信范文
2013/12/20 职场文书
工商管理自荐书
2014/07/06 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
中秋节主题班会
2015/08/14 职场文书
SpringBoot生成License的实现示例
2021/06/16 Java/Android