微信定时发送

简介

本项目使用wxpy第三方包实现定时给微信好友或者微信群发送每日一句和天气预报。

环境配置

基于Python3环境且安装如下第三方包。

  • wxpy

    • 进行网页版微信登录及消息发送等功能。
    • 该第三方包基于Web版微信,目前不能与PC端微信同时登陆(微信网页版与PC版是一个接口),如果常用PC端微信建议使用小号登陆此程序。
  • requests
    • 爬虫工具包,每天爬取指定最新信息。

设计思路

爬取并解析

爬取爱词霸提供的开放API接口信息。对该API提供的Json数据格式化如下,该接口需要得到的核心信息就是英文句子和中文翻译。

使用requests对得到的response调用json方法即可解析json字符串为字典,代码如下。

def get_sentence():"""获取每日一句"""header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}url = "http://open.iciba.com/dsapi/"r = requests.get(url, headers=header)rsp = r.json()content = rsp['content']note = rsp['note']print(content, note)return content, note

爬取天气网站的开放API接口信息。对该API提供的Json数据格式化如下,该接口的核心信息是当天的天气信息,过去的几天和后来几天可以忽略(按照需求)。

使用requests对得到的response调用json方法即可解析json字符串为字典,并索引需要的信息进行相关的处理组合需要字符串即可,代码如下。

def get_weather(city_no):"""获取天气数据"""url = 'http://t.weather.sojson.com/api/weather/city/'url = url + str(city_no)header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}r = requests.get(url, headers=header)rsp = r.json()# 解析得到的json数据以如下格式组合字符串'''# 今日天气预报# 年月日 + 星期 + 所在地城市# 天气类型 + 风向 + 风力# 温度范围(最低温度~最高温度)# 日出 + 日落# 污染指数:PM2.5/PM10/AQI# 当前温度 + 空气湿度# Notice信息'''today_info = rsp['data']['forecast'][0]date_list = today_info['ymd'].split('-')date = date_list[0] + '年' + date_list[1] + '月' + date_list[2] + '日' + '   ' + today_info['week'] + '   ' + rsp['cityInfo']['city'] + '\n'weather = '天气:' + today_info['type'] + '   ' + '风向:' + today_info['fx'] +  '   ' + '风力:' + today_info['fl'] + '\n'temp_range = '温度范围:' + today_info['low'] + today_info['high'] + '\n'sun = '日出:' + today_info['sunrise'] + '   ' + '日落' + today_info['sunset'] + '\n'level = '污染指数:' + 'PM2.5:' + str(rsp['data']['pm25']) + '   ' + 'PM10:' + str(rsp['data']['pm10']) + '   ' + 'AQI:'+ str(today_info['aqi']) + '\n'  # 注意整个数据只有这三项是浮点数temp_now = '当前温度:' + rsp['data']['wendu'] + '   ' + '湿度' + rsp['data']['shidu'] + '\n'notice = '注意:' + today_info['notice']result = date + weather + temp_range + sun + level + temp_now + noticereturn result

上述两个爬虫脚本没有进行异常处理,而API接口经常调整,最好需要进行相应的异常日志输出。

定时发送

逻辑

  • 程序运行进入无限循环,等待当前时间到达指定的一个发送时间如8时,退出循环,调用自动发送函数。
  • 发送成功则计时器开始等待,达到一天时间再次发送,回调当前函数。
  • 发送失败则给预定的报告好友发送失败消息。(一般发送给自己,在微信好友中自己是作为好友在好友列表的。)

具体代码

def auto_send():try:weather_info = get_weather(101190201)  # 无锡 sentence_info = get_sentence()# 发送给指定群组代码如下my_friend = bot.groups().search('一家人')[0]  # 昵称,官方文档解释会找到所有这个昵称的好友组合成列表,这可能是因为wxpy基于web微信,微信没有提供更深的接口# 发送给指定好友代码如下# my_friend = bot.friends().search('好友昵称')my_friend.send("早上好Y(^o^)Y,这里是今日份的天气信息请查收!")my_friend.send(weather_info)      my_friend.send("天天有个好心情哦!!!")my_friend.send(sentence_info[0])my_friend.send(sentence_info[1])# 每隔86400秒(1天),发送1次t = Timer(86400, auto_send)t.start()except:# 部署者的昵称,微信自己是作为自己的微信好友的my_friend = bot.friends().search('周先森爱吃素')[0]my_friend.send("今日份的信息发送失败了!")if __name__ == "__main__":# 程序等待,直到到达时间第一次运行while True:if time.localtime().tm_hour >= 8:break# 扫码登录,Windows系统bot = Bot()# 扫码登录,Linux系统# bot = Bot(console_qr=2, cache_path="botoo.pkl")# 调用函数进行消息发送auto_send()

具体部署

由于该脚本必须保证一直运行,所以适合部署在云端服务器(能访问国内网络),因此每次都要扫码登录就不合适了,一般使用登录缓存。(具体在代码给出,博主也在腾讯云部署测试过,没有问题)该脚本建议后台进程部署,一旦运行便会自动阻塞,无法使用一般方式终止。

运行结果,注意这里是发送给指定昵称搜索到的第一个,多个好友同一个昵称需要进行筛选。

补充说明

完整的代码已经上传到我的Github,欢迎Star或者Fork。API地址来源其他博客。如有错误,欢迎指正。

Python爬虫-微信定时消息发送相关推荐

  1. python实现微信发消息

    python实现微信发消息 通过桌面应用去发送消息(pyautogui, pyperclip) # coding=utf-8 """@project: automatio ...

  2. Python爬虫之定时抢购淘宝商品

    Python爬虫之定时抢购淘宝商品 import time from selenium import webdriver import datetimeclass Spider:def __init_ ...

  3. PHP Laravel框架 微信模板消息发送

    laravel框架 微信模板消息发送 /*** 发送模板消息*/public function add(Request $request,$id){$house_data = House::find( ...

  4. Mega-wechat微信模板消息发送服务

    Mega-wechat Mega-wechat是一款发送微信模板消息的服务,基于Swoole网络框架实现.支持大量的消息发送,并发执行发送模板消息接口,整个发送过程按照先来先服务的队列执行.支持定制模 ...

  5. php微信模板消息发送

    开发项目时自己封装的类,涉及到微信模板消息发送.免单逻辑计算.用户分佣计算等 class Wxtemplate extends Base {     function __construct()   ...

  6. 利用Python实现微信定时为指定的人发送消息(新手)

    生活中有时我们需要在特定时间点给别人发送消息时,而又有其他的事情需要处理,很容易造成我们遗忘掉这件事,这是我们就需要一个程序来帮助我们来执行这一任务,经过几天在网上的查询 写了一个小程序,希望各位大神 ...

  7. python微信消息定时_python微信定时消息

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 使用supervisor的具体方法,在我这篇文章中有讲过:https:www.z ...

  8. 微信定时消息之搞定女朋友

    脱单狗福利!每天不同时间段给女友定时给女友发消息,不错过早上起床.中午吃饭.晚上吃饭.晚安时间! 目录 每天不同时间段通过微信发消息提醒女友 简介 编写思路 使用教程 演示图片 完整源代码 每天不同时 ...

  9. python查看微信撤回消息_想查看微信好友撤回的消息?Python帮你搞定

    要说微信最让人恶心的发明,消息撤回绝对能上榜. 比如你现在正和女朋友用微信聊着天,或者跟自己喜欢的女孩子聊着天,一个不留神,你没注意到对方发的消息就被她及时撤回了,这时你很好奇,好奇她到底发了什么?于 ...

  10. python查看微信撤回消息_python如何查看微信消息撤回

    本文为大家分享了python查看微信消息撤回的具体代码,供大家参考,具体内容如下 1.安装itchat itchat是一个开源的python微信库,支持发送消息.图片.视频.地图.名片.文件等,还可以 ...

最新文章

  1. gitlab 开源项目 星_49必须了解的机器学习开源项目,Github上平均3600星
  2. Hibernate注解使用以及Spring整合
  3. louvain算法python_复杂网络任务6:Louvain社区发现算法的原理、细节和实现,作业,六,以及...
  4. linux下重启mysql php nginx
  5. 用java写注册表单_利用HTML表单标签编写一个注册页面
  6. java二叉树算法_JAVA 二叉树算法 (遍历、深度、汇总求和)
  7. js 将video的第一帧 转为图片
  8. SpringCloud注解和配置以及pom依赖说明
  9. 预定义类型未定义或导入_LimeSurvey基础教程(二)——问题类型
  10. 软件工程实验二Visio的使用
  11. # Vue 组件开发打包、Vue 项目打包、js库组件库打包使用
  12. optim优化器的使用
  13. 关于如何设计网站首页
  14. wps公式编辑器文字和公式不对齐
  15. Spring Cloud Alibaba微服务架构实战教程—15最详细的Gateway统一网关
  16. 在小鸟云进行服务器托管,怎么升级配置?
  17. 海思SDK学习(5)海思媒体处理软件平台MMP(4)VO视频输出
  18. STM32H7 ADC hal库
  19. 服务器win10系统开机慢,win10专业版系统开机启动慢 三种方法帮你敲定
  20. 电子合同在什么情况下,法院不予认可

热门文章

  1. python官网下载-Python3.7.0 官方版官方版下载
  2. 台式计算机 如何组装,台式电脑买回家怎么装_组装方法图文分析
  3. 自监督学习(self-supervised learning)(20201124)
  4. 史上最真实的网络飙车游戏
  5. ssm整合的简单案例(附源码)
  6. 只需要5秒就能克隆出你的声音
  7. php手机注册和微信登录统一,微信登录和公众号授权登录开发逻辑详解
  8. 智能语言处理之依存树计算句子结构相似度计算
  9. [wpa_supplicant]基于ubuntu的wpa_supplicant工具的安装与使用
  10. 【C/C++】求解线性方程组的雅克比迭代与高斯赛德尔迭代