前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者: PK哥

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


如今,对于我们年轻人来说,获取天气情况很方便,但是对于我们不擅长用手机的父母来说,还是很吃力,他们用的多的还是微信吧。为此,我用不到 40 行代码写了一个小工具,每天定时把当天的天气情况直接发到微信群里。

查询天气接口

要获取天气情况,需要一个查询天气的接口,网上找了一下,一般都是注册后送一定调用次数的,我选择了一个,免费送 500 次查询次数的。

我们看看接口的 API 文档。

其中城市名 cityname 和 key 是必填项。

http://v.juhe.cn/weather/index?format=2&cityname=%E8%8B%8F%E5%B7%9E&key=您申请的KEY

key 值在 juhe.cn 我的接口那一栏中可以看到。

我们也可以事先在 Postman 工具中看看接口能否调通。

Postman 接口工具没用过的没关系,他们网页上也提供了调试工具。​

查询天气方法

我们直接用 requests 库请求接口就能获得 json 格式的天气信息,json 数据中包含了当天和未来几天的天气信息,这里我只需要当天的,当天数据都在 result 下的 today 里,提取出来用 return 返回。

通过微信发送天气消息

我们通过微信把天气信息发到群里,这里我们需要用到调用微信的库,itchat 库或者 wxpy 都可以,这里我用了 wxpy 库。

先导入 wxpy 库。

from wxpy import *

我们把刚才的请求接口返回的天气信息整合一下,然后用 wxpy 库的 search 方法通过群名称找到你需要发送天气消息的这个群,用 send 方法发送。

我这里是发送到群里,当然,你也可以直接发送给个人微信。

my_friend = bot.friends().search(u'pk哥')[0]

定时操作

如果每次都需要我们手动运行,那就有点麻烦,我们要让程序每天在固定时间定时发送,这里需要用到 Timer 定时器。

Timer 定时器格式:

Timer(86400, get_weather)

第一个参数表示相隔指定时间(单位:秒)后再次调用方法(第二个参数),注意,方法后不要带括号。

86400 秒就是相隔 24 小时,也就是一天的时间。

t = Timer(86400, get_weather)
t.start()
t.join()

异常处理

如果信息发送失败,我们把信息发给自己,这里我做了一个异常处理。

   except BaseException:my_friend = bot.friends().search(u'brucepk')[0]  # 发送不成功,则发送消息给自己,提醒消息发送失败my_friend.send(u'天气消息发送失败')

我们的程序需要持续运行,那是不是需要一直在电脑上运行啊,这样有点不现实啊,我们把它部署到服务器上就可以搞定了,现在服务器也很便宜,做活动的时候一般 100 元以内就可以买一年。

部署在服务器

在服务器中运行程序,直接扫码登录微信,下面是我周五开始运行的,相隔 24 小时后,周六再次调用方法,获取新的天气信息。

发到群里效果如下图,当然,你还可以多加一些接口返回的信息或者自己想说的话。

可能存在的问题

1、我的微信登录不了网页版微信
因为 itchat 库和 wxpy 库都是调用微信的网页版接口,如果你的微信注册比较晚,被限制了网页版登录功能,那这个程序你无法运行。

2、发送不到指定群
先检查下群名称,把群名称一些 emoji 表情符号去掉,这些特殊符号可能导致无法识别。

群名称没错的话,看看自动发送信息的这个号有没有把这个群添加到通讯录。

这样,一个定时发送消息的小工具就完成了,你也可以在上面扩展,加上其他功能,这样就更完善了。

完整代码

  • jinshan-message.py
from twilio.rest import Client
import requests
from threading import Timer
from time import sleep# def get_weather():
#     url = 'http://v.juhe.cn/weather/index?cityname=上海&key=b0da46b36d3a2cce53fac9cdf51dc98a'   # 城市名cityname和key值换成自己的
#     weather_json = requests.get(url).json()
#     temperature = weather_json['result']['today']['temperature']
#     weather = weather_json['result']['today']['weather']
#     week = weather_json['result']['today']['week']
#     city = weather_json['result']['today']['city']
#     dressing_advice = weather_json['result']['today']['dressing_advice']
#     return temperature, weather, week, city, dressing_advicedef get_msg():url = 'http://open.iciba.com/dsapi/'   # 金山词霸每日一句 api 链接html = requests.get(url)content = html.json()['content']  # 获取每日一句英文语句note = html.json()['note']        # 获取每日一句英文的翻译语句return content, notewhile True:try:content, note = get_msg()msg_all = content + '\n' + note + '\n' + 'from 爱你的人'# Your Account Sid and Auth Token from twilio.com/console# DANGER! This is insecure. See http://twil.io/secureaccount_sid = '输入你的account_sid'auth_token = '输入你的auth_token'client = Client(account_sid, auth_token)message = client.messages \.create(body=msg_all, from_='+输入你获得的免费号码', to='+输入你验证的接收号码')print(message.sid)print(msg_all)t = Timer(86400, get_msg)  # Timer(定时器)是 Thread 的派生类,用于在指定时间后调用一个方法。t.start()t.join()# 异常处理,发送失败except:print('发送失败')break

