概述
前言(废话):最近买了个服务器,有点激动,就想着拿它来干点啥。之前学习过一点爬虫皮毛,我想我可以写一个微信自动发送天气到手机上的程序,到时候放我的服务器上一挂,每天都能准时收到天气提醒,岂不美滋滋。
说干就干,首先得爬取天气信息,这里我直接调用了一个返回天气信息的api,对这个url访问,我们可以得到json数据,对这个数据进行解析,我们就可以得到所需要的信息。于是我用了postman进行访问,可以看到,我们需要的正是forecast这个键所对的值信息。当然,这里面有很多天的数据,然而,过于远的时间气候预测准确率可能会不高,所以我只获取今日和明日的信息。
现在,我们对返回的json数据进行解析,获取我们需要的信息。json就是列表、字典的嵌套,我们只要使用对列表和字典一样的操作就可从中获取数据,这个很简单的。
import requests
import json
url='http://t.weather.sojson.com/api/weather/city/101110101'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0'}
response = requests.get(url, headers=headers)
data = json.loads(response.text)
# 今日信息
today = data['data']['forecast'][0]['ymd']
today_hightem = data['data']['forecast'][0]['high']
today_lowtem = data['data']['forecast'][0]['low']
today_win = data['data']['forecast'][0]['fx']+' '+data['data']['forecast'][0]['fl']
today_wea = data['data']['forecast'][0]['type']
notice = data['data']['forecast'][0]['notice']
# 明日信息
tomorrow = data['data']['forecast'][1]['ymd']
tomorrow_hightem = data['data']['forecast'][1]['high']
tomorrow_lowtem = data['data']['forecast'][1]['low']
tomorrow_win = data['data']['forecast'][1]['fx'] + ' ' + data['data']['forecast'][1]['fl']
tomorrow_wea = data['data']['forecast'][1]['type']
为了我们发送到微信上的信息美观,我们将信息进行整合,将最终信息放进info这个列表。
today_data = '['+today +']' + 'n ' + '温度:' + today_hightem + '/' + today_lowtem + 'n ' + '天气:' + today_wea + 'n ' + '风力:' + today_win + 'nn'
tomorrow_data = '['+tomorrow +']' + 'n ' + '温度:' + tomorrow_hightem + '/' + tomorrow_lowtem + 'n ' + '天气:' + tomorrow_wea + 'n ' + '风力:' + tomorrow_win
notice = 'nn温馨提醒:' + notice
info = [today_data, tomorrow_data, notice]
信息获取到了,我们该使用itchat模块登录微信,实现信息的发送。如果是之前没有下载过这个模块,这里也有安装方法。
> pip install itchat # windows安装
$ pip3 install itchat # linux安装
这里只是使用itchat中简单的功能,关于itchat的详细使用,请访问该项目原作者的教程:https://itchat.readthedocs.io/zh/latest/
import itchat
itchat.auto_login(hotReload=True, enableCmdQR=True) # hotReload=True, 即使程序关闭,一定时间内重新开启也可以不用重新扫码; enableCmdQR=True, 可以在登陆的时候使用命令行显示二维码
account = itchat.get_friends(NickName) # 这里的NickName是你给微信好友的备注
for item in account:
if item['RemarkName'] == NickName: # 由于每次登录时朋友的UserName都会变,所以我们这样做
user = item['UserName'] # 获取微信朋友的UserName
# 给自己发送信息,发送至文件传输助手
itchat.send('【西安天气】nn' + info[0] + info[1] + info[2], toUserName='filehelper')
# 给朋友发送信息
itchat.send('【西安天气】nn' + info[0] + info[1] + info[2], toUserName=user)
下面,我们写一个定时功能,获取系统时间,当系统时间与我们设定的相同时,开始发送消息。貌似有个datatime可以干这事,所以我们可以不用做这个繁琐的事了,能简单就简单。
import datetime
TIME = '090000' # 这里你设置自己需要的时间090000代表9时0分0秒
time = str(datetime.datetime.now().strftime('%H%M%S'))
if time == TIME:
run() # 执行代码
代码写好,下面我们将其部署到服务器上,可以在windows下使用Xshell登录,或者在linux下使用ssh远程登录。这里我使用的是Xshell,选择哪个问题不大。登陆后,我将脚本放入写在了weather.py文件。注意:下面使用的命令都是在ubuntu下操作的,如果系统是centos,可能会不太一样。
本来想用supervisor使脚本不断运行,但在使用的时候,报了错,显示ERROR(spawn error),查了很多资料,还是没有解决。所以用nohup使脚本不断运行吧!这就很难受。好,我们开始操作!
关于nohup
$ python3 weather.py & # 将python3 weather.py任务放到后台 ,关闭Xshell,对应的任务也跟着停止。
$ nohup python3 weather.py # 将python3 weather.py任务放到后台,关闭标准输入,终端不再能够接收任何输入(标准输入),重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
$ nohup python3 weather.py & # 将python3 weather.py任务放到后台,但是依然可以使用标准输入,终端能够接收任何输入,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。
我们使用nohup python3 weather.py &命令。
注意:在正式使用前,先将代码中的时间改到最近的时间运行一下,使用微信登录,下次这个代码就能直接运行,运行完后,再将代码中时间改至你想定时发送消息的时间。
效果图:
源码:https://github.com/kingdowliu/Weather
最后
以上就是难过小鸭子为你收集整理的itchat实现微信定时发送天气情况的全部内容,希望文章能够帮你解决itchat实现微信定时发送天气情况所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复