initial commit
This commit is contained in:
Executable
+109
@@ -0,0 +1,109 @@
|
||||
#!/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)"
|
||||
Reference in New Issue
Block a user