From 200157b01d9cc264fc1bff02757fa9ce99806706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matt=C3=A9o=20Delabre?= Date: Tue, 26 Nov 2019 10:36:07 -0500 Subject: [PATCH] =?UTF-8?q?pageviews:=20Affichage=20des=20requ=C3=AAtes=20?= =?UTF-8?q?effectu=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/fetch/http.py | 35 +++++++++++++++++++++++++------ data/fetch/wikipedia_pageviews.py | 8 ++++--- data/plot_pageviews.py | 3 ++- 3 files changed, 36 insertions(+), 10 deletions(-) mode change 100644 => 100755 data/plot_pageviews.py diff --git a/data/fetch/http.py b/data/fetch/http.py index 91fdbc1..c06f5c9 100644 --- a/data/fetch/http.py +++ b/data/fetch/http.py @@ -1,15 +1,38 @@ +import logging import requests import urllib3 # Session de requêtage HTTP session = requests.Session() -# Réalise 10 essais de récupération de chaque page, en augmentant -# progressivement le délai entre chaque essai -retry = urllib3.util.Retry(total=10, backoff_factor=0.3) -adapter = requests.adapters.HTTPAdapter(max_retries=retry) -session.mount('http', adapter) -session.mount('https', adapter) +# Objet pour afficher le journal d’exécution +logger = logging.getLogger('fetch.http') + + +class LoggingAdapter(requests.adapters.HTTPAdapter): + """ + Adapteur de requêtes vérifiant le nombre d’accès réalisés par seconde. + """ + def __init__(self): + # Réessaie jusqu’à dix fois la récupération de chaque page, en + # augmentant progressivement le délai entre chaque essai + retry = urllib3.util.Retry(total=10, backoff_factor=0.3) + super(LoggingAdapter, self).__init__(max_retries=retry) + + def send( + self, request, stream=False, timeout=None, verify=True, + cert=None, proxies=None + ): + logger.debug('{} {}'.format(request.method, request.url)) + return super(LoggingAdapter, self).send( + request, stream=stream, timeout=timeout, + verify=verify, cert=cert, proxies=proxies + ) + + +adapter = LoggingAdapter() +session.mount('http://', adapter) +session.mount('https://', adapter) # Identification du robot session.headers['User-Agent'] = ( diff --git a/data/fetch/wikipedia_pageviews.py b/data/fetch/wikipedia_pageviews.py index db07a9c..66d0f1f 100644 --- a/data/fetch/wikipedia_pageviews.py +++ b/data/fetch/wikipedia_pageviews.py @@ -28,12 +28,14 @@ def _year_date_distance(a, b): """ Calcule la distance entre deux jours de l’année. - :example: _year_date_distance(10, 360) == 15 - :example: _year_date_distance(numpy.array([10, 182, 355]), 182) - == [172, 0, 173] :param a: Première valeur (peut être un tableau numpy). :param b: Seconde valeur (peut être un tableau numpy). :return: Valeur de la distance. + + >>> _year_date_distance(10, 360) + 15 + >>> _year_date_distance(numpy.array([10, 182, 355]), 182) + [172, 0, 173] """ return numpy.stack(( numpy.mod(a - b, len(year_all_days)), diff --git a/data/plot_pageviews.py b/data/plot_pageviews.py old mode 100644 new mode 100755 index e63055e..6ff2c59 --- a/data/plot_pageviews.py +++ b/data/plot_pageviews.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python3 import calendar import collections from datetime import datetime @@ -8,7 +9,7 @@ from matplotlib import pyplot import sys # Objet pour afficher le journal d’exécution -logger = logging.getLogger('pageviews') +logger = logging.getLogger('plot_pageviews') logging.basicConfig(level=logging.INFO) if len(sys.argv) < 4: