Le projet utilise CLI pour gérer les différentes fonctionnalités. Celles déjà mises en place peuvent se retrouver dans le fichier main.js.
Chaque fonctionnalité retrouvera la partie majeure de son code dans un fichier à part. Une partie mineure dans le main.js permettra de faire le lien avec ce fichier.
Le parseur utilisé dans ce projet parcourt le fichier élément par élément, et applique des règles d'expression régulière à chaque étape. Un objet Tweet est ainsi créé, dont les attributs sont ajoutés au fur et à mesure de la lecture du fichier. Certains attributs utilisent la même fonction de parsage, puisque les données sont sous la même forme. Tout le code lié au parseur peut se retrouver dans CsvParser.js, et les spécificités de l'objet tweet, dans Tweet.js.
Spec 1 :
Une commande est créée via l’API CLI, nommée count. Elle prend en argument le chemin des données, un hashtag, un jour, une heure de début et une heure de fin de recherche. La spécificité va renvoyer le nombre de tweets contenant le hashtag rentré en argument sur le jour de recherche pendant la période spécifiée. On passe en paramètre du parser le chemin d’accès au données que l’on récupère dans une variable tweet.
Les arguments de la spécificité ainsi que la variable tweet sont passés d’une fonction hashtagCount. Dans cette fonction nous créons une nouvelle variable de type Date qui prend en paramètre le jour rentré en argument. On vérifie ensuite que la période de début de recherche est au bon format. On réalise la même chose pour la période de fin. Ensuite, nous filtrons sur la variable tweet afin d’obtenir les tweets comprenant le hashtag en argument sur la période sélectionnée. Le résultat du filtre est renvoyé si sa taille est plus grande que 0 sinon on affiche un message d’erreur. Il suffit ensuite d’afficher le contenu de la variable filtré.
Spec 2:
Une commande est créée via l’API CLI, nommée top10-tweets-with-hashtags. Elle renvoie le top 10 des tweets contenant un hashtag.
Pour cela, on récupère l’argument du chemin des données dans une variable, que l’on passe en paramètre du parser de tweets. On récupère le résultat du parsing dans une variable tweets, se présentant sous la forme d’un tableau d’objets “tweets”.
On filtre ensuite ces tweets via la fonction “filter”, pour ne garder que ceux ayant un hashtag, c’est-à-dire dont la longueur de l’attribut (tweet.hashtag.length) est non nulle. On trie ensuite les tweets via la fonction “sort”, permettant de classer en premier les tweets dont la somme des réactions (fav et retweets) est la plus grande. Enfin, on ne récupère que les 10 premiers, et on map les tweets triés avec leur nombre de réactions. On stocke le résultat de ces opérations dans une variable top10.
On n’a plus alors qu’à afficher les informations principales de chaque tweet (la date, l’auteur, le contenu, le nombre de réactions…) via la fonction “forEach”.
Spec 3:
Une commande est créée via l’API CLI, nommée influent-users. Elle renvoie les 10 utilisateurs comportant le plus d’informations dans leur description.
Pour cela, on récupère l’argument du chemin des données dans une variable, que l’on passe en paramètre du parser de tweets. On récupère le résultat du parsing dans une variable tweets, se présentant sous la forme d’un tableau d’objets “tweets”.
On crée une variable “userList” récupérant la liste des utilisateurs uniques, et une variable mapUsersBio qui fera correspondre, pour chaque utilisateur, la longueur de leur description.
On parcourt ensuite le la liste de tweets récupérée plus haut. Si l’utilisateur n’est pas déjà présent dans la liste “userList”, on l’y ajoute. On map ensuite l’utilisateur avec la longueur de sa description.
On trie ensuite notre liste “userList” avec la fonction sort, en comparant la longueur de la description de chaque utilisateur avec le suivant présent dans la map. On obtient alors une liste ordonnée d’utilisateurs, de la description la plus longue à la plus courte. On n’a alors plus qu’à afficher les 10 premiers avec une boucle for.
Spec 4:
Une commande est créée via l’API CLI, nommée associated-hashtags, elle prend 2 arguments : l’adresse du jeu de donné et le hashtag à étudier. L’objectif de cette commande est de renvoyer les hashtags utilisés en même temps que celui recherché.
Elle fait appelle à la fonction “frequentlyAssociatedHastags” qui prend les 2 mêmes arguments que la commande. (On utilise ici la méthode toString pour éviter tout problème de typage).
frequentlyAssociatedHastags utilise alors la class utils pour récupérer l’ensemble des tweets compris dans le dossier spécifié. On filtre ensuite ces tweets pour identifier ceux qui utilisent le hashtag demandé. L’utilisation des méthodes toUpperCase a pour objectif d’éviter tout problème lié à la casse et la sensibilité du Javascript à ce sujet. Enfin, on crée un Set (Ensemble ne stockant que des valeurs uniques, pour éviter de retourner plusieurs fois le même hashtag) comprenant l’ensemble des hashtags utilisés simultanément avec le hashtag cible. La fonction retourne alors ce Set qui sera affiché dans le fichier main.
Spec 5 :
La partie algorithmique de la fonctionnalité se trouve dans le fichier topWord.js. La partie graphique se trouve dans le main.js associé.
La recherche des mots clés importants se fait par un filtrage des tweets possédant le hashtag associés. Une Map <mot, compteur=""> permet ensuite de compter le nombre de fois qu'un mot apparaît. Plusieurs filtres permettent ensuite d'affiner la recherche (suppression des mots souvent utilisés, limite à un certain nombre de mots). Une liste de 10 mots est renvoyée à la fin.</mot,>
Spec 6 :
La totalité du code se retrouve dans le fichier rankLocations.js.
Un filtre sur tous les tweets permet de retenir uniquement ceux reliés à la localisation en entrée. La taille de la nouvelle liste donne ainsi le nombre de tweets recherché, qui est ensuite retourné.
Spec 7:
Une commande est créée via l’API CLI, nommée media-effectiveness. Elle prend en argument le chemin des données, un hashtag et en option la possibilité de faire un graphique. La spécificité renvoie une liste de tweets comportant le hashtag avec le nombre de réactions (like et retweets) et elle regarde si oui on non il y a la présence d’un média sur ce tweet. On rentre en paramètre du parser le chemin d’accès au données que l’on récupère dans une variable tweet. On envoie dans une fonction mediaEffectiveness la variable tweet ainsi que le hashtag en argument. Premièrement on filtre sur la variable tweet pour obtenir que les tweets comportant le hashtag d’argument. Ensuite on filtre pour obtenir des tweets comportant au moins 1 média ainsi que le nombre de retweet dans une variable mediaTweetsSuccess. La même opération est effectuée pour les tweets sans média dans une variable noMediaTweetsSuccess. On renvoie enfin la valeur moyenne et médiane des deux variables filtré précédemment. L’affichage des valeurs peut ensuite être réalisé.
Spec 8 :
Une première vérification des entrées se fait dans la partie main.js associé à la fonctionnalité. La partie algorithmique se retrouve dans le fichier search.js.
Un filtre sera encore une fois appliqué sur tous les tweets, selon le type d'entrée par l'utilisateur lors de la commande. Un Map permet ensuite de ne retenir que les attributs dont l'utilisateur est intéressé (en input de la commande). Cette liste est ensuite représentée sous forme de fichier CSV.