超简单只需简单几步即可为TA定制天气小助理

38次阅读

共计 3948 个字符,预计需要花费 10 分钟才能阅读完成。

前提

虽然我们每天都会查看天气,但是如果你能够用限制微信每天早上七点定时为 TA 推送天气预报,生活指数。直接为 TA 提供过滤好的天气信息,让 TA 一目了然。而且操作简单上手,任何人都可以零基础搭建,为你的 TA 带来一丝小惊喜。

效果如图

准备

  1. 运行环境 win10 Linux
  2. python 3.4 版本
  3. 一个微信小号
  4. 和风天气 api
  5. 一个编辑器,就是文本编辑器也可以

主要代码

1. 安装 python 3.7 版本

小伙伴如果是 window 电脑可以直接在 Python 官网 选择 download 直接下载

直接点击下载好的 exe 文件进行安装,记得将环境变量配置选项勾选上。如下图:

安装完成之后,我们可以新建文件夹,从 git 上将代码 clone 下来。我们直接在文件夹中摁住 shift + 鼠标右键 唤出 powerShell 查看 Python 版本。

如果大家还有不明白的可以参考 Python 安装教程

2. 为项目安装相关模块

可通过 pip install 直接安装相关模块,如运行时还有因模块报错,也可以直接 pip install 模块名直接安装即可。本项目以及后续相关都依赖于以下模块。

#coding=utf8
import requests
from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.parse import urlencode
from threading import Timer
import re
from wxpy import *
import  schedule
import  time
import http
import  json 
import datetime
import random

重要: 其中 wxpy 模块是本项目以及后续项目中很重要的模块,就是因为这个开源项目,我们才能使其与微信产生交互。

wxpy

 控制路由器、智能家居等具有开放接口的玩意儿
运行脚本时自动把日志发送到你的微信
加群主为好友,自动拉进群中
跨号或跨群转发消息
自动陪人聊天
逗人玩
...

项目介绍以及安装方法,大家可以去主页想看 wxpy

3. 初始化机器人

参考 登录文档

bot = Bot(cache_path=True,console_qr = 1)
// 初始化机器人,扫码登录 console_qr 是用于登录的二维码展示默认为 1
bot.enable_puid('wxpy_puid.pkl')
// 机器人启用 puid 属性,并指定 puid 所需的映射数据保存 / 载入路径

4. 设置模拟请求接口相关

def api(url):
    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Encoding': 'gzip, deflate',
        'Accept-Language': 'zh-CN,zh;q=0.8',
        'Connection': 'keep-alive',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'
    }
    timeout = random.choice(range(80, 180))
    data = requests.get(url, headers=header, timeout=timeout)

    return data.json()

header 中用来设置模拟请求接口的浏览器相关参数防止 api 以为我们是爬虫抓取。并设定随机请求时间。

5. 设置相关请求,以及需要的信息字段拼接

def sendweather(city, xx):
    url = 'https://free-api.heweather.com/s6/weather/forecast?location='+city+'&key= 和风 key'
    PMurl = 'https://free-api.heweather.com/s6/air/now?parameters&location='+city+'&key= 和风 key'
    lifeurl = 'https://free-api.heweather.com/s6/weather/lifestyle?location='+city+'&key= 和风 key'
    
    temp = api(url)
    temp = temp['HeWeather6'][0]
    update = temp['update']
    now = temp['daily_forecast'][0]
    nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

    pm = api(PMurl)
    pm = pm['HeWeather6'][0]
    airnow = pm['air_now_city']

    life = api(lifeurl)
    
    life = life['HeWeather6'][0]
    life = life['lifestyle']
    result =  xx + city +'---' + '\n'+ '\n'\
    + '今天天气:'+ now['cond_txt_d'] + '转' + now['cond_txt_n'] + '\n'\
    + '今天温度:'+ now['tmp_min'] + '°C ~' + now['tmp_max'] + '°C' + '\n'\
    + '风向:'+ now['wind_dir'] + '' + now['wind_sc'] +' 级 '+ now['wind_spd'] +' 公里 / 小时 '+'\n'\
    + '相对湿度:'+ now['hum'] + '%' + '\n'\
    + '降水量:'+ now['pcpn'] + 'ml' + ',降水概率:'+ now['pop'] + '%' + '\n'\
    + '能见度:'+ now['vis'] + '公里' + '\n'\
    + '------------------------------------------' + '\n'\
    + '今天空气质量:'+'\n'\
    + '空气质量指数:'+ airnow['aqi']+'\n'\
    + '主要污染物:'+ airnow['main']+'\n'\
    + '空气质量:'+ airnow['qlty']+'\n'\
    + '二氧化氮指数:'+ airnow['no2']+'\n'\
    + '二氧化硫指数:'+ airnow['so2']+'\n'\
    + '一氧化碳指数:'+ airnow['co']+'\n'\
    + 'pm10 指数:'+ airnow['pm10']+'\n'\
    + 'pm25 指数:'+ airnow['pm25']+'\n'\
    + '臭氧指数:'+ airnow['o3'] +'\n'\
    + '------------------------------------------' + '\n'\
    + '1、'+ life[0]['txt']+'\n\n'\
    + '2、'+ life[1]['txt']+'\n\n'\
    + '3、'+ life[2]['txt']+'\n\n'\
    + '????????????????????????????????????????'+'\n\n'\
        
    result =  result + '发送时间:' +  nowTime + '\n'

    return result

小伙伴可以在和风官网注册账户,其中有免费的天气、生活指数 api 可以使用。免费的已经可以满足我们的需求。

6. 获取发送对象

def auto_send(msg):
    weather = sendweather('苏州', msg) 
    // 用来请求刚刚封装的请求天气
    
    Lie = bot.friends().search(u'Lie')[0]
    // 查找你要发送的对象,必须在你的好友列表里也可以为群
    后面是好友的昵称,记得不是备注名哦!WxpyChat = bot.groups().search('???? (๑• . •๑)')
    // 获取要发送的群
    
    Lie.send(weather)
    // 发送
    
    WxpyChat.send(weather)
    // 可以设置多个发送对象

7. 设置定时发送事件

schedule.every().day.at("13:56").do(auto_send, '早上好,')
schedule.every().day.at("13:57").do(auto_send, '晚上好,')

8. 为程序设置持续运行保证项目一直在线

while True:
    schedule.run_pending()
    time.sleep(1)

9. 至此,一个简单的天气小助理就完成了,可以按照以上步骤来实验一下。

10. 扩展

我们还可以为其添加主动询问操作,比如发送城市,直接获得当前城市的天气,只需要在第 6 步添加如下代码即可。

Lie = bot.friends().search(u'Lie')
@bot.register(Lie)
// 注册对哪个好友的回复生效
def auto_reply_all(msg):
if '苏州' in msg.text:
    nowWeather = sendweather(msg.text, msg) 
    msg.sender.send(nowWeather)

git

本项目的代码以上传我的 github,如有需要大家可以 clone 下载

wepython

注意事项

  1. 在 window 下 可以用 powerShell 来运行 python 程序。
  2. 微信号要用 2017 年之前注册的微信号,新注册的微信号不能在 web 网页登录无法使用。
  3. 大家如果没有小号,需要购买的请注意对方诚信度。不要为了这个上当受骗。

下期预告

用 python + wxpy 为 TA 定制贴心喝水小助理。

关于我

小夭同学,页面切图仔。

想体验机器人的小伙伴可以加下面二维码,验证信息 【py】 自动通过拉你入群体验机器人其他功能。

欢迎小伙伴关注我的微信 【小夭同学】 一起学习前端相关知识。

正文完
 0