福利时间,福利时间,福利时间

  如果你还在为不知道怎么撩妹而烦恼,不知道怎么勾搭小仙女而困惑,又或者不知道怎么讨女朋友欢心而长吁短叹。

  那么不要犹豫徘徊,往下看。接下来我会分享怎么使用 Python 实现微信自动聊天,微信每日天气早报、睡前故事及精美图片推送。

  学会之后,迎娶白富美,走上人生巅峰就指日可待啦。(✪ω✪)

  不信咱先看看效果展示:

  (皮皮是我家猫的名字,所有我把命令设成这样子的)

  

  

  

  

  如此贴心的舔狗,哪个小姐姐会选择拒绝呢。

  

  目录:

一、Python 登录微信

二、获取天气早报信息

三、获取睡前故事

四、获取精美壁纸

五、整合数据,配置定时任务

六、自动聊天机器人(图灵机器人)

七、Git 地址

一、Python 登录微信

  Python 中有个 itchat 包,这是个开源的微信个人号接口,非常简单就可以实现在 python 对微信的操作。

  下面贴一下基本的登录、对话代码

import itchat

itchat.auto_login(hotReload=True)  # 登录,会下载二维码给手机扫描登录,hotReload设置为True表示以后自动登录
itchat.send('hello my love', toUserName='filehelper') #发送信息给微信文件助手 friends = itchat.search_friends(name='好友昵称') # 获取微信好友列表
userName = friends[0]['UserName']
itchat.send('hello my love', toUserName=userName) # 发送信息给指定好友 itchat.run() # 让itchat一直运行

  (之后展示的代码是对 itchat 的进行简单封装后的应用,可能会导致阅读有些麻烦,见谅,文章最后面我会贴上全部的代码 git)

  详细了解 itchat 的应用可以看 这里

二、获取天气早报信息

  获取每日天气信息:

  我的天气信息是在 阿凡达数据 中申请的免费数据接口,里面也有很多好玩有趣的数据,最好自己去注册个账号。 

common = Common() #这是个我自己封装的工具类
key = 'cc186c9881b94b42b886a6d634c632' #这个我修改了 嘻嘻

# 数据提供类
class DataUtil():
# 获取天气信息
def getWeatherData(self, cityname):
# 阿凡达数据
url = ' http://api.avatardata.cn/Weather/Query?key=' + key + '&cityname=' + cityname
results = common.get(url)
text = self.parseInfo_afd(results)
print(text)
return text # 简单的数据修饰封装
def parseInfo_afd(self, jsons):
# 将string 转换为字典对象
jsonData = json.loads(jsons)
textInfo = '早上好,今天又是元气满满的一天哟.\n'
data = jsonData['result']['weather'][0]['date']
week = jsonData['result']['weather'][0]['week']
nongli = jsonData['result']['weather'][0]['nongli']
city_name = jsonData['result']['realtime']['city_name']
lowTemperature = jsonData['result']['weather'][0]['info']['dawn'][2]
highTemperature = jsonData['result']['weather'][0]['info']['day'][2]
weather = jsonData['result']['weather'][0]['info']['day'][1]
wind = jsonData['result']['weather'][0]['info']['day'][4] textInfo = textInfo + '今天是' + data + '号\n'
textInfo = textInfo + '农历:' + nongli + ',星期' + week + '\n'
textInfo = textInfo + city_name + '气温:' + lowTemperature + '-' + highTemperature + '度,' + weather + ' ' + wind + '\n\n'
textInfo = textInfo + '穿衣指数:' + jsonData['result']['life']['info']['chuanyi'][0] + ' - ' + jsonData['result']['life']['info']['chuanyi'][1] + '\n\n'
textInfo = textInfo + '运动指数:' + jsonData['result']['life']['info']['yundong'][0] + ' - ' + jsonData['result']['life']['info']['yundong'][1] + '\n\n'
textInfo = textInfo + '感冒指数:' + jsonData['result']['life']['info']['ganmao'][0] + ' - ' + jsonData['result']['life']['info']['ganmao'][1] + '\n\n'
textInfo = textInfo + '紫外线指数:' + jsonData['result']['life']['info']['ziwaixian'][0] + ' - ' + jsonData['result']['life']['info']['ziwaixian'][1] + '\n\n'
textInfo = textInfo + 'by:小可爱的贴心秘书' + '\n\n'
return textInfo

