使用 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 不同对象比较大小示例探讨
Aug 21 Python
python安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
pyhton列表转换为数组的实例
Apr 04 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
基于python requests selenium爬取excel vba过程解析
Aug 12 Python
详解python polyscope库的安装和例程
Nov 13 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
浅谈Python中的正则表达式
Jun 28 Python
python标准库ElementTree处理xml
May 20 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
第十一节 重载 [11]
2006/10/09 PHP
PHP 实用代码收集
2010/01/22 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php中get_cfg_var()和ini_get()的用法及区别
2015/03/04 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
Python字符遍历的艺术
2008/09/06 Python
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
python中的lambda表达式用法详解
2016/06/22 Python
Python面向对象之继承代码详解
2018/01/29 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
Python: glob匹配文件的操作
2020/12/11 Python
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
小学生作文批改评语
2014/12/25 职场文书
企业年会祝酒词
2015/08/11 职场文书
创业计划书详解
2019/07/19 职场文书
MySQL的表级锁,行级锁,排它锁和共享锁
2022/07/15 MySQL