使用 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实现方法
Nov 18 Python
Python中分数的相关使用教程
Mar 30 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python中特殊函数集锦
Jul 27 Python
Python与R语言的简要对比
Nov 14 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
Django进阶之CSRF的解决
Aug 01 Python
python3.6编写的单元测试示例
Aug 17 Python
Python的互斥锁与信号量详解
Sep 12 Python
python将数组n等分的实例
Dec 02 Python
Python中的With语句的使用及原理
Jul 29 Python
Python如何快速找到多个字典中的公共键(key)
Apr 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中动态变量用法实例
2015/06/10 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
实例:用 JavaScript 来操作字符串(一些字符串函数)
2007/02/15 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
js利用事件的阻止冒泡实现点击空白模态框的隐藏
2014/01/24 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
理解javascript正则表达式
2016/03/08 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
JavaScript之map reduce_动力节点Java学院整理
2017/06/29 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
微信小程序实现收藏与取消收藏切换图片功能
2018/08/03 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
python实现定时发送邮件
2020/12/23 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
奥运会口号
2014/06/13 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
python3 字符串str和bytes相互转换
2022/03/23 Python
Go语言grpc和protobuf
2022/04/13 Golang