[object Object]

← back to Fb21 Mfr Images

FB21 Koroseal Fibre: reactivate 18 + swap 17 primary images from Goodrich mfr page (live)

044b6735accee33711a40800aab355d60e363e1b · 2026-07-14 09:58:16 -0700 · Steve

Files touched

Diff

commit 044b6735accee33711a40800aab355d60e363e1b
Author: Steve <steve@designerwallcoverings.com>
Date:   Tue Jul 14 09:58:16 2026 -0700

    FB21 Koroseal Fibre: reactivate 18 + swap 17 primary images from Goodrich mfr page (live)
---
 .gitignore    |  3 +++
 apply_fb21.sh | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1873518
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+staging/
+*.log
+.DS_Store
diff --git a/apply_fb21.sh b/apply_fb21.sh
new file mode 100755
index 0000000..a4ba902
--- /dev/null
+++ b/apply_fb21.sh
@@ -0,0 +1,75 @@
+#!/bin/bash
+# FB21 (Koroseal Fibre) — activate 18 + swap primary image on 17 (FB21-05 keeps its image)
+# Steve-approved in-session. Live store: designer-laboratory-sandbox.myshopify.com
+set -uo pipefail
+TOKEN="$(grep '^SHOPIFY_ADMIN_TOKEN=' ~/Projects/secrets-manager/.env | cut -d= -f2)"
+STORE="designer-laboratory-sandbox.myshopify.com"
+VER="2024-10"
+BASE="https://$STORE/admin/api/$VER"
+H_TOK="X-Shopify-Access-Token: $TOKEN"
+IMGBASE="https://www.goodrichglobal.com/singapore/wp-content/uploads/2024/11"
+NO_IMG="FB21-05"   # 404 on Goodrich — activate only, keep existing image
+
+# sku:productid  (one per line)
+PAIRS="FB21-01:7766998286387
+FB21-02:7766998450227
+FB21-03:7766998482995
+FB21-04:7766998515763
+FB21-05:7766998548531
+FB21-06:7766998712371
+FB21-07:7766998745139
+FB21-08:7766998253619
+FB21-09:7766998908979
+FB21-10:7766998941747
+FB21-11:7766999105587
+FB21-12:7766999138355
+FB21-13:7766999334963
+FB21-14:7766999498803
+FB21-15:7766999531571
+FB21-16:7766999695411
+FB21-17:7766999728179
+FB21-18:7766999892019"
+
+echo "$PAIRS" | while IFS=: read -r sku id; do
+  [ -z "$sku" ] && continue
+  # 1) status -> active
+  st=$(curl -s -o /tmp/fb_st.json -w "%{http_code}" -X PUT "$BASE/products/$id.json" \
+        -H "$H_TOK" -H "Content-Type: application/json" \
+        -d "{\"product\":{\"id\":$id,\"status\":\"active\"}}")
+  echo "[$sku] status->active HTTP $st"
+  sleep 0.5
+
+  if [ "$sku" = "$NO_IMG" ]; then
+    echo "[$sku] image: SKIP (no mfr image on Goodrich; keeping existing)"
+    continue
+  fi
+
+  # 2) capture existing image ids
+  old_ids=$(curl -s "$BASE/products/$id/images.json" -H "$H_TOK" | python3 -c 'import sys,json
+try:
+  d=json.load(sys.stdin); print(" ".join(str(i["id"]) for i in d.get("images",[])))
+except Exception: print("")')
+
+  # 3) add mfr image at position 1
+  src="$IMGBASE/$sku.jpg"
+  new=$(curl -s -X POST "$BASE/products/$id/images.json" -H "$H_TOK" -H "Content-Type: application/json" \
+        -d "{\"image\":{\"src\":\"$src\",\"position\":1,\"alt\":\"$sku Koroseal Fibre wallcovering\"}}")
+  new_id=$(echo "$new" | python3 -c 'import sys,json
+try:
+  d=json.load(sys.stdin); print(d.get("image",{}).get("id",""))
+except Exception: print("")')
+  if [ -z "$new_id" ]; then
+    echo "[$sku] image POST FAILED — keeping old images. resp: $(echo "$new" | head -c 200)"
+    continue
+  fi
+  echo "[$sku] new image id=$new_id posted (old: ${old_ids:-none})"
+  sleep 1
+
+  # 4) delete old images
+  for oid in $old_ids; do
+    dc=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE "$BASE/products/$id/images/$oid.json" -H "$H_TOK")
+    echo "[$sku]   deleted old image $oid HTTP $dc"
+    sleep 0.3
+  done
+done
+echo "DONE"

(oldest)  ·  back to Fb21 Mfr Images  ·  FB21 finish: Sample@$4.25 variants + Online Store publish (1 0704df6 →