broncowdd / respawn

enhanced version of Timo's respawn: get a copy of a website page on your own server with one click.
34 stars 12 forks source link

Toujours développé? #25

Open xuv opened 9 years ago

xuv commented 9 years ago

Bonjour

Je découvre cette version de Respawn. J'aimerais faire un petit projet d'archivage du web et j'hésite entre Respawn et wallabag. Respawn a l'air plus simple et moins gourmand à mettre en place (pas de db) et conserve semble-t-il la mise en page originale des documents sauvés.

Pensez-vous que l'utilisation de Respawn est encore à envisager. Et si oui, comment pourrait-on ajouter une sauvegarde automatique à partir d'un flux RSS.

Merci.

J

broncowdd commented 9 years ago

Bonjour,

Je n'ai pas mis le nez dans Respawn depuis un bon moment, même si je l'utilise encore pour dupliquer du contenu (pour un effet streisand par exemple) Il est en effet bien moins lourd que wallabag mais il reste quand même moins performant (les deux n'ont pas le même objectif, puisque wallabag est un read-it-later qui dépouille la page pour ne laisser que le contenu pertinent.)

En ce qui concerne la sauvegarde via le flux rss, je pense que le projet autoblog est parfait, puisque c'est précisément son objectif. https://github.com/mitsukarenai/Projet-Autoblog

La sauvegarde en automatique est peu recommandée car Respawn tente de sauver la page en l'état, avec tout ce qu'elle contient: gare à l'inflation du dossier de sauvegarde ^^

xuv commented 9 years ago

Hello Merci pour la réponse. J'étais passé sur le projet d'Autoblog pendant 2 secondes. Je ne sais plus trop pourquoi je n'avais pas retenu cette idée. De nouveau, peut-être cette histoire de DB. J'aime bien l'idée de Respawn de garder la page dans son état. Et d'être facilement transportable. Mais effectivement, je n'ai pas trop calculé la place que ça pourrait prendre. Aurais-tu une idée sur base de ton expérience de la quantité d'espace nécessaire pour sauver 1000 pages avec Respawn.

Merci pour les conseils et infos.

broncowdd commented 9 years ago

Je t'en prie, pas de quoi ^^ La taille de chaque dossier contenant la page respawnée peut varier énormément en fonction des dépendances de ladite page: de quelques ko pour du texte seul à plusieurs mégas pour une page chargée (images de fond, fontes etc) 1000 pages, ça peut faire rapidement beaucoup ^^

xuv commented 9 years ago

Mmmh. Dilemme. Dilemme. Est-ce que les pages que je compte sauvegarder sont principalement du texte (et donc on s'en fout un peu de la mise en page) ou est-ce que les pages sont graphiquement élaborées et composées (et donc, ça peut être important de sauver le tout)? J'hésite. C'est vrai que me retrouver avec 1000 versions de jquery, bootstrap et autres librairies que tout le monde utilise, c'est peut-être pas nécessaire. :) Je me demande si ça pourrait se résoudre facilement en vérifiant l'utilisation de CDN pour certains contenus.

broncowdd commented 9 years ago

Mmmmm... résoudre le problème de la duplication de fichiers par un genre de cache, par exemple ? si un fichier ressource (js par exemple) existe et fait le même poids, on ne le récupère pas et on remplace le chemin local par le chemin du cache... ça limitera pour les jquery et autres libs...

Pour les images, par contre...

broncowdd commented 9 years ago

un exemple avec une page sur mon serveur (au hasard): images : 563 ko js : 181 ko css : 82 ko fonte : 70 ko indeh.html: 70 ko total: presqu'un Mo (le cache permettrait d'économiser le js... soit 181 ko)

xuv commented 9 years ago

Mmmh. Merci pour ces données. Effectivement. Économiser le Js, c'est pas l'truc le plus énorme. 1000 pages, on arrive à 1Go. Ça va, c'est gérable. Avec Autoblog, je gagnerais ~340ko par page, dans cet exemple (Js, css et font). Ça fait une différence de 30%. C'est énorme et pas en même temps.

