110 lines
2.5 KiB
Bash
Executable File
110 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
# POSIX-safe (dash/sh compatible)
|
|
set -eu
|
|
|
|
OUT="/var/www/EFT_COMPANION/public_html/ammo-data.json"
|
|
API="https://api.tarkov.dev/graphql"
|
|
|
|
# --- Preferred: ammo-only (note lowercase enum value 'ammo') ---
|
|
GQL_AMMO_ONLY='{
|
|
items(lang: en, types: [ammo]) {
|
|
id
|
|
name
|
|
shortName
|
|
iconLink
|
|
wikiLink
|
|
updated
|
|
properties {
|
|
__typename
|
|
... on ItemPropertiesAmmo {
|
|
caliber
|
|
tracer
|
|
tracerColor
|
|
damage
|
|
armorDamage
|
|
fragmentationChance
|
|
penetrationPower
|
|
accuracyModifier
|
|
recoilModifier
|
|
initialSpeed
|
|
lightBleedModifier
|
|
heavyBleedModifier
|
|
projectileCount
|
|
}
|
|
}
|
|
}
|
|
}'
|
|
|
|
# --- Fallback: all items then filter to ItemPropertiesAmmo ---
|
|
GQL_ALL_MIN='{
|
|
items(lang: en) {
|
|
id
|
|
name
|
|
shortName
|
|
iconLink
|
|
wikiLink
|
|
updated
|
|
properties {
|
|
__typename
|
|
... on ItemPropertiesAmmo {
|
|
caliber
|
|
tracer
|
|
tracerColor
|
|
damage
|
|
armorDamage
|
|
fragmentationChance
|
|
penetrationPower
|
|
accuracyModifier
|
|
recoilModifier
|
|
initialSpeed
|
|
lightBleedModifier
|
|
heavyBleedModifier
|
|
projectileCount
|
|
}
|
|
}
|
|
}
|
|
}'
|
|
|
|
# Build JSON payloads safely via jq (read from stdin, -R = raw, -s = slurp)
|
|
PAYLOAD_AMMO_ONLY=$(printf '%s' "$GQL_AMMO_ONLY" | jq -Rs '{query: .}')
|
|
PAYLOAD_ALL_MIN=$(printf '%s' "$GQL_ALL_MIN" | jq -Rs '{query: .}')
|
|
|
|
fetch_graphql () {
|
|
payload="$1"
|
|
curl -sS -X POST "$API" \
|
|
-H 'Content-Type: application/json' \
|
|
-H 'Accept: application/json' \
|
|
--data-binary "$payload"
|
|
}
|
|
|
|
# Try ammo-only first
|
|
JSON=$(fetch_graphql "$PAYLOAD_AMMO_ONLY")
|
|
|
|
# If .data is missing, fall back to broad query
|
|
if ! printf '%s' "$JSON" | jq -e '.data' >/dev/null 2>&1 ; then
|
|
echo "Ammo-only query failed, falling back to broad items query…" >&2
|
|
JSON=$(fetch_graphql "$PAYLOAD_ALL_MIN")
|
|
if ! printf '%s' "$JSON" | jq -e '.data' >/dev/null 2>&1 ; then
|
|
echo "GraphQL error on fallback:" >&2
|
|
printf '%s\n' "$JSON" | jq . >&2 || printf '%s\n' "$JSON" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Normalize to a compact JSON your site can consume
|
|
TMP="$OUT.tmp"
|
|
printf '%s' "$JSON" | jq -c '
|
|
{
|
|
fetchedAt: (now | todate),
|
|
source: "api.tarkov.dev/graphql",
|
|
items: (
|
|
.data.items
|
|
| map(select(.properties != null and .properties.__typename == "ItemPropertiesAmmo"))
|
|
)
|
|
}
|
|
' > "$TMP"
|
|
|
|
mv "$TMP" "$OUT"
|
|
COUNT=$(jq '.items | length' "$OUT")
|
|
echo "Wrote $COUNT ammo rows to $OUT at $(date -Is)"
|