三、获取睡前故事

  睡前故事的来源是出自《从你的全世界路过--张嘉佳》,这本书中都是些爱情相关的小故事。

  

  我们用 night.n 来区分每晚发送的故事。

# 提取故事的第一天
readBookStartDay = datetime.datetime(2019, 2, 17)

class DataUtil():
def getBookInfo(self, filePath): #文件路径,
radioList = [] #微信每次最多只能发送的字符是有限制的,我每25行发送一次信息
row = 0
tempInfo = textInfo = '睡前故事:张嘉佳 - 《从你的全世界路过》.\n\n'
readFlag = False #是否读取
today = datetime.datetime.now()
dayCount = (today - readBookStartDay).days + 1
for line in open(filePath):
if (line.find('night.' + str(dayCount)) > -1): # 开始读数据
readFlag = True
continue
if (line.find('night.' + str(dayCount+1)) > -1): # 读完一天数据结束
break
if readFlag:
row += 1
tempInfo += line
# 微信每次最多只能发送的字符是有限制的,我每25行发送一次信息
if row == 25:
radioList.append(tempInfo)
tempInfo = ''
row = 0
tempInfo += '\n晚安\n' + 'by:小可爱的贴心秘书' + '\n'
radioList.append(tempInfo)
# common.txtToMp3(radioList) #文字生成语音 发送语音
print(radioList)
return radioList

四、获取精美壁纸

  壁纸我们从 必应 的官网抓取,必应的官网壁纸还是比较精美的。

  至于具体的壁纸抓取 分析,相信聪明的你们肯定是知道的,我就直接贴代码咯。

class DataUtil():
def getBingPhoto(self, index):
# index 对应的是 必应 index天的壁纸
url = ' http://www.bing.com/HPImageArchive.aspx?format=js&idx=' + index + '&n=1&nc=1469612460690&pid=hp&video=1'
html = urllib.request.urlopen(url).read().decode('utf-8') photoData = json.loads(html)
# 这是壁纸的 url
photoUrl = 'https://cn.bing.com' + photoData['images'][0]['url']
photoReason = photoData['images'][0]['copyright']
photoReason = photoReason.split(' ')[0]
photo = urllib.request.urlopen(photoUrl).read() # 下载壁纸刀本地
with open('./bing.jpg', 'wb') as f:
# img = open_url(photoUrl)
if photo:
f.write(photo)
print("图片已保存") # 把壁纸的介绍写到壁纸上
# 设置所使用的字体
font = ImageFont.truetype("simhei.ttf",35)
imageFile = "./bing.jpg"
im1 = Image.open(imageFile)
# 画图,把壁纸的介绍写到壁纸上
draw = ImageDraw.Draw(im1)
draw.text((im1.size[0]/2.5, im1.size[1]-50), photoReason, (255, 255, 255), font=font) # 设置文字位置/内容/颜色/字体
draw = ImageDraw.Draw(im1) # Just draw it!
# 另存图片
im1.save("./bing.jpg")

五、整合数据,配置定时任务

  数据都获取到了,也登录了微信,现在我们就需要把这些信息发送给需要的人了。

  这里需要注意的是:

  1. 微信每条信息是有长度限制的

  2. 微信在线需要单独占用一个线程,所以发送信息需要在另一个线程执行。

  3. 定时任务的配置......想详细了解看 这里

  

wechat = WeChat() #这里是封装的 itchat
# 开启微信登录线程,需要单独占个线程
_thread.start_new_thread(wechat.login, ( )) # 配置定时任务
# 开启早间天气预报 定时任务
schedule.every().day.at("7:20").do(wechat.dailyInfo)
# 开启睡前故事 定时任务
schedule.every().day.at("21:30").do(wechat.readStory)
while True:
schedule.run_pending()
time.sleep(1)

  微信登录方法

