zoukankan      html  css  js  c++  java
  • Raspberry pi 定时天气播报

    Raspberry pi 定时天气播报

        操作步骤:   

        1. 简单的写了python脚本

        2. 添加定时计划里执行

        3.使用百度的天气接口:http://api.map.baidu.com/telematics/v3/weather?location=city&output=json&ak=api_key

         百度的语音合成接口:http://tsn.baidu.com/text2audio?tex=text&lan=zh&cuid=cuid&ctp=1&tok=token

      python脚本内容

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    import os
    import urllib.request
    import sys
    import json
    import time
    
    #get token
    def get_token():
        api_key="your api key"
        sec_key="your secret key"
        auth_url="https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id="+api_key+"&client_secret="+sec_key
        
        res = urllib.request.urlopen(auth_url)
        #print(res.read())
        json_data = res.read().decode('utf-8')
        #print(json_data)
    
        result = json.loads(json_data)['access_token']
        return result
    
    
    def get_weather(city):
        api_key="your api key"
        weather_url="http://api.map.baidu.com/telematics/v3/weather?location="+city+"&output=json&ak="+api_key
        
        res = urllib.request.urlopen(weather_url)
        json_data = res.read().decode('utf-8')
        #print(json_data)
        json_data = json.loads(json_data)
        #get json data
        #check result status
        status = json_data['status']
        isTom = time.localtime().tm_hour>18
        index = 1 if isTom else 0
        initStr = '明天' if isTom else '今天'
        if status=='success':
            results=json_data['results'][0]
            pm25=results['pm25']
            weather_data=results['weather_data']
            date=weather_data[index]['date']
            weather=weather_data[index]['weather']
            wind=weather_data[index]['wind']
            temperature=weather_data[index]['temperature'].replace('~','')
            if not isTom:
                return'{}是{} PM2.5是{} 天气{} {} 温度为{}'.format(initStr,date,pm25,weather,wind,temperature)
            else:
                return'{}是{} 天气{} {} 温度为{}'.format(initStr,date,weather,wind,temperature)
        else:
            return ''
    
    
    token=get_token()
    weather=get_weather('beijing')
    
    if os.path.exists('/home/pi/weather/weather.txt'):
        with open('/home/pi/weather/weather.txt','wt') as f:
            f.write(weather)
            f.close()
            print(weather)
    else:
        print('weather.txt not exists')
            
    
    #tts
    url='http://tsn.baidu.com/text2audio?tex='+weather+'&lan=zh&cuid=raspberrypi2&ctp=1&tok='+token
    
    #print(url)
    try:
        os.system('/usr/bin/mplayer "%s"' %(url))
    except Exception as e:
        print('Exception',e)

        添加到crontab 定时计划里,每天早上7:10执行

    10 7 * * * /usr/local/bin/python3.5 /home/pi/weather/weather.py

        v附录:百度天气API返回的JSON数据

    {
      "error": 0,
      "status": "success",
      "date": "2016-02-25",
      "results": [
        {
          "currentCity": "beijing",
          "pm25": "33",
          "index": [
            {
              "title": "穿衣",
              "zs": "较冷",
              "tipt": "穿衣指数",
              "des": "建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"
            },
            {
              "title": "洗车",
              "zs": "较适宜",
              "tipt": "洗车指数",
              "des": "较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"
            },
            {
              "title": "旅游",
              "zs": "适宜",
              "tipt": "旅游指数",
              "des": "天气较好,同时又有微风伴您一路同行。虽会让人感觉有点凉,但仍适宜旅游,可不要错过机会呦!"
            },
            {
              "title": "感冒",
              "zs": "易发",
              "tipt": "感冒指数",
              "des": "昼夜温差大,且空气湿度较大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。"
            },
            {
              "title": "运动",
              "zs": "较适宜",
              "tipt": "运动指数",
              "des": "天气较好,无雨水困扰,较适宜进行各种运动,但因天气凉,在户外运动请注意增减衣物。"
            },
            {
              "title": "紫外线强度",
              "zs": "最弱",
              "tipt": "紫外线强度指数",
              "des": "属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"
            }
          ],
          "weather_data": [
            {
              "date": "周四 02月25日 (实时:4℃)",
              "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/qing.png",
              "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png",
              "weather": "",
              "wind": "微风",
              "temperature": "7 ~ -5℃"
            },
            {
              "date": "周五",
              "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png",
              "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png",
              "weather": "多云转晴",
              "wind": "微风",
              "temperature": "8 ~ -3℃"
            },
            {
              "date": "周六",
              "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png",
              "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/yin.png",
              "weather": "多云转阴",
              "wind": "微风",
              "temperature": "6 ~ -3℃"
            },
            {
              "date": "周日",
              "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png",
              "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png",
              "weather": "多云转晴",
              "wind": "北风3-4级",
              "temperature": "6 ~ -4℃"
            }
          ]
        }
      ]
    }
  • 相关阅读:
    关于HTML(七)--------HTML废弃的标签
    关于HTML(六)--------canvas
    抓包神器之Charles,常用功能都在这里了(转自https://blog.csdn.net/mxw2552261/article/details/78645118)
    混合开发的坑(7) ---输入文本时,键盘遮挡
    关于HTML(五)---------meta标签
    关于HTML(四)---------使用data-的好处
    关于HTML(三)---------xhtml和html的区别
    关于HTML(二)---------浏览器的标准模式和怪异模式
    关于HTML(一)---------HTML5新特性2
    关于HTML(一)---------HTML5新特性1
  • 原文地址:https://www.cnblogs.com/tianzhenyun/p/5218811.html
Copyright © 2011-2022 走看看