hammerspoon是MacOS系统下一款实现自动化的工具,通过lua脚本扩展系统功能。相比其他通过python脚本,nodejs脚本或原生的automator, hammerspoon更加简单,提示框界面美观。也可以使用python和pync库实现监控通知,nodejs和node-notifier组件实现通知的方案。毕竟工具的自动化是提高生产力的必要因素。
#配置
hammerspoon可以使用brew安装,也可以直接在官网下载二进制文件
1 2 3 4 5
| #github下载页面 https://github.com/Hammerspoon/hammerspoon/releases
#brew安装 brew install hammerspoon
|
安装完成后,在启动台
中可以看到已安装的hammerspoon图标, MacOS的菜单栏上会显示一个锤子图标。
hammerspoon默认配置文件是~/.hammerspoon/init.lua
配置文件目录
1 2 3 4 5 6
| .hammerspoon ├── Spoons ├── init.lua └── weather └── weather.lua
|
#功能
在hammerspoon文档中,支持运行应用、电池管理、window窗口管理、对话框、网络管理等等功能;其中hammerspoon提供了一个hs.http库用来实现http相关请求功能。
以天气功能
为示例来了解hammerspoon使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
local urlApi = 'https://www.tianqiapi.com/api/?version=v1&appid=申请ID&appsecret=申请密码' local menubar = hs.menubar.new() local menuData = {}
local weaEmoji = { lei = '⛈', qing = '☀️', shachen = '😷', wu = '🌫', xue = '❄️', yu = '🌧', yujiaxue = '🌨', yun = '☁️', zhenyu = '🌧', yin = '⛅️', default = '' }
function updateMenubar() menubar:setTooltip("天气预报") menubar:setMenu(menuData) end
function getWeather() hs.http.doAsyncRequest(urlApi, "GET", nil,nil, function(code, body, htable) if code ~= 200 then print('get weather error:'..code) return end rawjson = hs.json.decode(body) city = rawjson.city menuData = {} for k, v in pairs(rawjson.data) do if k == 1 then menubar:setTitle(weaEmoji[v.wea_img]) titlestr = string.format("%s %s %s 🌡️%s 💧%s 💨%s 🌬 %s %s", city,weaEmoji[v.wea_img],v.day, v.tem, v.humidity, v.air, v.win_speed, v.wea) item = { title = titlestr } table.insert(menuData, item) table.insert(menuData, {title = '-'}) else titlestr = string.format("%s %s %s 🌡️%s 🌬%s %s", city, weaEmoji[v.wea_img],v.day, v.tem, v.win_speed, v.wea) item = { title = titlestr } table.insert(menuData, item) end end updateMenubar() end) end
menubar:setTitle('⌛') getWeather() updateMenubar()
hs.timer.doEvery(3600, getWeather)
|
示例二:定时获取股票行情
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
local XQAPI = "" local menubar = hs.menubar.new() local menuData = {}
local stockList = 'SH000001'
function updateMenubar() menubar:setMenu(menuData) end
function getStock(fisrt) fisrt = fisrt or false
api = string.format("%s/?symbol=%s", XQAPI, stockList) hs.http.doAsyncRequest(api, "GET", nil, headers, function(code, body, htable) if code ~= 200 then print('获取数据错误:'..code) return end menuData = {}
rawjson = hs.json.decode(body) for k, v in pairs(rawjson.data) do titles = string.format("🇨🇳%s ¥%s 🚀%s 👆%s 👇︎%s 🚗%s 💰%.3f/亿 🤝%s", v.symbol, v.current, v.percent..'%', v.high, v.low, v.open, v.amount/100000000, v.turnover_rate..'%' ) table.insert(menuData, {title = titles}) end updateMenubar() end) end
menubar:setTitle('🚨') getStock(true) updateMenubar() hs.timer.doEvery(600, getStock)
|
hammerspoon可以实现自动化功能还有很多,仅通过hs.http
和 hs.timer
功能就可以监控实时某些服务稳定性,怎么玩出花样还是依赖各位看官们的脑洞了 :)
#参考
hammerspoon官方文档
hammerspoon awsome项目
lua十分钟教程