Goofi: ramener des google fonts en local en une ligne

Ceux qui, avec une ténacité et une abnégation forçant le respect autant que l'admiration, me suivent depuis longtemps se souviennent sans doute de Goofy, un script php permettant de récupérer les fontes de google sous forme de zip prêt à l'emploi...

Ben je trouvais ça encore un peu lourd, sans compter qu'il faut tout le temps modifier le script pour qu'il continue à fonctionner. Par voie de conséquence, j'ai repris l'idée mais en la modifiant quelque peu...

Ce nouveau script s'utilise de façon radicalement différente: en effet, il suffit de l'appeler via la balise du header, comme le fait la balise proposée par google, sauf qu'on remplace l'url de google par celle de goofi:

<link href="https://fonts.googleapis.com/css?family=Nunito+Sans|Roboto" rel="stylesheet">

devient

<link href="http://monserveur.com/goofi.php?family=Nunito+Sans|Roboto" rel="stylesheet">

Et... c'est tout.

Goofi.php va :

  1. chercher le css fourni par Google,
  2. récupérer les fontes pour les copier en local
  3. recrér le css en remplaçant les chemins google par les chemins locaux,
  4. stocker le tout sur le serveur
  5. et renvoyer le css sous forme de feuille de style.

Le téléchargement ne se fait que la première fois, et seulement depuis le serveur, ainsi l'usager n'a-t-il rien à craindre du flicage goorwellien

Le script en question:

<?php 
header("Content-Type: text/css");
$font_folder='fonts';
if (!empty($_GET['family'])){
    if (!is_dir($font_folder)){mkdir($font_folder);}
    $family=strip_tags($_GET['family']);
    $css_filename=urlencode($family).'.css';
    $css_file_url='http://fonts.googleapis.com/css?family='.urlencode($family);
    if (!is_file($css_filename)){
        $css=file_get_contents($css_file_url);

        preg_match_all("#font-family: '(?P<name>[^']+)[<img class="smile " src="https://www.warriordudimanche.net/plugins/WDD_replace/img/normal/satisfait.png"/>]*?url\((?P<url>[^\)]+)\)#", $css, $urls);

        foreach($urls['url'] as $nb=>$url){
            $font_file=$urls['name'][$nb].basename($url);
            if (!is_file($font_folder.'/'.$font_file)){
                $font=file_get_contents($url);
                file_put_contents($font_folder.'/'.$font_file, $font);
            }
            $css=str_replace($url,$font_folder.'/'.$font_file,$css);
        }
        file_put_contents($css_filename,$css );
    }else{
        $css=file_get_contents($css_filename);
    }
    exit($css);
}

Le Zip et le dépôt

❝ 3 commentaires ❞

1  jerry wham le

 
2  Nicolas le

Mais c'est super, merci beaucoup !

 
3  Beanux le

J'avais essayé de faire la même chose d'un point de vue utilisateur pour éviter le flicage pour les googles api.
Mon Dns renvoyait l'ip de mon serveur qui contenait les Gapi (un script python (très) moche qui récupère les l'ensemble des Gapi). Mais a cause de l'https ça ne passait pas vu que ça demandais un serveur google et que l'ip pointait sur mon serveur perso qui n'est pas google"

Je me suis rabatu sur le plugin foxreplace qui remplace l’appelle "ajax.googleapis.com" par mon serveur, et le tour est joué.
Je vais voir si je peux récupérer la liste des fonts de google pour faire de même avec.

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

Quelle est la deuxième lettre du mot nxhpf ?