[Python] Amusons nous avec http://forums.zelda-solarus.com

Démarré par Noxneo, 17 Mars 2013 à 04:45

0 Membres et 1 Invité sur ce sujet

17 Mars 2013 à 04:45 Dernière édition: 17 Mars 2013 à 04:50 par Guillaume
Depuis que je ne suis plus modérateur, je m'embête. Voyez-vous, être modérateur demande énormément de temps et d'attention; tel que lorsqu'un modérateur ne l'est plus, il se retrouve avec plusieurs centaines d'heures libres par jour, heures qui étaient autrefois occupées par de la dure modération sur Solarus.

C'est donc dans ces heures perdues (à présent regagnées, merci!) que je me suis amusé à écrire un scraper pour forums SMF. Késaco? En gros, un petit programme qui va aller sur tous les topics, copier les posts, leurs auteurs, et tout le toutim, et les recopier dans une base de données locale.
On se retrouve alors avec une base de données certes incomplète (forcément, on ne peut pas accéder aux informations sur les forums privées ou aux hash de mot de passe par exemple), mais qui contient toutes les données publiques du forum.

Et qui dit base de données locale dit "faire ce qu'on veut sans que le méchant admin système ne vienne nous taper sur les doigts".

(je publierais le code de ce scraper bientôt sous license MIT, car l'open source c'est le bien. Mais il reste quelques bugs à résoudre avant que ce soit vraiment digne d'une license open source, et la base résultante n'est pas complètement dénormalisée, ce que j'aimerais faire)

On peut donc faire plein de choses intéressantes (par exemple si on voulait ouvrir un forum concurrent, on pourrait le populer avec les topics déjà existants afin d'encourager les membres à migrer– mais ce n'est qu'un exemple farfelu, je ne pense pas que quelqu'un voudrait faire cela!).

"Mais", me direz vous, "Solarus est un forum SMF!"
Mais c'est vrai! Mais alors... ça veut dire que l'on peut se servir de ce scraper sur Solarus? Ce serait dingue!

Voyons voir...

guillaume@kalan [17:48:36] [~/Git/smf_importer] [master *]
-> % python main.py forums.zelda-solarus.com fr 22650

[quelques heures plus tard]

guillaume@kalan [17:48:36] [~/Git/smf_importer] [master *]
-> % ls db/
solarus.db


Ohlalala! Une base de données SQLite prête à être utilisée! Que pourrait-on faire avec? (petit retour sur vécu pour ceux voulant faire la même chose: le processus entier prend une grosse matinée (mais c'est très aisément parallélisable, prévu pour la v2)- n'oubliez pas de mettre des petit time.sleep() dans votre code afin que Chris ne vous tape pas sur les doigts :) . La base entière fait environ ~400 Mo (ça descendra surement un peu quand tout sera bien dénormalisé). Les ~4000 premiers topics seront scrapés beaucoup plus vite que la suite.)

Un petit quelque chose testé rapidement afin de s'amuser avec le set de données:
Les 10 mots de plus de 4 lettres les plus utilisés récemment par:

Christopho: sourire, Zelda, langue, comme, faire, beaucoup, Solarus, premier, quand, aussi
Lelinuxien: clin d'oeil, Windows, Vista, carte, content, s'agit, forum, étant, chat, majuscule
Couet: langue, sourire, comme, cette, votre, aussi, faire, encore, ^^, ninja,

(les mots tels que sourire, langue, clin d'oeil, ninja font en fait référence au smileys correspondant)

Bref, rien de très fracassant, même si c'est amusant. Mais on peut commencer à faire des trucs sympa avec des chaines de Markov et des réseaux de neurones:

- Un bot parlant comme Mymy (smileys inclus)
- Un programme qui parcours les posts de Christopho pour déterminer une corrélation entre ses heures de post sur le forum et ses heures de commit sur Github
- Utiliser NLTK + sentiment analysis pour déterminer qui est le (ou la...) modo la plus méchante (le résultat sera certainement une constante)
- Utiliser Vocaloid + Melopy pour générer une chanson de rap basée sur des posts de Solarus

Je posterais des nouvelles au fur et à mesure des mes avancements. Si quelqu'un est intéressé dans la base de donnés, qu'il m'envoie un MP :)

En attendant, si vous avez des questions sur l'implémentation ou autre, j'y répondrais :)

[spoiler]Petit devoir pour les informaticiens du forum, à rendre d'ici lundi: dans un monde hypothétique où ce scraper aurait été mis en marche quand j'étais toujours modo, aurait-il été possible d'utiliser curl (ou wget, ou autre) pour scraper les pages sous mon compte, faisant ainsi en sorte que la base de données finale contienne les messages des forums privés? Et question politique: serait-il intéressant d'oublier d'enlever ceux ci de la base?[/spoiler]

C'est juste énorme, comment je kiffe :D !!!

Par contre je me demandais, t'as aucun "but" en tête à part partager ce ptit délire sympa on est bien d'accord x) ?!

Citation de: Guillaume le 17 Mars 2013 à 04:45
Lelinuxien: s'agit, forum, étant, chat, majuscule

:ninja:
Anciennement iArcadia / Zora Rouge

Je n'étais pas un grand amateur de programmation mais... j'ai changé d'avis. :D