pageviews: Affichage des requêtes effectuées

This commit is contained in:
Mattéo Delabre 2019-11-26 10:36:07 -05:00
parent 94af43e4a1
commit 200157b01d
Signed by: matteo
GPG Key ID: AE3FBD02DC583ABB
3 changed files with 36 additions and 10 deletions

View File

@ -1,15 +1,38 @@
import logging
import requests import requests
import urllib3 import urllib3
# Session de requêtage HTTP # Session de requêtage HTTP
session = requests.Session() session = requests.Session()
# Réalise 10 essais de récupération de chaque page, en augmentant # Objet pour afficher le journal dexécution
# progressivement le délai entre chaque essai logger = logging.getLogger('fetch.http')
class LoggingAdapter(requests.adapters.HTTPAdapter):
"""
Adapteur de requêtes vérifiant le nombre daccè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) retry = urllib3.util.Retry(total=10, backoff_factor=0.3)
adapter = requests.adapters.HTTPAdapter(max_retries=retry) super(LoggingAdapter, self).__init__(max_retries=retry)
session.mount('http', adapter)
session.mount('https', adapter) 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 # Identification du robot
session.headers['User-Agent'] = ( session.headers['User-Agent'] = (

View File

@ -28,12 +28,14 @@ def _year_date_distance(a, b):
""" """
Calcule la distance entre deux jours de lannée. Calcule la distance entre deux jours de lanné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 a: Première valeur (peut être un tableau numpy).
:param b: Seconde valeur (peut être un tableau numpy). :param b: Seconde valeur (peut être un tableau numpy).
:return: Valeur de la distance. :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(( return numpy.stack((
numpy.mod(a - b, len(year_all_days)), numpy.mod(a - b, len(year_all_days)),

3
data/plot_pageviews.py Normal file → Executable file
View File

@ -1,3 +1,4 @@
#!/usr/bin/env python3
import calendar import calendar
import collections import collections
from datetime import datetime from datetime import datetime
@ -8,7 +9,7 @@ from matplotlib import pyplot
import sys import sys
# Objet pour afficher le journal dexécution # Objet pour afficher le journal dexécution
logger = logging.getLogger('pageviews') logger = logging.getLogger('plot_pageviews')
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
if len(sys.argv) < 4: if len(sys.argv) < 4: