From e897fda4c625cf4769dbc47ee226cba988afbc0f Mon Sep 17 00:00:00 2001 From: Yoan Le Clanche Date: Thu, 2 Jul 2026 09:30:57 +0200 Subject: [PATCH] Use the new "avis verifies" API --- app/settings.py | 4 + .../management/commands/test_avis_list.py | 75 +++++++++++++------ 2 files changed, 58 insertions(+), 21 deletions(-) diff --git a/app/settings.py b/app/settings.py index 404a4273..93384f2f 100644 --- a/app/settings.py +++ b/app/settings.py @@ -266,6 +266,10 @@ COPY_INSCRIPTION_TO_EMAIL = "inscription@pro-barreau.com" REPORT_TO_EMAIL = ('kostya.rilov@pre-barreau.com', 'alexia.dcruz@pro-barreau.com') EMAIL_SUBJECT_PREFIX = '[' + TELEFORMA_ORGANIZATION + '] ' +# Skeepers / Avis Vérifiés - Published API (OAuth2 client credentials) +SKEEPERS_CLIENT_ID = os.environ.get('SKEEPERS_CLIENT_ID', '') +SKEEPERS_CLIENT_SECRET = os.environ.get('SKEEPERS_CLIENT_SECRET', '') + PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.PBKDF2PasswordHasher', ] diff --git a/teleforma/management/commands/test_avis_list.py b/teleforma/management/commands/test_avis_list.py index f3e86d14..77ea0edd 100644 --- a/teleforma/management/commands/test_avis_list.py +++ b/teleforma/management/commands/test_avis_list.py @@ -1,26 +1,59 @@ +import datetime + import requests +from django.conf import settings from django.core.management.base import BaseCommand -import datetime + +# Skeepers / Avis Vérifiés - Published API (OAuth2 client credentials) +# Replaces the legacy cl.avis-verifies.com "publication" API deactivated on +# 2026-11-17. See https://apidocs.skeepers.io/migrations-published.html +SKEEPERS_TOKEN_URL = 'https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token' +SKEEPERS_API_URL = 'https://api.skeepers.io/verified-reviews/v1/published' +SKEEPERS_AUDIENCE = 'verified-reviews' + class Command(BaseCommand): - help = "Fetch product reviews" - - def handle(self, *args, **kwargs): - product_id = "CONF0124" - url = f'http://cl.avis-verifies.com/fr/cache/8/d/a/8da32059-03b0-23c4-1554-4f4b505a8c6a/AWS/PRODUCT_API/REVIEWS/{product_id}.json' - response = requests.get(url) - if response.status_code == 200: - avis_list = response.json() - for avis in avis_list: - print("*"*7) - print(avis) - print("*"*7) - date = avis['publish_date'] - if date == 'Array': - date = avis['review_date'] - if date == 'Array': - continue + help = "Fetch product reviews from the Skeepers Published API" + + def add_arguments(self, parser): + parser.add_argument('--product', default='CONF0124') + + def get_token(self): + response = requests.post( + SKEEPERS_TOKEN_URL, + data={ + 'grant_type': 'client_credentials', + 'client_id': settings.SKEEPERS_CLIENT_ID, + 'client_secret': settings.SKEEPERS_CLIENT_SECRET, + 'audience': SKEEPERS_AUDIENCE, + }, + timeout=10, + ) + response.raise_for_status() + return response.json()['access_token'] + + def handle(self, *args, **options): + product_id = options['product'] + if not settings.SKEEPERS_CLIENT_ID or not settings.SKEEPERS_CLIENT_SECRET: + self.stderr.write("SKEEPERS_CLIENT_ID / SKEEPERS_CLIENT_SECRET are not configured") + return + + token = self.get_token() + response = requests.get( + SKEEPERS_API_URL + '/products/reviews', + params={'product_variation_id': product_id, 'limit': 200}, + headers={'Authorization': 'Bearer %s' % token}, + timeout=10, + ) + if response.status_code != 200: + self.stderr.write("Failed to fetch reviews: %s" % response.status_code) + return + + for avis in response.json(): + print("*" * 7) + print(avis) + date = avis.get('publish_date') or avis.get('review_date') + if date: avis['publish_date'] = datetime.datetime.strptime( - date, '%Y-%m-%d %H:%M:%S') - else: - self.stderr.write(f"Failed to fetch reviews: {response.status_code}") + date[:19], '%Y-%m-%dT%H:%M:%S') + print("*" * 7) -- 2.47.3