class WeChat():

    def login(self):
itchat.auto_login(hotReload=True) # 登录,会下载二维码给手机扫描登录,hotReload设置为True表示以后自动登录
itchat.send('hello my love', toUserName='filehelper') #发送信息给微信文件助手 friends = itchat.search_friends(name='好友昵称') # 获取微信好友列表
userName = friends[0]['UserName']
itchat.send('hello my love', toUserName=userName) # 发送信息给指定好友 itchat.run() # 让itchat一直运行

  微信每日天气预报方法

class WeChat():
# 推送每日早报
def dailyInfo(self):
print('dailyInfo do')
jiujiang = dataUtil.getWeatherData('九江')
# wechat.sendMessage(jiujiang, 'filehelper')
yfei = wechat.getFriend('好友昵称')
wechat.sendMessage(jiujiang, yfei)

  微信发送睡前故事 和 精美壁纸方法

# 推送睡前故事
def readStory(self):
print('readStory do')
stroy = dataUtil.getBookInfo('./从你的全世界路过.txt')
dataUtil.getBingPhoto('')
# wechat.sendMessage(stroy, 'filehelper')
# itchat.send_image('./bing.jpg', 'filehelper')
yfei = wechat.getFriend('好友昵称') for txt in stroy:
wechat.sendMessage(txt, yfei) # 发送壁纸
itchat.send_image('./bing.jpg', toUserName=yfei)

六、自动聊天机器人(图灵机器人)

  聊天机器人我们要考虑俩个问题:

  1.怎么微信自动回复信息?(itchat 提供的注解)

  2.自动回复什么内容?(调用图灵机器人)

  第一个问题,Itchat 提供了注解,可以自动回复信息,详细可以了解  这里

  需要注意的是,自动回复方法,不能包含在 类 中,不然无法生效。

# 聊天助手开关
OPEN_FLAG = 0
# 回复信息
@itchat.msg_register(['Text'])
def text_reply(msg):
global OPEN_FLAG
msgText = msg['Text']
# print(msgText)
if msgText == "皮皮过来":
OPEN_FLAG = 1
print('开启皮皮语音助手*')
return '开启皮皮语音助手*'
if msgText == "皮皮退下":
OPEN_FLAG = 0
print('关闭皮皮语音助手*')
return '关闭皮皮语音助手*'
if OPEN_FLAG == 1:
# 为了保证在图灵Key出现问题的时候仍旧可以回复,这里设置一个默认回复
defaultReply = '不想说话了!' + "*"
# 如果图灵Key出现问题,那么reply将会是None
reply = get_response(msg['Text']) + "*"
# 有内容一般就是指非空或者非None,你可以用`if a: print('True')`来测试
return reply or defaultReply

  

  第二个问题,图灵机器人 去 这里 申请注册就行了,聪明的你肯定会的。

  申请到了之后,只需要调用接口就好了。

KEY = '71f9d9d2dd364ad8b28bd565270176'
# 图灵机器人
def get_response(msg):
# 构造了要发送给服务器的数据
apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
'key': KEY,
'info': msg,
'userid': 'wechat-robot',
}
try:
r = requests.post(apiUrl, data=data).json()
return r.get('text')
# 为了防止服务器没有正常响应导致程序异常退出,这里用try-except捕获了异常
# 如果服务器没能正常交互(返回非json或无法连接),那么就会进入下面的return
except Exception as e:
print('插入时发生异常' + e)
# 将会返回一个None
return

  大致思路就是这么简单咯

七、Git 地址

  https://github.com/zwwjava/python_capture/tree/master/venv/Include/wechat

  入口文件: autoSendMessage.py

