目 录

  • 摘要
  • 实操
  • 代码分析
  • 需求来源与路径选择
  • 参考

摘要

本文给出利用 WxPusher 提供的 web api 与 python SDK 两种方式,实现微信发送的 python 代码样例,并简单点评了运维自动化状态通报的几种方式及实现路径。

实操

  1. 注册 WxPusher 应用并记录 APP_TOKEN。前往 WxPusher 的管理后台,注册一个应用,其中应用名字联系方式推送内容说明 都是展示给最终用户的,可以随便写。至于事件回调地址是用来实现诸如“用户扫码关注后的通知”、“获取新关注用户UID”、“用户通过手机发送信息给应用从而实现远程控制”等目的,需要自行部署一个互联网 web 应用,并将接收到的 json 数据进一步处理。提示:应用创建成功后,请复制并妥善保存 APP_TOKEN。

  2. 关注应用并记录 UID。在 WxPusher 的管理后台,点击左侧功能菜单下方的应用管理–>关注应用菜单项,用自己的微信扫码该二维码即可。关注成功后,可以在管理后台的用户管理–>用户列表菜单项中,看到本应用唯一的一个关注用户,抄录下自己的 UID。

  3. 安装 python SDK。直接使用 pip install -U wxpusher 即可

  4. 代码实现。WxPusher 提供了两种手段来发送信息,一个是 web api,一个是 SDK 包。现将两种方式以 python 代码展示一下。新建工程文件 test_wxpusher.py,内容如下:

    import requests
    from wxpusher import WxPusher # https://github.com/wxpusher/wxpusher-sdk-pythonapp_token = 'AT_********'   # 本处改成自己的应用 APP_TOKEN
    uid_myself = 'UID_********'  # 本处改成自己的 UIDdef wxpusher_send_by_webapi(msg):"""利用 wxpusher 的 web api 发送 json 数据包,实现微信信息的发送"""webapi = 'http://wxpusher.zjiecode.com/api/send/message'data = {"appToken":app_token,"content":msg,"summary":msg[:99], # 该参数可选,默认为 msg 的前10个字符"contentType":1,"uids":[ uid_myself, ],}result = requests.post(url=webapi,json=data)return result.textdef wxpusher_send_by_sdk(msg):"""利用 wxpusher 的 python SDK ,实现微信信息的发送"""result = WxPusher.send_message(msg, uids=[uid_myself,], token=app_token,summary=msg[:99])return resultdef main(msg):result1 = wxpusher_send_by_webapi(msg)result2 = wxpusher_send_by_sdk(msg)print(result1)print(result2)if __name__ == '__main__':main('hello, world!')
    
  5. 最终效果。运行上述代码,在手机微信上,即可收到如下信息:

  6. 下一步计划。可以利用 Flask 实现一个简易的 web 服务,提供回调地址给 WxPusher,以便实现用户指令响应等功能。

代码分析

关于步骤4的代码中 web api 与 python SDK 两种方式,其本质上是一样的。因为我们打开 python SDK 的github源代码,就可以发现 wxpusher.send_message 函数的定义,与我的 wxpusher_send_by_webapi 函数几乎一致。

我们可以看到,第二条消息是用 python SDK 发送的,其摘要信息依旧按默认10个字符来。打开 python 安装目录下的 \Lib\site-packages\wxpusher\wxpusher.py,可以看到 send_message 接口还不是很完善,尚未加入 summary 参数。而若是查看github源代码,则可以发现 summary 参数已经完善了。因此应该是作者没有及时更新 PYPI 上的安装包导致。这可以自己手工修改一下本地 wxpusher.py 文件即可。

需求来源与路径选择

我有个小项目,自动在后台运行,希望实时将项目的运行状态报给我自己。这可以通过许多种方法实现,各有优缺点,大致如下:

  1. 邮件。接口复杂,不够实时
  2. 短信。接口复杂,需要费用
  3. 各类即时通信软件。接口有简单有复杂,免费,实时,无法长期保存状态
  4. web页面。需要一台互联网服务器提供 web 服务,可以长期保存状态,需要主动查询。

考虑到微信已经是每天必看,最实时,且这个项目的运行状态无需长期保存,因此最终决定选择微信。因此最终需求如下:

  • 能够通过微信发送信息给自己
  • 能够支持 python
  • 接口越简单越好

