Maïa is a user on mamot.fr. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can sign up here.
Maïa @maiadereva

🆘 Opération Sauvons
MercrediFiction.xyz 🆘

Le saviez-vous ?
Les pouets de étaient publiés sur le super site mercredifiction.xyz/ avec un moteur de recherche et tout.

Le soucis c'est qu'il y a un gros bug, et que son créateur @Meewan a fini par jeter l'éponge. 🏊

Alors si quelqu'un⋅e est intéressé pour sauver le site, Meewan veut bien passer le flambeau.
Le site est en python 2.7 avec flask, et les sources sont là : github.com/Meewan/MercrediFict

Le repouet c'est chouette ! 🤓

· Web · 103 · 6

@maiadereva @Meewan Ah oui !! Gros bug ! C'est la page par défaut du serveur qui apparait !! C'est pas bon ça !

@lascapi @maiadereva

Ça c'est parce que j'ai enlevé le vhost.

Le bug c'est que le crawler multipliait les poulets a l'infini

Pas végé du tout Show more

Pas végé du tout Show more

@maiadereva @Meewan

euh il me semble que rien n'est perdu, Bortzmeyer a fait un ramasse-pouets pour les mercrediFiction

mercredifiction.bortzmeyer.org

@goofy son ramasse-pouets ressemble a ce que je fait: il pompe un gros listing d'une seule instance, et fabrique une page statique, contrairement a @Meewan qui pompe de toutes les instances que son code connait (si j'ai bien lu), et donc sort moult doublons.

on est moins ambitieux, mais on rate (plein?) des trucs.

@maiadereva

@ashgan
Ah ok ! En fait c'est pas vraiment un bug...
Il faudrait réfléchir à une méthodo...
Peut-être commencer par limiter aux instances francophones...

Ensuite, je n'y connaît rien, mais un pouet a-t-il un ID unique ou bien change-t-il d'ID en fonction des instances où il est relayé ?

Je suppose que tu y as réfléchis @Meewan ?

@goofy

@maiadereva si j'ai bien vu, quand tu cherche un hashtag, tu as une liste de pouets avec les ids propres a l'instance ou tu as demande.

ces pouets marchent comme les interractions entre instances: en fonction de qui suit qui et d'ou, chaque instance voit passer une partie plus ou moins grosse, mais jamais l’intégrale.
@Meewan @goofy

@maiadereva tu as donc 2 choix: prendre une grosse instance a priori avec beaucoup d’interactions d'autres instances et te contenter de ce que tu as, ou faire le tour d'un max d'instances pour tout choper, mais tu te tape le souci du doublon potentiellement pour chaque pouet
@Meewan @goofy