【Python撩妹合集】微信聊天机器人,推送天气早报、睡前故事、精美图片分享的更多相关文章

  1. 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...

  2. C# MVC 微信支付之微信模板消息推送

    微信支付之微信模板消息推送                    今天我要跟大家分享的是"模板消息"的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信 ...

  3. 手把手教你用Python代码实现微信聊天机器人 -- Python wxpy

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 来学习了,微信聊天机器人. 环境要求: Windows / Li ...

  4. 使用图灵机器人api搭建微信聊天机器人php实现

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  5. 前后端分离djangorestframework—— 接入微信模板消息推送

    微信 什么是微信也不多说,跟前面的支付宝一样的 微信支付 微信支付也有个沙箱环境,沙箱环境官方文档 由文档中那句很显眼的话所得,即使是测试环境也需要真实的商户号,所以这个就没法想支付宝那样用沙箱账号来 ...

  6. $Django 支付宝支付,微信服务号推送消息 (测试需要把应用程序部署到服务器上)

    一 支付宝支付 大概 支付宝支付 正式环境:需要用营业执照去申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.ht ...

  7. .NET之微信消息模板推送

    最近在项目中使用到了微信消息模板推送的功能,也就是将对应的消息推送到对应的用户微信上去,前提是你必须要有一个微信公众号并且是付费了的才会有这个功能,还有就是要推送的用户必须是的关注了你的微信公众号的. ...

  8. C#微信接口之推送模板消息功能示例

    本文实例讲述了C#微信接口之推送模板消息功能.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...

  9. java开发微信模板消息推送

    发布时间:2018-12-12   技术:springboot+maven   概述 该demo主要涉及微信模板消息推送功能, 详细 代码下载:http://www.demodashi.com/dem ...

随机推荐

  1. PHP断言(ASSERT)的用法

    简述 编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式.程序员断言在程序中的某个特定点该的表达式值为真.如果该表达式为假,就中断操作. 可以 ...

  2. 洗礼灵魂,修炼python(87)-- 知识拾遗篇 —— 线程(1)

    线程(上) 1.线程含义:一段指令集,也就是一个执行某个程序的代码.不管你执行的是什么,代码量少与多,都会重新翻译为一段指令集.可以理解为轻量级进程 比如,ipconfig,或者, python   ...

  3. 确认是否是因为做了物理I/O而导致的性能不佳

    要获取语句是否进行了I/O,需要打开set statistics on 和set statistics on.

  4. Vue2 学习笔记4

    文中例子代码请参考github 父组件向子组件传值 组件实例定义方式,注意:一定要使用props属性来定义父组件传递过来的数据 <script> // 创建 Vue 实例,得到 ViewM ...

  5. python第一百三十天 ---简单的BBS论坛

    简单的BBS论坛 实现功能 git仓库地址:https://github.com/uge3/BBS 1.整体参考“抽屉新热榜” + “博客园” 2.实现不同论坛版块 3.帖子列表展示 4.个人博客主页 ...

  6. sqlserver 删除表中 指定字符串

    源表T "单据编号"               "航班计划日期"        "航班号"          "起飞航站代码&q ...

  7. c/c++ 标准库 map set 删除

    标准库 map set 删除 删除操作 有map如下: map<int, size_t> cnt{{2,22}, {3,33}, {1,11}, {4,44}; 删除方法: 删除操作种类 ...

  8. Bcompare工具永久使用方法

    bcompare的简介 ​ 我们在工作中会经常用到bcompare工具:合入驱动,对比原始文件等. bcompare,即Beyond Compare 是一个综合的比对工具. 可比对的对象包括纯文字档. ...

  9. 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    最近这段时间,学校里的事情实在太多了,从七月下旬一直到八月底实验室里基本天天十二点或者通宵,实在是没有精力和时间来写博客.这周老师出国开会,也算有了一个短暂的休息机会,刚好写点有意思的东西. 上周在天 ...

  10. Windows 下自动同步文件夹内容到另一个文件夹下

    实现windows 使用bat脚本文件,复制文件夹到另一个盘,参考如下代码:/y是可以不显示:提示你需要覆盖一个文件,如下图: bat文件内容为 @echo off echo "使用bat脚 ...