Files
missbleue/api.py
2025-04-07 12:20:48 +02:00

213 lines
8.6 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from woocommerce import API
import pandas as pd
import ezodf
import requests
import pprint
wcapi = API(
url="https://lescreationsdemissbleue.local",
consumer_key="ck_604e9b7b5d290cce72346efade6b31cb9a1ff28e",
consumer_secret="cs_563974c7e59532c1ae1d0f8bbf61f0500d6bc768",
wp_api=True,
version="wc/v3",
verify_ssl=False # Désactive la vérification SSL pour le développement
)
"""
'images': [
{'src':'https://lescreationsdemissbleue.local/wp-content/uploads/2025/02/chope-citron-meringue-face.jpg'},
{'src':'https://lescreationsdemissbleue.local/wp-content/uploads/2025/02/chope-citron-meringue-haut.jpg'},
]
{'alt': '',
'date_created': '2025-01-16T17:22:38',
'date_created_gmt': '2025-01-16T16:22:38',
'date_modified': '2025-01-16T17:22:38',
'date_modified_gmt': '2025-01-16T16:22:38',
'name': 'Chope citron meringué (3)',
'src': 'https://lescreationsdemissbleue.local/wp-content/uploads/2025/02/chope-citron-meringue-dos.jpg'}"""
"""import requests
url = "https://lescreationsdemissbleue.local/wp-json/wp/v2/media?media_type=image"
response = requests.get(url, verify=False) # note: verify=False pour bypasser le certificat auto-signé en local
images = response.json()
print(images)
pprint.pprint(response.json())
"""
"""data = {
'images' : [
{'id':610},#,'src':'https://lescreationsdemissbleue.local/wp-content/uploads/2025/02/chope-citron-meringue-face.jpg'},
{'id':609},#'src':'https://lescreationsdemissbleue.local/wp-content/uploads/2025/02/chope-citron-meringue-haut.jpg'},
{'id':608},
],
}"""
"""data = {
'description': ""La Chope au parfum citron meringué est une véritable œuvre d'art, entièrement fabriquée à la main avec soin et précision, tant par le verre qui a été réalisé par un artisan verrier à Montauroux dans le Sud de la France, que par la bougie elle-même qui est faite avec passion par mes soins.
Cette bougie offre une expérience olfactive unique, combinant les notes sophistiquées des parfums de Grasse avec la fraîcheur acidulée du citron meringué. Parfaite pour créer une ambiance chaleureuse et accueillante, elle diffuse un parfum délicat et fruité qui enveloppera votre intérieur. Que ce soit pour une soirée relaxante ou pour ajouter une touche originale à votre décoration, cette bougie est un choix raffiné qui séduira vos sens et émerveillera vos invités.
La couleur jaune est associée à la joie, à la gaieté et à la fête. Elle est la couleur de l'amitié, des relations sociales ou encore de la fraternité. Le jaune peut aussi faire référence à la douceur et à la fraîcheur. Il est associé au bien-être et à la bonne humeur et transmet un côté ludique et rafraîchissant.
Si vous souhaitez apporter une touche ensoleillée et acidulée à votre intérieur cette chope est faite pour vous.
Parfum de Grasse
Sans CMR
Sans phtalates
Non testé sur des animaux
Mèche en coton"",
'regular_price': '36.00',
'price': '36.00',
'stock_quantity':1,
'weight':'0.895'
}"""
data = {
"meta_data": [
{
"key": "conseil_utilisation",
"value": """- Allumez la bougie et laissez un puits se creuser autour de la mèche afin que l'odeur se diffuse. Ne dépassez pas les 3h continues de brûlage. 
- La cire de soja se nettoie facilement avec de leau chaude, vous pourrez ainsi récupérer le contenant après avoir consumé toute la bougie,
- Toutes les bougies disposent détiquettes de sécurité, merci den prendre connaissance avant dallumer le produit.
- La bougie brûlera environ 38 heures."""
}
]
}
response = wcapi.get("products/199")
if response.status_code == 200:
#wcapi.put("products/categories/199", data).json()
#wcapi.put("products/199", data)
#pprint.pprint(response.json())
#response = wcapi.put("products/199", data)
#pprint.pprint(response.json())
pass
else:
print("Erreur lors de la connexion :", response.text)
#print(wcapi.get("categorie/bougie-chope-de-biere/").json())
"""category_data = {
"name": "Bougies Parfumées",
"description": "Collection de bougies artisanales aux parfums uniques.",
"parent": 0,
"image": {"src": "C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\photos\\pyramide_olfactive.png"},
"alt":"Bougie parfumées artisanale",
"name":"Bougie parfumées artisanale",
}"""
import base64
# ✅ Générer l'authentification Basic en Base64 avec `consumer_key` et `consumer_secret`
auth_str = wcapi.consumer_key
auth_bytes = auth_str.encode("utf-8")
auth_base64 = base64.b64encode(auth_bytes).decode("utf-8")
# ✅ URL de l'API WooCommerce pour les médias
media_api_url = "https://lescreationsdemissbleue.local/wp-json/wp/v2/media"
products_api_url = "https://lescreationsdemissbleue.local/wp-json/wc/v3/products"
headers = {
"Authorization": f"Basic {base64.b64encode(f'{wcapi.consumer_key}:{wcapi.consumer_secret}'.encode()).decode()}",
"Content-Type": "application/json"
}
# API category
categories_api_url = "https://lescreationsdemissbleue.local/wp-json/wp/v2/product_cat"
def create_category(categories_api_url, headers, name, description, image_id=None, parent_id=None):
"""Crée une catégorie WooCommerce (principale ou sous-catégorie)"""
category_data = {
"name": name,
"description": description,
"image" :
{
"id":image_id
},
"parent": parent_id if parent_id else 0,
}
response = requests.post(categories_api_url, headers=headers, json=category_data)
if response.status_code == 201:
category = response.json()
print(f"✅ Catégorie '{name}' créée avec succès ! ID : {category['id']}")
return category["id"]
else:
print(f"❌ Erreur lors de la création de '{name}' : {response.status_code} {response.text}")
return None
# ✅ Exécuter la création automatique
"""category_parent_id = create_category("Gamme prestige", "Catégorie principale pour organiser la gamme prestige")
if category_parent_id:
subcategory_id = create_category("Chopes", "Sous-catégorie de la gamme prestige", category_parent_id)
"""
# ✅ Récupérer les produits
"""response = requests.get(products_api_url, headers=headers, params={"per_page": 100}, verify=False) # Limite à 100 produits
if response.status_code == 200:
products = response.json()
# 📌 Extraire les ID et noms des produits ainsi que leurs catégories associées
for product in products:
product_id = product["id"]
product_name = product["name"]
categories = [cat["name"] for cat in product["categories"]] # Récupérer les noms des catégories
print(f"📌 Produit ID: {product_id} - Nom: {product_name} - Catégories: {', '.join(categories) if categories else 'Aucune'}")
else:
print(f"❌ Erreur : {response.status_code} {response.text}")"""
"""response_create_category = wcapi.post("products/categories/", category_data)
if response_create_category.status_code == 201:
#wcapi.put("products/categories/199", data).json()
#wcapi.put("products/199", data)
#pprint.pprint(response.json())
#response = wcapi.put("products/199", data)
category = response_create_category.json()
category_id = category["id"]
pprint.pprint(response_create_category.json())
print(f"category_id = {category_id}")
else:
print("Erreur lors de la connexion :", response.text)"""
import pandas as pd
import ezodf
# Charger le fichier ODS
ezodf.config.set_table_expand_strategy('all')
doc = ezodf.opendoc("C:\\Users\\beren\\OneDrive\\Documents\\nextcloud\\beren\\site_missbleue\\infos_site.ods")
# Sélectionner la première feuille
sheet = doc.sheets[0]
# Convertir la feuille en DataFrame
data = []
for row in sheet.rows():
data.append([cell.value for cell in row])
import json
# Convertir en DataFrame Pandas
df = pd.DataFrame(data)
# Vérifier que la première ligne contient bien les noms des colonnes
df.columns = df.iloc[0] # Définit la première ligne comme noms des colonnes
df = df[1:].reset_index(drop=True) # Supprime la première ligne et réindexe correctement
df = df.dropna(how='all') # Supprime les lignes entièrement vides
# Convertir en JSON (clé = noms des colonnes)
json_data = df.to_dict(orient="records")
# Afficher le JSON formaté
#print(json.dumps(json_data, indent=4, ensure_ascii=False))
for row in json_data:
print(row['Photo'])
#get_data = json.dumps(json_data, indent=4, ensure_ascii=False)