Files
MokoCassiopeia/scripts/download-google-fonts.php
2026-04-08 01:45:26 +00:00

74 lines
2.2 KiB
PHP

<?php
/* Copyright (C) 2026 Moko Consulting <hello@mokoconsulting.tech>
*
* This file is part of a Moko Consulting project.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
* # FILE INFORMATION
* DEFGROUP: Joomla.Template.Site
* INGROUP: MokoCassiopeia
* PATH: scripts/download-google-fonts.php
* VERSION: 03.09.03
* BRIEF: Download Google Fonts (woff2) for local self-hosting
*/
$fontsDir = __DIR__ . '/../src/media/fonts';
if (!is_dir($fontsDir)) {
fwrite(STDERR, "Error: Fonts directory not found: {$fontsDir}\n");
exit(1);
}
$fonts = [
'Roboto' => 'https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;700&display=swap',
'Noto Sans' => 'https://fonts.googleapis.com/css2?family=Noto+Sans:wght@100;300;400;700&display=swap',
'Fira Sans' => 'https://fonts.googleapis.com/css2?family=Fira+Sans:wght@100;300;400;700&display=swap',
];
$userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';
echo "Google Fonts Downloader for MokoCassiopeia\n";
echo str_repeat('=', 48) . "\n";
echo "Target: {$fontsDir}\n\n";
foreach ($fonts as $name => $url) {
echo "Downloading {$name}...\n";
$ctx = stream_context_create(['http' => ['header' => "User-Agent: {$userAgent}\r\n"]]);
$css = @file_get_contents($url, false, $ctx);
if ($css === false) {
fwrite(STDERR, " FAIL: could not fetch CSS for {$name}\n");
continue;
}
preg_match_all('#https://fonts\.gstatic\.com[^)]*\.woff2#', $css, $matches);
if (empty($matches[0])) {
fwrite(STDERR, " FAIL: no woff2 URLs found for {$name}\n");
continue;
}
$count = 0;
foreach ($matches[0] as $fontUrl) {
$filename = basename($fontUrl);
$dest = $fontsDir . '/' . $filename;
$data = @file_get_contents($fontUrl, false, $ctx);
if ($data === false) {
fwrite(STDERR, " FAIL: {$filename}\n");
continue;
}
file_put_contents($dest, $data);
$size = round(strlen($data) / 1024, 1);
echo " OK: {$filename} ({$size} KB)\n";
$count++;
}
echo " {$count} file(s) downloaded\n\n";
}
echo "Done.\n";