Seenthis, j’ai une question (avec application à SPIP). Est-ce qu’il existe une méthode recommandée…

/374212

  • Je manque un peu de temps, mais je voudrais commencer à récapituler les éléments qui compliquent l’aspiration d’un site #SPIP en local (ou en « statique » – utile aussi pour faciliter la sauvegarde d’un site en ligne – site d’archives par exemple). À compléter…

    – Rappel, on peut aspirer tout un site d’un coup avec la commande :

    wget -r -k -np -e robots=off AdresseDeLaPage

    http://seenthis.net/messages/130117

    [Edit] Ajouter -e robots=off, sinon le robots.txt usuel de SPIP bloque les éléments dans squelettes (donc par exemples les webfonts).

    – D’abord passer en URL qui se terminent avec les terminaisons .html. Personnellement je préfère simplifier au maximum avec le format d’URL « URLs Objets HTML » (de la forme article1.html…) ; il faudrait faire des essais avec des URL qui provoquent des noms de fichiers en arabe (ou chinois ou ce que tu veux) pour voir ce que ça donne en local sur différents systèmes.

    robots.txt de SPIP est trop restrictif et bloque l’aspiration des fichiers dans /IMG, /plugins, etc. (Perso je vire robots.txt.html.)
    http://seenthis.net/messages/405944

    – Évidemment, les contenus dynamiques et les formulaires (recherche, forums…) sont à éviter.

    – Les appels des fichiers cachés (non liés depuis le page HTML). Pour les plugins image_responsive et inclure_ajaxload, j’ai ajouté la constante _SPIP_LIER_RESSOURCES qui, si elle est initialisée à true, va forcer l’insertion de balises <link href…> dans le code HTML :
    http://seenthis.net/messages/374212

    – La pagination de SPIP (signalé par @fil je crois).

    – Les timestamps ajoutés par SPIP aux fichiers :
    http://seenthis.net/messages/391910

    – Les URL relatives dans les CSS qui sont transformées, après concaténation, en URL absolues pointant vers le site en ligne. Celle-ci est assez casse-pied, parce qu’on ne s’en rend pas compte si on ne coupe pas sa connexion internet lorsqu’on teste les fichiers en local (puisque ça va chercher le fichier qui « manque » sur le serveur distant).

  • J’ai un gros soucis avec #SPIP-3.1 : il ajoute un timestamp aux fichiers, que ce soient les CSS et les Javascript, mais aussi les images passées par les filtres.

    C’est certes épatant pour être certain de bien utiliser la dernière version de chaque fichier, mais en revanche, ça me plante complètement l’aspiration des sites en local (parce qu’en local, le fichier monimage.jpg?1436899191, ça ne marche pas du tout).

    Est-ce qu’il y a un moyen prévu (genre une variable) pour pouvoir désactiver cet automatisme ?

    • J’ai l’impression d’avoir plus de timestamps avec le 3.1, par exemple sur des images passées par image_reduire, qui n’en avaient pas en 3.0.

      Ce que je veux, c’est aspirer le site en local, pour en avoir une copie totalement statique. Avec les timestamp, ça ne fonctionne pas.

      Pour l’instant, ce que je fais, c’est d’avoir un #FILTRE{mini_html} dans tous mes squelettes, qui me sert déjà à faire différentes bidouilles (essentiellement, supprimer les tabulations et les espaces surnuméraires dans le code source), et donc là-dedans j’ajoute la suppression des timestamp un peu à la hache (chaque fois que je trouve (jpg|gif|png)\?[0-9]+[\'\"], je vire le timestamp).

    • C’est dans image_graver() visiblement et il n’y a pas d’option pour le virer (option à ajouter, problablement). Cela dit il n’y a pas de raison fondamentale que les timestamp fassent foirer ta copie locale. Peut-être le fait qu’ils sont avec un ?xxx et ne finissent donc plus par .jpg — mais ça aussi ça pourrait se changer.

    • @b_b, oui j’ai vu |supprimer_timestamp, mais ça m’oblige à reprendre tous mes squelettes, alors que l’idée est plus dans le sens de ce que remarque @fil. Ou, plus largement, dans le sens de ce qu’ai fait pour image_responsive :
      http://seenthis.net/messages/374212

      Là quand j’ajoute :

      define("_SPIP_LIER_RESSOURCES", true);

      dans mes_options, le même site se met à me fabriquer des squelettes plus verbeux contenant les liens <link href…> pour permettre l’aspiration du site et des ressources.

      Là c’est pareil, idéalement on définirait une variable dans mes_options, et hop terminés les vilains timestamps le temps de faire l’aspiration.

    • @speciale : le but du timestamp est juste d’éviter que, quand tu fais les mises à jour de ton site (soit en div, soit pendant que tu mets en ligne des articles) tu sois gêné par le cache de ton navigateur. Un logo arton1.jpg, remplacé par une nouvelle version, est toujours le logo arton1.jpg ; le timestamp ajoute la date de mise en ligne du fichier, et donc ton navigateur ne réutilisera pas la vieille image. Donc c’est bien dans le src de l’image que ça doit se trouver, pas dans un data-, qui n’invaliderait pas le cache.

    • @b_b : oui c’est ce que j’ai fait (expliqué plus haut), mais pas directement supprimer_timestamp, qui prend un URL en entrée, et pas l’ensemble de la page.

      Mais à nouveau, ça oblige à modifier ses squelettes si on n’a pas l’habitude comme moi de mettre un #FILTRE{mini_html} absolument partout…

    • Le problème se pose aussi sur les js et css compactés et agrégés par SPIP qui ont aussi ce timestamp, mais sur lesquels il n’est pas possible de passer le filtre de suppression de ce timestamp.
      Sauf erreur de ma part, le nom des fichiers créés dans local/ dépend déjà de la date des fichiers. Le timestamp est alors inutile et contre productif.
      Et si le nom du fichier ne dépend pas pas de la date, il suffirait de la rajouter dans le calcul du nom, non ?