lzear / LeekWars_Kikimeter

5 stars 3 forks source link

Suivi de stats majeures au fil des jours #17

Open yLark opened 10 years ago

yLark commented 10 years ago

Maintenant que les rapports de combats commencent à être pas mal complets, pourquoi ne pas s'attaquer à des statistiques plus globales ? Je pense au suivi des stats majeures de nos leeks, farmer et team. Un graph sur la page de chaque poireau, du farmer et de l'équipe pour visualiser leur évolution au fil des jours.

Je propose ici un début de spec, n'hésitez pas à modifier ce commentaire.

Acquisition des données

Chaque jour, lors de la première connexion à leekwars.com, explorer - via ajax - les pages suivantes :

Ça fera peut-être un peu lourd en terme de temps d'exécution et de volume de data, mais vu que c'est la seule connexion de la journée et que c'est fait en tâche de fond, ça devrait aller sans problème.

Les données récupérées seraient structurées de la manière suivante :

[
    "datetime": value,    // Date et heure (plus précis que date seule)
    "data": {
        "farmer": {
            "id": value,    // id unique du farmer
            "talent": value,
            "fight_count": value,    // Nombre de combats réalisés
            "ratio": value,
            "trophy_count": value,
            "habs": value,
            "classement": value    // Classement du farmer à aller chercher dans http://leekwars.com/ranking/farmer
        },
        "leeks": [
            {
                "id": value,    // id unique du poireau
                "talent": value,
                "level": value,
                "fight_count": value, // Nombre de combats
                "ratio": value,
                "classement": value    // Classement du poireau à aller chercher dans http://leekwars.com/ranking
            },
            {
                ...
            },
        ],
        "team": {
            "id": value,    // id unique de l'équipe
            "level": value,
            "talent": value,
            "fight_count": value,
            "ratio": value,
            "classement": value    // Classement de l'équipe à aller chercher dans http://leekwars.com/ranking/team
        },
    }
],
[
    "datetime": value,
    "data":{}
]

Dans un premier temps, j'ai pensé qu'on pourrait laisser la possibilité à l'utilisateur de définir combien de jours garder en mémoire. Mais vu la faible quantité de données, tout garder ne devrait pas être un problème.

Avec JSON.stringify(), on peut stocker toutes ces données dans un seul GM_setValue() : simple et propre.

Pour gérer l'éventuel multi-compte sur la même machine, il faudrait donc stocker ces données dans un GM_setValue() contenant l'id du farmer connecté.

Récupérer ces données à la première connexion implique donc de modifier le @match du script pour tout le site leekwars.com et donc de contrôler via un if(document.URL == 'xxxx') l'exécution de chaque fonction du script.

Affichage des données

Sur la page de chaque poireau, du farmer et de l'équipe, insérer un graphique sur lequel on pourra visualiser chacune de ces données. Des checkboxes ou radio_buttons seront donc disponibles, et on pourrait zoomer via un ascenseur horizontal. Un peu comme ce qui est présenté ici. Par défaut, le graph du classement sera affiché, zoomé sur les deux dernières semaine (pour ne pas flooder avec des vieilles données).

abourdin commented 10 years ago

Bonne idée !

Par contre, il faut voir s'il vaut mieux avoir 1 ou plusieurs userscripts pour des pages et fonctionnalités différentes. Un seul très gros script avec des if partout risque de devenir vite difficile à maintenir, d'autant qu'on peut simplement exporter nos fonctions utilitaires dans un js commun importé via require.

yLark commented 10 years ago

Oui, un gros script serait plus difficile à maintenir, mais multiplier les scripts réduirait le public touché.

Sinon, ton idée d'appeler des js externe n'est pas mauvaise.