大致上,用 python 发微信可以有几种方式:

  1. 全模拟手工操作。可以通过 pyautogui 之类的 RPA(Robotic Process Automation,机器人流程自动化)软件,模拟人工在电脑上发送微信信息,比如这篇文章。使用这种方法最大问题是程序运行时要占用一台电脑资源。
  2. 通过第三方微信公众号提供的次级接口。比如本文选择的 WxPusher,还有itchat、wechaty、wxpy 等,但后几个往往容易受制于微信的 web 登录能力而无法使用,将来再试试。
  3. 通过微信自己提供的各类 api,实现信息发送。这需要写的代码比较多,技术要求略高。

综上,选择 WxPusher 来实现自动化工程的进度提示微信,还是很不错的。

参考

  • WxPusher官方文档

python 收发微信之一:利用 WxPusher 的 web api 及 python SDK 两种方式给自己发微信相关推荐

  1. web Api 返回json 的两种方式

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  2. MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式

    MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式 2015-01-18 00:11 https://www.muhanxue.com/essa ...

  3. Python day 34 并发编程、PID/PPID、实现多进程得两种方式

    ## 进程及并发的产生 ```python 进程指的是正在运行的程序,是一系列过程的统称,也是操作系统在调度和进行资源分配的基本单位 并发,指的是多个任务同时被执行,并发编程指的是编写支持多任务并发的 ...

  4. Python多任务(2.线程的概念以及组成(创建线程的两种方式))

    1.线程的概念 线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要CPU进行调度,也就是说线程是CPU调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程. ...

  5. 微信公众号开发中,获取用户资料的两种方式

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众号的开发主要是在服务号环境下进行,订阅号是拿不到用户的资料的,因此,下文的讨论都基于微信服务号. 微信公众号的两个ac ...

  6. spark的Web UI查看DAG的两种方式

    提交spark任务后,master:8088->ApplicationMaster 然后会跳转到spark的WEB UI界面. 第一种查看DAG的方式是: Jobs->Descriptio ...

  7. f12获取网页文本_jmeter获取web页面文本内容的两种方式

    介绍两种jmeter获取页面文本的方式,以我的博客主页为例,我想获取标题"风城烟雨"这几个字 方式一:使用正则表达式提取器 1.在博客主页空白处鼠标右键查看页面源代码,在源代码中找 ...

  8. Python 35 线程(1)线程理论、开启线程的两种方式

    一:线程理论 1 什么是线程 进程其实一个资源单位,而进程内的线程才是cpu上的执行单位 线程其实指的就是代码的执行过程 2 为何要用线程    线程vs进程      1. 同一进程下的多个线程共享 ...

  9. ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约

    ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约 目录 1.Geth安装.配置文件.与ETH节点交互 1.1.下载并安装好geth客户端 1.2. ...

最新文章

  1. 实例解说Linux中fdisk分区使用方法
  2. 英特尔530和535哪个好_详细介绍2020版联想小新Air 14酷睿版和锐龙版怎么选,哪款好...
  3. WatchOS系统开发大全(7)-WKInterfaceImage
  4. SQL语句的基本语法一
  5. pat 乙级 1003 我要通过!(C++)
  6. cgo的效率 golang_golang CGO FAQ TIPS : cgo 从 C 传递 slice 到 go
  7. Python爬虫从入门到精通——基本库re的使用:正则表达式
  8. 3、通过挂在系统光盘搭建本地yum仓库。
  9. java基础相关面试题
  10. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础...
  11. 证书:数字签名和验签加密和解密
  12. ROS@Ubuntu16.04体验记录
  13. 1102: 【入门】字符图形1-星号矩形
  14. 供应链管理 MOOC学习笔记(全)
  15. 猪圈密码 摩斯密码 QWE加密 栅栏加密 当铺密码
  16. python桌面快捷方式不见了怎么办_桌面快捷方式不见了怎么办?桌面快捷方式不见了解决方法...
  17. Android修行手册 - TextureView和SurfaceView的属性方法以及示例
  18. 自写密码字典-解口令具体过程(海德拉)
  19. java SSM 多数据源
  20. 图文并茂——从Kubernetes的诞生背景到什么是Kubernetes, 带你深度解析Kubernetes

热门文章

  1. 【GD32F427开发板试用】06-硬件I2C软件I2C驱动0.91OLED
  2. 新版Microsoft Edge下载时,提示验证失败的问题处理
  3. GB/T 25000.51-2016解读系列之用户文档集
  4. USACO 3.1.1 网络布线
  5. P8大佬出书了!送送送!
  6. python生成漂亮桌面背景心灵鸡汤可每日学英语
  7. git ls-files:项目文件码数行数统计
  8. 阿里、百度、腾讯Java程序员面经(附带面试题答案)
  9. 做设计想要轻松接单 你要懂这些
  10. 【唐老狮】C#——多态和vob