马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?点击注册
x
本帖最后由 0x1313038 于 2022-7-20 18:23 编辑
先放个效果图
/零 简介
这是一个显示实时天气的桌面插件,天气信息来自于和风天气API。
/壹 工作原理 简述:每次打开或更新天气信息时,插件运行Lua脚本,运行脚本时首先连接和风天气API获取天气JSON数据,然后解析出有用的数据,最后更新插件UI。整个过程一般不超过1s。 详细:初始化天气插件时,首先运行Lua脚本 "LuaScript.lua",脚本中后台运行从和风天气API获取天气数据的程序 "GetWeather.exe",该程序使用C#编写。"GetWeather.exe" 首先从读取 "Key.txt" 和风天气API的Key,该Key需要用户自己获取,和风天气提供免费非商业的Key。接着 "GetWeather.exe" 读取位置信息,位置信息存储在 "LocationID.txt" 文件中。"GetWeather.exe"前两个步骤所需文件任意一个不存在都将报错且无法获取天气信息。然后 "GetWeather.exe"解析和风天气API返回的数据并写入文件。在 "GetWeather.exe"获取到数据之前,Lua脚本需一直等待。最后Lua脚本读取 "GetWeather.exe" 生成的文件、解析文件并更新插件UI。 /贰 目录结构 /叁 参数说明 Weather.ini 第2行:Update=60000 皮肤刷新间隔,单位毫秒,1000为1s刷新一次。住:和风天气每天允许获取10000次数据。 第13行:ScreenScale=2 皮肤尺寸缩放 Key.txt 和风天气API的key。获取方法: 开发文档:实时天气 - API | 和风天气开发平台(qweather.com) 没有账户请自行注册。 复制Key存入指定目录下即可。 LocationID.txt 存储地理位置的文件,可以通过 “GetLocation.exe” 获取,如果其获取的信息不准确,则可以通过查询“中国城市-ID表 - 和风天气.csv” 文件手动修改。“中国城市-ID表 - 和风天气.csv” 文件由和风天气API提供。
肆/ 写在最后 附件中两个.rar压缩包为GetWeather.exe和GetLocation.exe的Visual Studio工程文件,基于C#编写。由于我刚刚接触C#,写的代码并不好,欢迎C#大神帮忙完善。 Rainmeter刷新组件的时间过长有可能导致Rainmeter崩溃,主要是执行Lua脚本的时间过长导致,修改时注意这一点。 存在的问题:Rainmeter每次刷新控件时,都是在Lua脚本中调用GetWeather.exe并等待其返回数据,在Lua脚本中可以使用os.execute()打开程序,但是os.execute()本质上是执行cmd命令,因此,这样做会在每次刷新控件时都会闪出一个cmd的黑色窗口。因此,本设计中使用Rainmeter提供的SKIN:BANG()进行刷新。但是,每次刷新Luau程序都要等待GetWeather.exe返回完整的数据,而Lua标准库中似乎并不包含线程等待的函数,因此,本设计中使用一个循环结构来等待,这样做会消耗大量的CPU资源(但影响时间较短)。大家如果有什么更好的方法,欢迎在评论区中讨论。
|