这个项目能做什么
NK Omladinac Niza 是来自 Niza(Koška Municipality)的同名足球俱乐部官方网站的代码仓库。该网站使用 Astro、Tailwind CSS v4 和 TypeScript 构建,托管在 GitHub Pages 上。体育数据的实时来源是 HNS Semafor。
主要特性是自动化内容刷新。数据由三个爬虫和一个手动来源填充:
1. HNS Semafor(体育数据)——脚本 scripts/scrape.mjs 使用 Cheerio 解析器提取俱乐部名称、体育场、地址、队徽、当前赛事和赛季、包含队徽与近期状态的完整联赛积分榜、所有赛事(联赛和杯赛)的全部赛季比赛、已赛比赛详情(阵容、进球、卡牌、裁判、观众人数)、带照片、号码、位置和出场统计的球员,以及射手榜、卡牌榜和出场次数榜。俱乐部参加的所有赛事都会按年龄组(成年队和 U-11 初学者组)抓取,赛事列表通过 Semafor 的 getCompetitions 处理程序获取。结果写入 src/data/hns.json,其中包含按赛事划分的数据以及统一的成年队视图。
2. Facebook 新闻——scripts/scrape-facebook.mjs 使用 Graph API v21.0 获取 @omladinacniza 主页的最新帖子。图片会下载到本地,因为 FB CDN URL 会在一到两周后过期。需要使用 GitHub Secrets 中的 FB_PAGE_ID 和 FB_ACCESS_TOKEN。
3. Facebook 相册(图库)——scripts/scrape-facebook-albums.mjs 获取所有相册和照片元数据,并设置每日历年配额(FB_PHOTOS_PER_YEAR,默认 200)。每张照片都会保存 500 像素的 WebP 缩略图和尺寸信息;网格中显示缩略图,灯箱中显示原图。主页头像和封面图片会被跳过。
4. 友谊赛——唯一允许手动编辑的文件是 src/data/friendlies.json,说明位于 friendlies.README.md;也可以通过 GitHub 在手机上编辑。
爬虫仅在内容发生变化时写入文件,因此不会产生不必要的提交和部署。GitHub Action 工作流 scrape-and-deploy.yml 按 cron 计划每 30 分钟运行一次,也会在每次推送到 main 时以及手动触发时运行。它会运行全部三个爬虫、提交更改,然后重新构建并部署;构建作业刻意不再重复抓取,以确保已发布网站与代码仓库不出现差异。
项目结构包括组件(Header、Footer、卡片、表格),包含 SEO/OG/favicon/manifest/RSS/View Transitions 设置的布局,用于基础路径、统一比赛数据、克罗地亚语数字变格和 Facebook 帖子格式化的库,以及各类页面:静态 .astro 页面、球员资料、比赛详情、每场比赛动态 OG 图片(satori 和 resvg)、RSS 订阅源、可订阅的 .ics 格式赛程,还有 PWA manifest。样式使用 Tailwind v4 的 @theme,配置了俱乐部颜色和字体。
本地开发需要 Node.js 22.12+。脚本包括带热重载的开发服务器、scrape:hns、scrape:facebook、scrape:fb-albums、scrape(运行全部三个爬虫)、用于生成 WebP 缩略图的 thumbs、会先自动抓取的 build、不抓取的 astro build、用于类型检查的 check,以及生产构建预览 preview。
网站通过 GitHub Actions 部署到 GitHub Pages,域名 omladinacniza.hr 通过 public/CNAME 配置(deSEC DNS);SITE 和 BASE 在 astro.config.mjs 中设置,并可通过 ASTRO_SITE 和 ASTRO_BASE 变量覆盖。所有俱乐部内容(标志、照片、历史)均归 NK Omladinac Niza 所有,代码则免费开放,供其他俱乐部参考借鉴。
评论
0 评分人数达到10人后显示
登录后参与讨论。