broncowdd commented 9 years ago

Effectivement, 1go ce n'est pas énorme, tout dépend de ton hébergement ;-) Ensuite, il faudrait voir dans quel but tu utiliserais respawn: si c'est pour un simple archivage, on peut toujours zipper les dossiers... (solution inenvisageable pour des copies devant être consultables, btw)

xuv commented 9 years ago

Ce qui m'intéresse ici, c'est de "reproduire" un processus d'archivage à la Archive.org, mais décentralisé, personnalisé et sans suivre l'évolution des pages. Ça prend une "photo" à un moment donné (au moment où j'ai envie de la conserver) et basta. Je peux oublier. Mais dans 3 ans, si jeviens dessus, la page est "telle qu'elle". C'est un peu ça qui m'intéresse. Ce serait couplé à un Shaarli par exemple.

broncowdd commented 9 years ago

Ça avait été une discussion autour des améliorations de shaarli. Une idée comme ça: quid de la génération d'un pdf à partir de la page ? (voire un autre format, epub ou autre)

broncowdd commented 9 years ago

Sinon, tel quel, ça peut le faire: pour ma part, je me suis mis un lien "respawn link" dans SonaRSS pour respawner d'un clic une page trouvée via les RSS...

xuv commented 9 years ago

Avec REspawn, ce qui me plaît, c'est qu'on reste dans le même format. (Je ne suis pas convaincu par epub, pdf ou autre. Ça fige trop, il me semble.) J'avais lu que ça faisait partie des améliorations possible de Shaarli. Pas envie d'attendre que ce soit développé. Un REspaw + automatisation via RSS me semblait faire l'affaire. Faut que je trouve comment automatiser ce truc via RSS.

xuv commented 9 years ago

J'ai lu que t'avais une fonction Array2RSS qui vient d'ailleurs d'un autre script qui fait l'inverse RSS2Array. Me demande si je devais aller chercher de côté là.

broncowdd commented 9 years ago

Ce que tu voudrais faire, c'est détecter un post sur un site via son flux RSS puis, en cas de post, le respawner automatiquement, c'est ça ?

broncowdd commented 9 years ago

Oui, j'avais fait deux fonctions permettant de gérer simplement les flux RSS

xuv commented 9 years ago

Oui, c'est ça. Observer la mise à jour d'un site via son fil RSS and Respawn de l'article automatiquement. En utilisant le fil RSS ve Shaarli, ça respawn le site bookmarké. Pas le post de Sharrli, of course :)

broncowdd commented 9 years ago

Je pense même qu'en modifiant shaarli, ce serait faisable...

xuv commented 9 years ago

Comment? En activant respawn à chaque sauvegarde dans shaarli ou qqchose du genre?

Le 7 mars 2015 17:20:11 UTC-05:00, Bronco notifications@github.com a écrit :

Je pense même qu'en modifiant shaarli, ce serait faisable...


Reply to this email directly or view it on GitHub: https://github.com/broncowdd/respawn/issues/25#issuecomment-77713672

@xuv http://xuv.be

broncowdd commented 9 years ago

Ou plus simplement, avec un script php dédié... il suffirait de lui fournir les adresses des flux pour qu'il les charge, vérifie toute nouveauté et déclenche le respawn sur chaque nouveau post...

Bon, en cas de flux nombreux et souvent mis à jour, la charge serveur va ponctuellement être vigoureuse... ^^ surtout si le script et respawn se trouvent sur le même.

broncowdd commented 9 years ago

Dans shaarli, je pensais au traitement automatisé de liens shaarliés avec un certain tag (genre tag=>respawn provoque le combo: recherche/demande du flux rss (si l'url n'est pas celle d'un flux) -> traitement de récupération rss -> nouveau ? -> copie locale du nouveau contenu) Ensuite, il faudrait ajouter un traitement de tous les liens respawn à chaque démarrage de shaarli...

C'est sans doute un peu compliqué à mettre en place dans shaarli, mais pas impossible (dans la version que j'ai faite, j'ai découpé les parties de code en fichiers séparés pour pouvoir ajouter des fonctionnalités plus simplement) https://github.com/broncowdd/Shinterest

D'ailleurs, ça fait un moment que j'ai envie de modifier shaarli pour ajouter des hooks permettant la création simplifiée de plugins...

xuv commented 9 years ago

Ha. Je vois. Moi, je pensais "plus simple" comme traitement automatisé des liens shaarli. A chaque sauvegarde d'un lien -> vérification si l'article a déja été Respawn -> activation de Respawn pour cette page (avec récupération des tags de shaarli pour tager Respawn).

Le but pour moi est de conserver "un cache" de toutes les pages que je bookmarke dans shaarli. Parce que ça fait 9 ans que je conserve une liste publique de liens, et il y a trop de super trucs qui ont disparus. Il est temps que ça change.

broncowdd commented 9 years ago

Oui, c'est plus simple... je partais du principe que tu ne souhaitais pas respawner tous les liens mais seulement certains ^^

xuv commented 9 years ago

C'est la partie "rechercher le flux rss du site sauvegardé" qui m'a fait peur. J'imaginais déjà "respawner l'intégralité des sites dont je bookmark une page. :)

xuv commented 9 years ago

En même temps, cette sauvegarde de site complet pourraît être intéressante dans certains cas.

broncowdd commented 9 years ago

tout-à-fait

jerrywham commented 9 years ago

C'est pertinant tout ça. Je m'en vais mettre mon nez dedans :)

xuv commented 9 years ago

@jerrywham Ha. Cool. Ça m'intéresse de voir par où tu comptes prendre ça en main.

Pour ce qui est des sites complets au lieu de juste une page. J'ai pensé que si l'url sauvegardée se terminait pas un TLD, alors, c'est que le site complet devait être sauvegradé. Ex:

Mais je me suis dit que c'était peut-être dangereux de penser les choses comme ça, surtout en terme de place. Peut-être que juste respawner une seul page est suffisant dans la majorité des cas et évite des surprises.

jerrywham commented 9 years ago

Le but de respawn n'est pas de pompé un site entier. C'est pas bien :( Mais sauvegarder une page bookmarkée dans shaarli, pourquoi pas.

Après, je ne sais pas comment je vais m'y prendre. Je n'y ai pas encore réfléchi mais je vais regarder ça.

xuv commented 9 years ago

On 09/03/15 19:31, jerrywham wrote:

Le but de respawn n'est pas de pompé un site entier. C'est pas bien :(

Oui oui, t'as raison. Je réfléchi un peu tout haut ici.

@xuv http://xuv.be http://p.xuv.be

jerrywham commented 9 years ago

Voici ce que je propose. Les modifications sont à faire dans index.php de shaarli. Tout d'abord, ajouter deux variables de configuration, après la ligne 25 :

$GLOBALS['config']['respawnUrl'] = 'http://url-de-ton-respawn/';
$GLOBALS['config']['tagToOpenRespawn'] = 'Respawned';

Puis, après la ligne 1462, remplacer les lignes :

       $LINKSDB[$linkdate] = $link;
        $LINKSDB->savedb(); // save to disk
        pubsubhub();

        // If we are called from the bookmarklet, we must close the popup:
        if (isset($_GET['source']) && $_GET['source']=='bookmarklet') { echo '<script language="JavaScript">self.close();</script>'; exit; }
        $returnurl = ( isset($_POST['returnurl']) ? $_POST['returnurl'] : '?' );
        $returnurl .= '#'.smallHash($linkdate);  // Scroll to the link which has been edited.

Par :


        $openRespawn = (strpos($link['tags'], $GLOBALS['config']['tagToOpenRespawn']) !== false && $GLOBALS['config']['respawnUrl'] != '') ? 'window.open("'.$GLOBALS['config']['respawnUrl'].'?q="+ encodeURIComponent(\''.$url.'\'),"_blank","menubar=yes,height=600,width=1000,toolbar=yes,scrollbars=yes,status=yes");' : '';

        $link['tags'] = trim(str_replace($GLOBALS['config']['tagToOpenRespawn'],'',$link['tags']));

        $LINKSDB[$linkdate] = $link;
        $LINKSDB->savedb(); // save to disk
        pubsubhub();

        $returnurl = ( isset($_POST['returnurl']) ? $_POST['returnurl'] : '?' );
        $returnurl .= '#'.smallHash($linkdate);  // Scroll to the link which has been edited.

        // If we are called from the bookmarklet, we must close the popup:
        if (isset($_GET['source']) && $_GET['source']=='bookmarklet') { echo '<script language="JavaScript">'.$openRespawn.'self.close();</script>'; exit; } elseif ($openRespawn != '') {echo '<script language="JavaScript">'.$openRespawn.'document.location="'.$returnurl.'";</script>'; exit;}

Si on tague une page dans shaarli avec le tag permettant d'ouvrir respawn (ici le tag Respawned), le lien sera sauvegardé dans shaarli et respawn tentera la sauvegarde de la page. Il faut au préalable que l'on soit loggué dans respawn sinon la sauvegarde ne se fera pas.

Si cette solution fonctionne et convient, je proposerai une modification dans shaarli avec panneau de configuration.

Knah-Tsaeb commented 9 years ago

Yop tout le monde. Juste quelques remarques/idées, Il existe une version de Shaarli qui supporte les plugins https://github.com/shaarli/Shaarli c'est aujourd'hui la version communautaire de Shaarli. Peut être qu'il vaut mieux utiliser un plugin pour ce genre d'utilisation.

Ensuite le truc qui m'embêtes un peu c'est d'être déjà logué dans Respawn pour que ça marche. C'est pas insurmontable mais bon, ça me fait déjà chié quand je veux respawner une page depuis le bookmark. Click sur le bookmark, on se logue, on ferme la page et on reclicke sur le bookmark. Reste l'option de pourvoir ajouter une page à respawn sans devoir se connecter avec une API et une clé secrete. Du coup il est facile d'ajouter un plugin à un logiciel qui envoie une simple requête http pour ajouter une entrée dans Respawn.

Je pense que le mieux serais l'import dans Respwn depuis un flux RSS de Shaarli. La contrainte c'est d'avoir accès à une tache cron pour lancer régulièrement la mise à jour de Respawn. Sinon reste la solution d'importer les flux RSS lorsque que l'on ouvre Respwan, mais le traitement peu être long et devoir attendre longtemps avant d'avoir le contenu de Respawn peu être un problème.

J'adore l'idée en tous cas.

broncowdd commented 9 years ago

Salut les gars ^^ Je propose de modifier également Respawn pour permettre un login persistant ou bien pour ajouter une API avec une clé d'autorisation permettant de bypasser le login lorsqu'on cherche à utiliser respawn à partir d'une autre appli...

Pour le bookmarklet de respawn, on pourrait aussi ajouter une case mot de passe si le user n'est pas loggué ainsi le log se ferait en même temps que la capture de la page: une seule manip ^^

Knah-Tsaeb commented 9 years ago

:+1:

broncowdd commented 9 years ago

Après vérification, j'avais déjà fait un login persistant (case à cocher rester connecté) sur respawn (avec auto_restrict)

jerrywham commented 9 years ago

Oui mais il faut s'être précédemment loggué. La case mot de passe dans la pop-up serait mieux je pense.

jerrywham commented 9 years ago

Je n'ai pas trouvé comment faire un plugin...

Knah-Tsaeb commented 9 years ago

Tu as des exemples dans le répertoire tpl https://github.com/shaarli/Shaarli/tree/new-plugin-system/tpl/plugins c'est sur la branche https://github.com/shaarli/Shaarli/tree/new-plugin-system.

jerrywham commented 9 years ago

Ok, je vais voir ça

xuv commented 9 years ago

@jerrywham: Merci pour ces bouts de script. Je dois encore tester. Est-ce que le tag Respawned dans ce cas-ci est supprimé une fois le lien enregistré dans Shaarli (si je lis bien)? Et est-ce qu'il y aurait un moyen simple d'activer systématiquement le respawn à chaque entrée de nouveau lien dans shaarli?

@Knah-Tsaeb: Les liens vers la branthe new-plugin-system de shaarli sont morts. Et je ne vois pas de branche autre que master ou legacy dans le repo https://github.com/shaarli/Shaarli/

jerrywham commented 9 years ago

@xuv : Oui, le tag est supprimé.

Pour activer le respawn à chaque entrée, il suffit d'ajouter dans shaarli ces quelques lignes :

$GLOBALS['config']['alwaysRespawn'] = false; // ou true en fonction du choix
$tags = trim(preg_replace('/\s\s+/',' ', $_POST['lf_tags'])); // Remove multiple spaces.

ajouter les lignes :

if ($GLOBALS['config']['alwaysRespawn']) {
    $tags .= ','.$GLOBALS['config']['tagToOpenRespawn'];
}

Je n'ai pas testé mais ça devrait fonctionner.

jerrywham commented 9 years ago

Je viens de tester et ça fonctionne. Le tag n'apparait pas dans la pop-up de shaarli mais la fenêtre de respawn s'ouvre bien.

Knah-Tsaeb commented 9 years ago

Non di diou, au moment ou j'ai posté ça marchais. Bref regarde https://github.com/shaarli/Shaarli/wiki/Ideas-for-plugins et https://github.com/nodiscc/Shaarli/tree/new-plugin-system

jerrywham commented 9 years ago

Ce système de plugin intervient au niveau du template et non du moteur de shaarli. Le seul intéret est d'ajouter du html/javascript à certains endroits de la page :

You can now place raintpl template elements in tpl/plugins/ This allows adding custom HTML elements to the base template. It is possible to inject these elements at the following places on the default template. Where they are loaded depends on their path/filename.

Toolbar buttons (eg. tpl/plugins/coolbutton/coolbutton.toolbar.html) Link info fields (eg. tpl/plugins/send-to-twitter.html) Page footer (eg. tpl/plugins/footer-message/footer-message.footer.html)

Plugins have to be manually enabled in data/options.php. If you want to enable the 'example1' and 'example2' plugins:

$GLOBALS['config']['PLUGINS'] = array('example1', 'example2');

ou alors, j'ai mal compris...

Knah-Tsaeb commented 9 years ago

Désolé j'avais pas regarder le code en question, j'ai juste vu passer les annonces concernant un système de plugins.

Donc oui ça sert juste à ajouter des liens dans la toolbar. Rien avoir avec ce que l'on souhaite ici.

xuv commented 9 years ago

@jerrywham Merci pour tous ces bouts de code. C'est enfin ajouté dans ma v.0.0.45 de Shaarli et ça marche pas mal. Ça fait un peu flashouiller plusieurs pop-up on même temps, mais ça fait clairement le job.

Juste une réflexion comme ça, j'ai pas creusé. Mais avec cette histoire de plugin pour template de shaarli, il n'y aurait pas moyen de créer un bouton "save and respawn" (qui viendrait s'insérer dans l'interface de "Add link" en plus du "save", "cancel", "delete" existant) qui sauverait dans shaarli et ouvrirait le pop-up de respawn? Si je demande ça c'est pour pas "casser" le code de Shaarli et devoir refaire la manip dans la source à chaque mise à jour. C'est juste une question.

jerrywham commented 9 years ago

Ah oui, je n'avais pas vu ça comme ça car ce que j'ai posté est un bookmarklet. À creuser...