Archived
1
0
Fork 0
forked from Anri/cal8tor
This repository has been archived on 2023-04-23. You can view files and clone it, but cannot push or open issues or pull requests.
cal8tor/report/document.tex

193 lines
7 KiB
TeX
Raw Normal View History

2023-04-19 08:55:51 +02:00
\documentclass{article}
\usepackage[T1]{fontenc} % encodage
\renewcommand{\familydefault}{\sfdefault} % police en sans-serif
\usepackage[french]{babel} % langue
\frenchsetup{SmallCapsFigTabCaptions=false}
\usepackage[hidelinks]{hyperref} % liens cliquable dans la table des matières
\usepackage{graphicx} % images
\usepackage{caption}
\usepackage[a4paper, left=20mm, top=20mm]{geometry} % dimensions de la page
\usepackage{minted} % intégration code
\usemintedstyle{emacs}
2023-04-19 11:47:59 +02:00
% Alias
2023-04-19 11:48:28 +02:00
\newcommand{\dd}{-\---} % double dash
\newcommand{\q}[1]{\og #1 \fg} % quotes
2023-04-19 11:31:12 +02:00
2023-04-19 08:55:51 +02:00
\title{Projet - Scraper}
2023-04-19 09:04:06 +02:00
\author{\href{mailto:anri.kennel@etud.univ-paris8.fr}{
Anri Kennel}\thanks{Numéro d'étudiant : 20010664}\, (L3-Y)
2023-04-19 08:55:51 +02:00
\\Ingénierie des langues $\cdot$ Université Paris 8}
\date{Année universitaire 2022-2023}
\begin{document}
\maketitle
\tableofcontents
\clearpage
\section{Projet}
2023-04-19 09:04:06 +02:00
Dans ce projet j'ai créé un scraper qui récupère les emplois du temps
des étudiants depuis le site de la licence informatique de Paris 8.
J'ai ensuite étendu le projet en traitant les données récupérées afin de
proposer deux résultats :
\begin{itemize}
\item un fichier de sortie au format \texttt{.ics}
\item une sortie dans le terminal sous forme de tableau
\end{itemize}
2023-04-19 08:55:51 +02:00
2023-04-19 10:46:29 +02:00
Le programme propose une interface simple via des arguments passés en ligne de
2023-04-19 12:01:55 +02:00
commande, pour cela j'ai utilisé le module \texttt{clap}.
\vspace{1em}
J'ai choisi de faire ce projet parce que :
\begin{itemize}
\item scraping de site web
\item utile : permet de récupérer un emploi du temps exportable vers
une application tierce que j'ai utilisé toute l'année
\item utilisation de formule regex comme vue en cours
\end{itemize}
2023-04-19 10:46:29 +02:00
2023-04-19 08:55:51 +02:00
\section{Implémentation}
\subsection{Scraper}
2023-04-19 10:46:29 +02:00
Le programme est écrit en Rust.
Pour faire les requêtes sur les pages web, j'ai utilisé les modules
\texttt{reqwest} et \texttt{tokio}.
Pour la partie scraping, j'ai utilisé le module
2023-04-19 10:36:57 +02:00
\texttt{scraper}. Ensuite pour le traitement des données, j'ai ajouté
l'utilisation de \texttt{regex}. J'ai aussi utilisé le module \texttt{chrono}
qui m'as permis de traiter les dates.
2023-04-19 08:55:51 +02:00
2023-04-19 11:25:40 +02:00
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{imgs/from_example.png}
\caption{Affichage de l'emploi du temps des L3-Y depuis le site web}
\label{fig:l3y-website}
\end{figure}
2023-04-19 08:55:51 +02:00
\subsection{Données récupérées}
2023-04-19 10:36:57 +02:00
Deux pages sont scrapées par le programme :
\begin{enumerate}
\item \label{1} La page d'emploi du temps principal : \url{
https://informatique.up8.edu/licence-iv/edt/}
\begin{itemize}
\item Cette page contient les informations nécessaires pour
connaître la position temporelle des cours (exemple :
quelle année ? quel mois commence les cours ? combien de
temps les cours durent ?)
\end{itemize}
\item \label{2} La page qui contient l'emploi du temps : \url{
https://informatique.up8.edu/licence-iv/edt/CLASSE.html} avec
\texttt{CLASSE} demandée par l'utilisateur
\begin{itemize}
\item Cette page contient l'emploi du temps en tant quel tel, avec
les noms des matières, des professeurs et les numéros de
salles.
\end{itemize}
\end{enumerate}
2023-04-19 08:55:51 +02:00
2023-04-19 10:36:57 +02:00
\begin{itemize}
\item Le point \no\ref{2} est traité dans un premier temps dans le fichier
\texttt{src/timetable.rs}
Les cours ainsi récupérés sont récupérés dans une structure
\texttt{Course} définie dans \texttt{src/timetable/models.rs}
\item Le point \no\ref{1} est traité dans un second temps dans le fichier
\texttt{info.rs}. Elle n'est faite que lorsque l'on veut générer un
calendrier au format \texttt{.ics}, sinon le repère temporelle
n'est pas nécessaire.
\end{itemize}
2023-04-19 08:55:51 +02:00
\section{Calendrier}
2023-04-19 10:46:29 +02:00
Après scraping, on traite l'information.
2023-04-19 08:55:51 +02:00
\subsection{Fichier}
2023-04-19 10:46:29 +02:00
Lors de l'exportation du calendrier dans un fichier, au format \texttt{.ics},
on utilise le module \texttt{ics} pour la structure du fichier, et \texttt{uuid}
pour générer des ID unique pour chaque évènement.
2023-04-19 08:55:51 +02:00
2023-04-19 10:46:29 +02:00
Le fichier en sortie est conforme à la \href{
https://icalendar.org/RFC-Specifications/iCalendar-RFC-5545/
}{norme RFC 5545} et est donc compatible avec les programmes de calendriers,
pour en être sûr j'ai utilisé le validateur mis à disposition sur
\url{https://icalendar.org/validator.html}.
2023-04-19 08:55:51 +02:00
2023-04-19 11:25:40 +02:00
\begin{figure}[h]
\begin{minted}[autogobble,fontsize=\footnotesize]{text}
BEGIN:VEVENT
UID:b41164e1-fe45-4f82-83cf-c69f89f25614
DTSTAMP:20230419T090534Z
CLASS:PUBLIC
TRANSP:OPAQUE
DESCRIPTION:Anna Pappa
DTSTART;TZID=Europe/Paris:20230214T150000
DTEND;TZID=Europe/Paris:20230214T180000
LOCATION:B104
SUMMARY;LANGUAGE=fr:Ingénierie des langues
END:VEVENT
\end{minted}
\caption{Extrait de l'emploi du temps des L3-Y sous forme de fichier
2023-04-19 11:31:12 +02:00
(\footnotesize{\texttt{cargo r \dd{}release \dd{} l3-y -e file}})}
2023-04-19 11:25:40 +02:00
\label{txt:l3y-file}
\end{figure}
2023-04-19 08:55:51 +02:00
\subsection{Terminal}
2023-04-19 10:46:29 +02:00
Par défaut, on affiche le calendrier sous forme de tableau dans la sortie
2023-04-19 12:01:55 +02:00
standard du terminal. Pour avoir un affichage différent que le site web,
j'ai décidé de mettre les jours en colonnes et les heures en lignes.
2023-04-19 11:25:40 +02:00
\begin{figure}[h]
\hspace{-5em}
\includegraphics[width=1.29\textwidth]{imgs/output_example.png}
2023-04-19 11:31:12 +02:00
\caption{Affichage de l'emploi du temps des L3-Y sur la sortie standard}
2023-04-19 11:25:40 +02:00
\label{fig:l3y-cli}
\end{figure}
2023-04-19 08:55:51 +02:00
\section{Exemple d'utilisation}
2023-04-19 11:53:19 +02:00
Voici explication de comment utiliser le programme :
2023-04-19 11:47:59 +02:00
\begin{description}
\item[\texttt{<CLASS>}] spécifie quelle classe on veut récupérer l'emploi
2023-04-19 12:01:55 +02:00
du temps, elle peut être écrite dans plusieurs formats, tant
qu'il n'y a pas d'espaces, exemples :
\q{L3A} \q{L3-a} \q{l3$\cdot$A} etc.
2023-04-19 11:53:19 +02:00
\begin{itemize}
\item[$\rightarrow$] \texttt{cargo r \dd{}release \dd{} L3Y}
\end{itemize}
2023-04-19 11:47:59 +02:00
\item[\texttt{-e, \dd{}export <file>}] permet d'exporter dans un fichier
l'emploi du temps (cf. \autoref{txt:l3y-file})
2023-04-19 11:53:19 +02:00
\begin{itemize}
\item[$\rightarrow$] \texttt{cargo r \dd{}release \dd{} L3Y -e file}
\end{itemize}
\item[\texttt{-h, \dd{}help}] affiche un message d'aide similaire à ce
bloc descriptif
\begin{itemize}
\item[$\rightarrow$] \texttt{cargo r \dd{}release \dd{} -h}
\end{itemize}
2023-04-19 11:47:59 +02:00
\end{description}
\vspace{1em}
Par défaut, le programme affiche l'emploi du temps dans la sortie standard
(cf. \autoref{fig:l3y-cli}) et ne l'exporte pas dans un fichier.
2023-04-19 11:53:19 +02:00
\begin{itemize}
\item[$\rightarrow$] \texttt{cargo r \dd{}release}
\end{itemize}
2023-04-19 08:55:51 +02:00
2023-04-19 12:06:16 +02:00
\appendix
\section*{Appendix}
2023-04-19 12:11:55 +02:00
\subsection*{Dépendances}
2023-04-19 12:06:16 +02:00
Vous avez besoin de Rust pour la compilation et de OpenSSL pour les requêtes
internet.
2023-04-19 12:11:55 +02:00
\subsubsection*{Rust}
2023-04-19 12:06:16 +02:00
\begin{figure}[h]
\begin{minted}[autogobble,fontsize=\footnotesize]{text}
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\end{minted}
\end{figure}
2023-04-19 08:55:51 +02:00
\end{document}