V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xurunfei
V2EX  ›  分享发现

分享个 macos 自动检测是否下雨的小工具

  •  
  •   xurunfei · 2020-08-26 12:24:26 +08:00 · 1989 次点击
    这是一个创建于 1577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于楼主比较懒,想着如果未来几天要下雨,那就自动提醒我,不下雨就别提醒我,通知通过 macos 的通知提醒给用户 img

    编写脚本

    脚本代码如下 ak 为百度地图的秘钥,可以自己去申请一个,个人用免费的就够用了

    #!/usr/local/bin/python3
    # coding=utf-8
    
    from urllib import request, parse
    import json
    from subprocess import Popen, PIPE
    
    if __name__ == '__main__':
    	# 百度地图的 ak,需要自己去申请
        ak='xxxx'
        # 获取地理位置
        locationUrl = "http://api.map.baidu.com/location/ip?ak=%s"%ak
        response = request.urlopen(locationUrl)
        read = response.read()
        info = json.loads(read)
        address = info["content"]["address"]
        # 获取天气
        url = "http://api.map.baidu.com/telematics/v3/weather?output=json&ak=%s&location="%ak
    
        response = request.urlopen(url + parse.quote(address))
        response_read = response.read()
        weater = json.loads(response_read)
    
        weater_data = weater["results"][0]["weather_data"]
        # 判断是否下雨
        hasWeater = False
        msg = ''
        msgDetail = ""
        day = {1: '今天', 2: '明天', 3: '后天', 4: '大后天'}
        i = 1
        for we in weater_data:
            encode = we['weather']
            if '雨' in encode:
                hasWeater = True
                msg += day[i] + ','
                msgDetail += day[i] + ' : ' + encode + '   '
            i += 1
        msg += '有雨'
        args = ['display notification "' + msgDetail + '" with title "天气预报" subtitle "' + msg + '"']
        if hasWeater:
            p = Popen(['osascript', '-e'] + args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    
    
    

    添加定时器,定时检查

    crontab -e 写入

    0 9,11,15,18 * * *  python3 /User/.../weather.py
    

    注: 文件地址需要全路径 我这里设置的是 9,11,15,18 点检查下,可以自己改

    设置权限

    macos 新版本需要给 cron 弄下权限,这个当时找了我好久

    系统偏好设置 > 安装性与隐私 > 完全磁盘访问权限 > 隐私 > 完全的磁盘访问权限 把 /usr/sbin/cron 拖进去就好

    12 条回复    2020-08-28 10:12:14 +08:00
    tslling
        1
    tslling  
       2020-08-26 12:44:34 +08:00 via Android
    “自动检测是否下雨”,总感觉怪怪的
    sampeng
        2
    sampeng  
       2020-08-26 12:54:55 +08:00 via iPhone
    出去看一眼,完事
    imn1
        3
    imn1  
       2020-08-26 13:32:56 +08:00
    本来想问,如何分辨下雨还是楼上浇水……
    还以为苹果硬件还能做这事
    xurunfei
        4
    xurunfei  
    OP
       2020-08-26 13:57:13 +08:00
    @tslling 哈哈,不要在意这些细节
    @sampeng 未来,未来,总不能出去看一眼未来吧,未来几天的都能看
    @imn1 那可不得了,你说的得去问问摄像头哈哈
    yuhangch
        5
    yuhangch  
       2020-08-26 14:49:20 +08:00
    懒人真的🐂🍺哈哈哈
    lxfcool
        6
    lxfcool  
       2020-08-26 18:08:29 +08:00
    之前也写过类似的 py, 直到某天很忙没用电脑, 导致当天没运行 py
    再之后就挂到服务器上了, 邮件提醒了
    murmur
        7
    murmur  
       2020-08-26 18:14:39 +08:00
    这东西跟 mac 有啥关系,数据源也不行啊,至少得是彩云天气吧
    murmur
        8
    murmur  
       2020-08-26 18:15:32 +08:00
    说白了,实用性为 0,昨天天气预报就说今天下大雨,然后早晨改成晴转阴了,结果 5 点多真的下暴雨了,艹
    morningtzh
        9
    morningtzh  
       2020-08-27 10:50:04 +08:00
    天气预报没什么用,另外起床 hey Siri 就能解决啦~~
    小米的闹钟,早上闹铃的时候也会播报天气和新闻~~
    xurunfei
        10
    xurunfei  
    OP
       2020-08-27 11:35:56 +08:00
    @murmur 天气预报一直都只是参考,还好吧,像我南方,夏天你就别奢望能准,一个小时变一次
    @morningtzh 不太喜欢用 siri 哈哈,给我感觉有点傻傻的
    KennyMcCormick
        11
    KennyMcCormick  
       2020-08-27 16:59:56 +08:00
    以为是人在室内,插件可以告诉我室外是否正在下雨。
    xurunfei
        12
    xurunfei  
    OP
       2020-08-28 10:12:14 +08:00
    @KennyMcCormick 那也可以,稍微改改,改为当前的天气 查询就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2231 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 01:01 · PVG 09:01 · LAX 17:01 · JFK 20:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.