parent-weather.py

from wxpy import *
import requests
from threading import Timer
from time import sleepbot = Bot(cache_path=True)  # 扫码登录微信,如果在Linux环境中运行,加一个参数 bot = Bot(console_qr=-2,cache_path=True)def get_weather():url = 'http://v.juhe.cn/weather/index?cityname=上海&key=xxx'  # 城市名cityname和key值换成自己的weather_json = requests.get(url).json()temperature = weather_json['result']['today']['temperature']weather = weather_json['result']['today']['weather']week = weather_json['result']['today']['week']city = weather_json['result']['today']['city']dressing_advice = weather_json['result']['today']['dressing_advice']return temperature, weather, week, city, dressing_advicewhile True:   # !!!调试时记得先把while True注释掉,不然会一直重复发送失败,一天限制100次调用的,成功后再加上注释try:temperature, weather, week, city, dressing_advice = get_weather()# 发送到微信群里my_groups = bot.groups().search('你的群名称')[0]   # 换成发送信息的群名称msg = '今天是:' + week + '\n' \+ city + '的天气:' + weather + '\n' \+ '今天温度:' + temperature +'\n' \+ '穿衣指南:' + dressing_adviceprint(msg)my_groups.send(msg)# 单独私发微信# my_friend = bot.friends().search(u'pk')[0]  # 此处是对方自己的昵称,不是微信号,也不是你的备注。# my_friend.send(msg)  # 发送文字t = Timer(86400, get_weather)  # Timer(定时器)是 Thread 的派生类,用于在指定时间后调用一个方法。t.start()t.join()# 异常处理,发送失败,发送提醒消息给自己except BaseException:my_friend = bot.friends().search(u'xxx')[0]  # 发送不成功,则发送消息给自己,提醒消息发送失败 xxx改成你自己微信的昵称my_friend.send(u'天气消息发送失败,请停止程序进行调试')break
  • weather-message.py
from twilio.rest import Client
import requests
from threading import Timer
from time import sleepdef get_weather():url = 'http://v.juhe.cn/weather/index?cityname=上海&key=输入你自己的key,在v.juhe.cn网站注册获取'  # 城市名cityname和key值换成自己的weather_json = requests.get(url).json()temperature = weather_json['result']['today']['temperature']weather = weather_json['result']['today']['weather']week = weather_json['result']['today']['week']city = weather_json['result']['today']['city']dressing_advice = weather_json['result']['today']['dressing_advice']return temperature, weather, week, city, dressing_advicewhile True:try:temperature, weather, week, city, dressing_advice = get_weather()msg = '今天是:' + week + '\n' \+ city + '的天气:' + weather + '\n' \+ '今天温度:' + temperature +'\n' \+ '穿衣指南:' + dressing_adviceprint(msg)# Your Account Sid and Auth Token from twilio.com/console# DANGER! This is insecure. See http://twil.io/secureaccount_sid = '输入你的account_sid'auth_token = '输入你的auth_token'client = Client(account_sid, auth_token)message = client.messages \.create(body=msg, from_='输入你获取的号码', to='+输入你验证过的号码')print(message.sid)t = Timer(86400, get_weather)  # Timer(定时器)是 Thread 的派生类,用于在指定时间后调用一个方法。t.start()t.join()# 异常处理,发送失败except BaseException:print('发送失败')break

