树莓派生活助手之天气播报

  • will 

周六葛优瘫了一天,周日爬起来做点事。

做天气预报这个点子来源于一个知乎帖子中的高票答案。其实刚买树莓派的时候貌似也看过这个帖子,不过那会只是看看。现在倒是有兴趣把答案中提到的玩法都自己尝试一遍。首先就从天气预报这个小功能开始。

一、天气预报 API

想播报天气,当然需要找提供天气预报服务的平台,利用其 API 查询天气。

我选择使用的是 ShowAPI,使用方法也很简单,基于其提供的实例自行修改即可。

二、TTS 服务

ShowAPI 返回的是文本,因此还需要 TTS 来将其转为音频以播放。

我选择使用的是百度的语音合成接口,使用方法同样简单,根据文档说明处理即可。

三、定时运行

使用 crontab 定时运行指定脚本。

四、代码参考

run.sh

python3.4 liveHelper.py
mplayer weather.mp3

liveHelper.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import json
import uuid

url = 'http://route.showapi.com/9-2'
send_data = {'showapi_appid': '2***1' #此处请替换
     ,'showapi_sign': 'a27bc5d88cc54aeb8c5c*******5164' #此处请替换
     ,'areaid': ''
     ,'area': '广州'
     ,'needMoreDay': ''
     ,'needIndex': ''
     ,'needHourData': ''
     ,'need3HourForcast': ''
     ,'needAlarm': ''}
r = requests.get(url, params=send_data)
t = r.json()['showapi_res_body']['now']
t_aqi = t['aqiDetail']

url = 'https://openapi.baidu.com/oauth/2.0/token'
send_data = {'grant_type':'client_credentials'
     , 'client_id':'oVzCNZguDogwu*******zYzT' #此处请替换
     , 'client_secret':'11ee55bc251e8ca8a04*********000' #此处请替换
     }
r = requests.post(url, params=send_data)
access_token = r.json()['access_token']

def get_mac_address():
    node = uuid.getnode()
    mac = uuid.UUID(int = node).hex[-12:]
    return mac

url_base = 'http://tsn.baidu.com/text2audio'
params_tex = '气温 '+str(t['temperature'])+' 天气 '+t['weather']+' PM2.5 '+str(t_aqi['pm2_5'])+' 空气质量 '+t_aqi['quality']
params_tok = access_token
params_cuid = get_mac_address()
url = url_base+'?'+'tex='+params_tex+'&lan=zh'+'&tok='+params_tok+'&ctp=1'+'&cuid='+params_cuid
r = requests.get(url)

f = open('weather.mp3', 'wb')
f.write(r.content)
f.close()