← back to Fb21 Mfr Images
apply_fb21.sh
76 lines
#!/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"