天气变冷了,给你的爱人制作一个天气提醒小助手相关推荐

  1. python发微信提醒天气冷了注意保暖_给客户发天气变冷注意保暖短信 提醒客户注意保暖的温馨句子...

    导语:气温突然大跌,亲朋好友们都在相互问候,让彼此多穿点,别着凉.但是,很多人却忘了一些非常重要的人,那就是我们的"上帝"们.那么,给客户发天气变冷注意保暖短信要怎么写呢?下面小编 ...

  2. python发微信提醒天气冷了注意保暖_天气变冷的短信问候语_天凉了注意保暖的微信问候语...

    天气变冷的短信问候语 降温了,花落的声音风知道,思念的感觉心知道,变冷的温 度冬知道. 关于天气变冷的短信问候怎么说呢 ? 下面是小编给大家 分享的天气变冷的短信问候语,仅供大家参阅. 天气变冷的短信 ...

  3. python发微信提醒天气冷了注意保暖_天气变冷了,用Python给父母制作一个天气提醒小助手~...

    背景 最近天气变冷了,和父母聊天中得知,他们查看每天的天气预报不太方便,我记得小时候,每晚 19:30 左右,一家人都要守在电视机旁边收听第二天的天气情况. 如今,对于我们年轻人来说,获取天气情况很方 ...

  4. python发微信提醒天气冷了注意保暖_2019天气变冷的朋友圈说说 注意保暖的微信问候语...

    2019天气变冷的朋友圈说说 注意保暖的微信问候语 ★1☆ .天气转凉,送你一条神奇的短信,它具有"防寒保暖"之功效,凡是收到之人,寒风吹不到,感冒够不着,如果转发效果更加,快快行 ...

  5. python发微信提醒天气冷了注意保暖_秋天了,降温天气变冷注意保暖的微信早安问候语...

    国庆过后又进入到十一月天气是真的寒冷起来了,在这里小编和你一起来分享秋天了,降温天气变冷注意保暖的微信早安问候语,下面一起来看看. 1.轻轻的秋走了,正如冬轻轻地来,挥一挥衣袖,带来了寒冷的气流,那飘 ...

  6. python天气预报制作过程_天气变冷了,用Python给父母制作一个天气提醒小助手~...

    背景 最近天气变冷了,和父母聊天中得知,他们查看每天的天气预报不太方便,我记得小时候,每晚 19:30 左右,一家人都要守在电视机旁边收听第二天的天气情况. 如今,对于我们年轻人来说,获取天气情况很方 ...

  7. 天气变冷了,给父母制作一个天气提醒小助手

    本文转自公众号"Python知识圈" 点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本 ...

  8. 天气变冷了,用Python给爸妈制作一个天气提醒小助手

    天气慢慢变冷了,和父母聊天中得知,他们查看每天的天气预报不太方便,我记得小时候,每晚 19:30 左右,一家人都要守在电视机旁边收听第二天的天气情况. 如今,对于我们年轻人来说,获取天气情况很方便,但 ...

  9. pyqt 事件更新图片显示_使用PyQTamp;树莓派制作一个天气站

    吃灰的很久树莓派 b 偶然翻出来 发挥下余热,系统采用官方固件 Raspberry Pi OS(Raspbian) ,由于我的屏幕时由HDMI 驱动所以无需特殊配置其他驱动(我这装了下卖家给的驱动调整 ...

最新文章

  1. oracle每天一次差异备份,Oracle的差异增量备份和累积增量备份(zt)
  2. mongo explain分析详解
  3. C语言从青铜到王者——基础知识总结
  4. LeetCode题解之Copy List with Random Pointer
  5. 智慧城市_城市大脑:加速构建智慧城市
  6. MySQL常用数据类型以及内置函数
  7. 关于设置table样式后,不停点击按钮table中的数据会逐渐被最后一行替换的问题...
  8. windows 设置 rocketmq环境变量_RocketMQ 开篇
  9. 前端人最需要的学习资料有哪些?我现在免费送给你!
  10. 学习webpack系列之二 ---- (管理静态资源)
  11. linux tar 命令无效,linux Tar 命令
  12. ai中如何插入签名_如何在PDF文件中插入手写签名?手把手教会你,轻松设置签名...
  13. 移动端开发H5页面点击按钮后出现闪烁或黑色背景的解决办法
  14. 二冲程发动机均值模型仿真
  15. S100数字源表之LDO芯片电学特性测试方案
  16. 前端实现图片验证码效果(数字和字母)
  17. 2018桂林J - Stone Game(博弈)
  18. java打印小票的时间_Java编程打印购物小票实现代码
  19. golang语言 []interface{}和interface{}
  20. Java Web(day05) —— 请求和响应

热门文章

  1. c语言5 gt 2 gt 7 gt 8,格雷矿脉查找器【GT5】
  2. c语言current_ch如何使用,C++ seekp和seekg函数用法详解
  3. Spark 随机森林算法原理、源码分析及案例实战
  4. git一键切换多个项目分支并拉取远程
  5. python之爬去微信通信录好友头像
  6. 【内外网映射】通过外网ip来访问虚拟机服务器
  7. css position:absolute 居中
  8. android note分析,三星Note9七大亮点解析
  9. LeetCode每日一题———365. 水壶问题
  10. mysql分表的原则_Mysql分表准则