Skip to content

Instantly share code, notes, and snippets.

@marco79cgn
Last active September 24, 2023 11:25
Show Gist options
  • Save marco79cgn/1184e77b39fdf7ba510ac8650afe0674 to your computer and use it in GitHub Desktop.
Save marco79cgn/1184e77b39fdf7ba510ac8650afe0674 to your computer and use it in GitHub Desktop.
Bash script that checks whether an Apple product is available for pickup at your nearest Apple Store and sends a push notification if it gets available again (via ntfy.sh)
#!/bin/bash
partNo=$1
storeId=$2
notifyUrl=https://ntfy.sh/$3
FILE=$4/${partNo/\//-}-$storeId
if [ ! -f "$FILE" ]; then
echo "$FILE does not exist."
echo -n "1" > $FILE
fi
productName=""
function curlItem {
apiResult=$(/usr/bin/curl -s "https://www.apple.com/de/shop/fulfillment-messages?store=${storeId}&little=false&parts.0=${partNo}&purchaseOption=fullPrice&mts.0=regular&mts.1=sticky&fts=true")
productName=$(echo -n ${apiResult} | jq -r ".body.content.pickupMessage.stores[0].partsAvailability.\"${partNo}\".messageTypes.regular.storePickupProductTitle")
storeAvailability=$(echo -n ${apiResult} | jq -r ".body.content.pickupMessage.stores[0].partsAvailability.\"${partNo}\".pickupDisplay" | grep -i -w "available" | wc -l)
printf "Store ${storeId}: ${storeAvailability}"
if [ "$storeAvailability" -eq "1" ]; then
previousState=$(<$FILE)
if [[ "$previousState" == 0 ]]; then
sendPush
echo -n "1" > $FILE
exit
fi
else
echo -n "0" > $FILE
fi
}
function sendPush {
result=$(/usr/bin/curl -s -X POST -H "Title: Apple Store" -H "Click: https://store.apple.com/de/xc/product/$partNo" -H "Tags: apple" -d "${productName} ist jetzt verfügbar! (Tap to order)" $notifyUrl)
}
responsedata=$(curlItem)
echo $responsedata
@marco79cgn
Copy link
Author

Update 24.09.2023

Das Skript ist jetzt komplett universell benutzbar und muss nicht mehr editiert werden. Beim Aufruf müssen die benötigten 4 Parameter lediglich mitgegeben werden: partNo storeId notifyTopic tempFolder

Zum Beispiel für das iPhone 15 Pro Max 256 GB Titan Blau im Apple Store Köln Schildergasse:
./apple-availability-check.sh "MU7A3ZD/A" "R559" "my-secret-apple-alerts-395920" "/Users/marco/dev/temp"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment