#5 cleanup code
This commit is contained in:
212
api.py
212
api.py
@ -1,212 +0,0 @@
|
||||
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 l’eau 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 d’en prendre connaissance avant d’allumer 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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user