@maiadereva en plus, je n'arrive pas a choper les réponses pertinentes:
par ex, je fait un hashtag mercredifiction, on me répond avec ce hashtag, je ré-repond aussi avec le hashtag.
ça sortira uniquement mes pouets, pas la réponse intermédiaire (on peut la choper quand même d'une autre façon, mais pfiou)
@Meewan @goofy

@ashgan
Toujours de mon point de vue de non-développeur : un script qui compare les pouets pour éliminer les doublons c'est possible/gourmand ?

@Meewan @goofy

@maiadereva le soucis, c'est quoi comparer et comment? t'as pleins de cas tordus possibles ou tu sauras pas dire.
2 textes identiques avec des comptes et des dates différents? doublon, ou pas?
c'est quelqu'un qui utilise du multicompte, ou 2 users distincts? rien que ça, tu peut pas différencier

@Meewan @goofy

@ashgan c'est déjà pas mal ! Et on pourrait imaginer un compromis : une liste déroulante avec les instances pour afficher les pouets pour chacune...

@maiadereva faire une page pour rechercher les toots publics d'un hashtag sur n'importe quelle instance, c'est pas complique.
c'est juste long a recuperer

@maiadereva 2chanps: un pour le hastag, l'autre pour l'url de l'instance, et hop.
sauf que pour mon cas, je mouline 30 min pour 4 hashtags proches, pour avoir l’intégrale des 10000 toots 😱

@ashgan

Si je ne m'abuse, chaque pouet a un lien vers l'original, qui lui, a une url unique.

Du coup, on pourrait éliminer les doublons (et accessoirement si le compte n'est pas public, on ne le récupère pas, ce qui n'est pas idiot non plus).

@maiadereva @Meewan @goofy

@Lanza oui, on peut faire pleins de compromis.
c'est juste ce que tu est prêt a coder et te torturer l'esprit 😉

je me suis simplifié le boulot et choisi de ne relever qu'une seule instance. j'en rate potentiellement plein, je le sais, mais j'ai zéro pb de doublon.
et déjà, c'est fichtrement long a relever a l'instant T (je le fait pas au fil de l'eau)

@maiadereva @Meewan @goofy

@ashgan @goofy @maiadereva @Lanza

En fait je règle le problème en faisant des mises a jour incrementales toutes les 10 min avec plein de workers mais c'est un peu plus complexe et plus buggé

@Meewan vu ta bdd pour savoir ou tu en est et le stockage des toots, je me doutais que tu récupérais ton diff et pas l’intégrale comme moi :)
mais ca t’empêche pas un merdier de doublons vu le muti instances, c'est ca? (en plus du worker machin)
@Lanza @maiadereva @goofy

@ashgan @goofy @maiadereva @Lanza pas trop, de mémoire j'avais un algio de de duplication primitif qui manifestement ne marche pas. Je suis sur mon tel la donc pour relire du code c'est pas top

@Meewan c'est pour ça que je fait mono instance mono thread :)
je pourrais (je pense) accélérer notablement en lançant plusieurs workers, ceci dit, mais j'ai déjà du code bien trop long a mon gout.

@ashgan en fait a l'origine mon crawler n'avais pas (trop) de probleme de duplication. Je pense que c'est une mise a jour qui a commencé a changer un champ selon l'instance que je considerait comme fixe.

Pour faire de la requete directe c'est mort. Avec les n crawler (un par instance) je mettais deja plus de 10 min pour construire la base il y a un an. Maintenant ça doit être dans les 20-30 min et encore c'est parce que mastodon filtre déja par hashtag

@Meewan faut dire que 40 résultats max par requête, ça aide pas pour la perf.

en ponctuel, j'en suis aussi a 30 bonnes minutes pour choper 10/11000 toots pour 4 hashtags sur 1 instance.
si j'en colle 10 workers, je dois pouvoir descendre comme y faut, mais je vais quand même taper le rate-limit par IP et plus par requête 😑

@ashgan

30 min pour répondre a utilisateur c'est pas possible. Je fait déjà la gueule quand le chargement est perceptible...

@Meewan je le lance pas en direct, c'est un cron qui me reconstruit mes pages statiques :)
donc sa durée de crawl m'importe peu, mais bon.

comme disait @Lanza pour dédoubler propre, virer l'analyse de texte et faire de l'URL du pouet original un ID unique?

après, c'est "juste" les limites de l'API qui freinent

@ashgan @Lanza

je pensais avoir déja répondu mais apparemment ce n'est pas le cas donc: l'astuce pour éviter les doublons c'est de crawler instance par instance et de n'enregistrer que les pouet de l'instance que tu crawle. Si tu tombes sur une instance que tu ne connais pas tu l'enregistre et tu la crawlera la prochaine fois.

du coup tu ne prend que des pouets originaux et ton réseau d'instance s'étend petit a petit
a la fin j'avais dans les 300 instances connus en ayant rentré que framapiaf

@Lanza bien vu, l'url de l'original! 👍
j'avais pas vraiment regardé ca ni fait le rapprochement, mais oui, ça pourrais faire un id unique inter-instances

@maiadereva @Meewan @goofy

@maiadereva sur mercredifiction, c'est souvent du texte long, donc ca peut aider.
mais sur ironeme, c'est mort :)
@Meewan @goofy

@ashgan @goofy @Meewan @maiadereva Mais sinon, un simple hash du texte du pouet devrait suffire 🙂

@framasky tu va te filer la migraine avec les coups tordus :)
perso, j'ai fait au plus rapide: je chope sur une unique instance, et tant pis pour les perdus.
je sais que j'ai pas tout, mais je vis avec

@ashgan Moi je garde que les miens, c'est plus simple ^^

@ashgan Pas tant que ça :
- construction du site dans gitlab CI (et publication sur Gitlab CI)
- récupération automatique de la dernière version du projet
- système de thème
- système de manipulation du texte (genre corriger des typos, etc)
- récupération des images
- génération d'un epub
- possible aggrégation de pouets pour ne faire qu'un seul post
- flux atom
- pagination

@framasky je l'ai fait but de pomme:
- spammer l'api pour choper l’intégrale en json.
- wait
- wait
- hold still
- grosse boucle qui me jinja-ise mes pages statiques avec le json
- profit

@framasky
En fait c'est pas tout à fait un bug, c'est un problème de doublon.
@ashgan a identifié ça : mastodon.gougere.fr/@ashgan/99

@Meewan

@framasky non, je vais ouvrir une issue sur le github décrivant le bug.

Malheureusement c'est plus compliqué que se simple doublons. Par exemple j'ai eu un pouet de @maiadereva répliqué 10 000 fois (soit bien plus que le nombre d'instances connu par le script). Je pense plus a une condition d'arrêt foireuse. Et un lock mal conçut.

@maiadereva @Dryusdan @Meewan on pourrait heberger sur m.h si besoin... Faites signe si personne n'as repris !

@maiadereva @lascapi @djayroma @Bat @goofy @ashgan @framasky @Lanza @gled @hyper

le code qui était en prod:
up.meewan.fr/data/meewan/mercr

il est peut être un peu différent de ce qu'il y avait sur le repo avec notamment des patch a l'arrache.

@maiadereva @Meewan mince, je savais pas qu'il existait un tel site :o
J'aurais bien donné un petit coup de patte, mais je suis pas du tout à l'heure sur Python/Flask 🙁
Keur sur vous en tout cas ❤️

@maiadereva @Meewan Mince, je viens de voir le pouet. Je pensais que le bug des doublons était résolu. Bon bah s'il y est encore, je veux bien voir comment corriger ça. 😊