「打造你的赛博名片📇」我在Github做天气预报☀️☁️⛅️⛈️ WeatherPainting开源整活

Hi!这里是JustHappy,上周北京大风天,闲来无事,听着窗外呼呼的大风,突然来灵感了,于是乎......我写了一个天气预报。有什么不一样呢,快来看看吧!

先向大家展示一下我的Github个人页,是不是有些特别?

哈哈,这就是我打造的一个Github个人页的天气组件,每天更新四次天气信息

  • 仓库已经开源:需要的朋友自取哈,用起来很简单,仓库中有文档,下面是链接

  • WeatherPainting

所以这个东西是怎么整的?

🛠️ 实现原理

整个项目的核心是通过 GitHub Actions 定时获取天气数据,生成 SVG 图片,并展示在 GitHub 个人页上。其实很简单,我们从几个方面入手吧

⛅️天气数据从哪里来?

既然是开源的项目,我们就用开源免费的Api去获取天气数据,我找到的是 open-meteo.com/

很简单,我们只需要把需要查询地址的经纬度传给它就行了

js 复制代码
const latitude = 26.3174;
const longitude = 119.5384;
const url = `https://api.open-meteo.com/v1/forecast?latitude=${latitude}&longitude=${longitude}&daily=weathercode,temperature_2m_max,temperature_2m_min&timezone=Asia%2FShanghai&forecast_days=7`;

const response = await fetch(url);

如何去构建我们想要的图像?

我为什么选择SVG?有以下几点原因吧:

  1. 可以从Iconfont上直接找到很多好看的图标物料,这是我选择的 天气-填充

  2. 方便JS操作构建最终的图像,标签化,逻辑简单明了

  3. 有后期升级为动态图片的潜力

我尝试过不同类型的动态图片,各有各的优缺点,比如Gif帧率不高观感不行、canvas没有SVG方便操作

如何更新天气数据?

.github/workflows 目录下,我配置了一个 GitHub Actions 工作流,设置为每天运行四次。每次运行时,会执行以下操作:

  • 获取最新的天气数据
  • 生成新的 SVG 图片
  • 将图片推送到 GitHub 仓库中

如何挂载我们的图像?

直接通过仓库下对应的地址去引用?抱歉,我发现了一下问题

⚠️ 1. GitHub 对 .svg 的 MIME 类型处理有一定安全策略

SVG 文件是可以嵌入 JavaScript 脚本的,所以 GitHub 对 SVG 文件(尤其是来自 main 分支的 raw.githubusercontent.com 地址)做了更严格的 防 XSS 限制在某些上下文(比如 Profile README)会被拒绝加载

于是呼我也只能使用骚操作

使用 GitHub Pages 托管 SVG

你可以用 GitHub Pages 创建一个静态站,然后把 SVG 放里面,比如:

你只需要在主仓库启用 GitHub Pages,然后把图片放进目录,你就可以在GitHub个人页的README中引用啦。于是呼我们的开源项目也是有了github page😂😂

有关开源的思考?

我想每个参与开源或者想参与开源的朋友都听说过Linus吧?对!就是那个创造了Linux和Git的男人

Linus认为驱动人类的是三点动机:生存,人在社会秩序中的位置,以及娱乐

这可能是他自传叫《just for fun》的原因之一吧,

有时候我会想为什么有那么多朋友参与开源,却始终是带着某个"目的"来的,为了完成某个"指标"而来的,却丢失了最开始的乐趣,也有很多人问:"你做这个的目的是什么?有什么意义?"

所以我回答:名利固然重要,但是有的时候你可以暂时忘掉,享受纯粹,但行好事莫问前程,Just for fun, Just Happy 也许你会收获不同的东西

哈哈!最后,如果你觉得不错,可以给小弟点个star吗?

➡️ 链接直达 github WeatherPainting

相关推荐
前端小配角10 分钟前
React难上手原因找到了,原来是因为坑太多了。。。
前端
是你的小橘呀12 分钟前
零基础也能懂!React Hooks实战手册:useState/useEffect上手就会,告别类组件
前端·架构
xhxxx12 分钟前
从样式到结构:TailwindCss + Fragment 如何让 React 代码更干净、更高效
前端·css·react.js
Maxkim15 分钟前
「✍️JS原子笔记 」深入理解JS数据类型检测的4种核心方式
前端·javascript·面试
小高00715 分钟前
Elips-Core:轻量级 Node.js Web 框架核心实现
前端·javascript·node.js
前端流一17 分钟前
Node.js 原生实现JSON-RPC及长进程双向通信实践
node.js
Focus_18 分钟前
SSE+broadcastChannel
前端
zabr20 分钟前
前端已死?我用 Trae + Gemini 零代码手搓 3D 塔罗牌,找到了新出路
前端·人工智能·aigc
Aotman_21 分钟前
Vue MutationObserver 监听
前端·javascript·vue.js·elementui·前端框架·ecmascript
专注前端30年25 分钟前
Vue3的生命周期钩子有哪些变化?
前端·javascript·vue.js