-
Notifications
You must be signed in to change notification settings - Fork 0
/
add_shop.php
122 lines (98 loc) · 3.89 KB
/
add_shop.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
require_once "config.php";
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Erreur de connexion à la base de données : " . $e->getMessage());
}
if(!isset($argv[1]) || empty($argv[1])){
die("Site name is required");
}
if(!isset($argv[2]) || empty($argv[2])){
die("Site url is required");
}
try {
$shopName = $argv[1];
$shopUrl = $argv[2];
$shopUrl = rtrim($shopUrl, "/");
$jsonUrl = $shopUrl . "/products.json";
// Vérifier l'unicité du site
$stmt = $pdo->prepare("SELECT * FROM shops WHERE shop_url = ?");
$stmt->execute([$shopUrl]);
if ($stmt->rowCount() > 0) {
die("Ce site existe déjà dans la base de données.");
}
// Début de la transaction
$pdo->beginTransaction();
// Ajouter le site à la base de données
$stmt = $pdo->prepare("INSERT INTO shops (shop_name, shop_url) VALUES (?, ?)");
$stmt->execute([$shopName, $shopUrl]);
$shopId = $pdo->lastInsertId();
// Nombre maximum de produits par page
$page = 1;
$productsPerPage = 250;
do {
// Mise à jour de l'URL pour la pagination
$paginatedUrl = $jsonUrl . "?limit=$productsPerPage&page=$page";
// Récupérer le fichier products.json
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $paginatedUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Chrome/59.0.3071.115');
$productsJson = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Vérifier que le fichier a bien été récupéré
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($httpCode !== 200) {
throw new Exception("Erreur lors de la récupération du fichier products.json.");
}
if ($productsJson === false) {
throw new Exception("Erreur lors de la récupération du fichier products.json.");
}
// Décoder le JSON
$productsData = json_decode($productsJson, true);
if ($productsData === null) {
throw new Exception("Erreur lors du décodage du JSON.");
}
// Ajouter les produits et les variantes à la base de données
foreach ($productsData['products'] as $product) {
// Ajouter le produit
$stmt = $pdo->prepare("INSERT INTO products (shopify_product_id, shop_id, title, handle, created_at, updated_at, image_url) VALUES (?, ?, ?, ?, ?, ?, ?)");
$stmt->execute([
$product['id'],
$shopId,
$product['title'],
$product['handle'],
$product['created_at'],
$product['updated_at'],
$product['images'][0]['src'] ?? null
]);
// Ajouter les variantes
foreach ($product['variants'] as $variant) {
$stmt = $pdo->prepare("INSERT INTO variants (shopify_variant_id, product_id, title, price, available) VALUES (?, ?, ?, ?, ?)");
$stmt->execute([
$variant['id'],
$product['id'],
$variant['title'],
$variant['price'],
$variant['available'] ? 1 : 0
]);
}
}
$page++;
} while (count($productsData['products']) >= $productsPerPage);
// Valider la transaction
$pdo->commit();
echo "Site et produits ajoutés avec succès.";
} catch (PDOException $e) {
// Gestion des erreurs de base de données
$pdo->rollBack();
die("Erreur de base de données : " . $e->getMessage());
} catch (Exception $e) {
// Gestion des autres erreurs
$pdo->rollBack();
die("Erreur : " . $e->getMessage());
}
?>