Siirry dokumentaation sisältöön
HintadataDocs

Ensimmäinen tuotehaku

Ratkaise kanoninen tuotetunniste ja tarkista sen nykyiset tarjoukset. Aloita sandbox-avaimella, jolla on catalog:read-oikeus. Selainharjoitus käyttää eristettyä esimerkkiaineistoa eikä tarvitse avainta.

Tässä oppaassa
  1. 1Esivaatimukset
  2. 2Suorita ja varmista
  3. 3Palaudu turvallisesti
Tässä oppaassa
  1. 1Esivaatimukset
  2. 2Suorita ja varmista
  3. 3Palaudu turvallisesti

Esivaatimukset ja turvallisuus

Ratkaise kanoninen tuotetunniste ja tarkista sen nykyiset tarjoukset. Aloita sandbox-avaimella, jolla on catalog:read-oikeus. Selainharjoitus käyttää eristettyä esimerkkiaineistoa eikä tarvitse avainta.

Suorita eristetty harjoitus

Hae, korjaa ja tarkista
  1. 1
    Hylkää virheellinen raja
  2. 2
    Hae tuotetunnisteet
  3. 3
    Tarkista löydetty tuote

Suorita omalta palvelimeltasi

bashillustrative
Esimerkin luotettavuus: illustrativeNäyttää muodon tai idean; älä käytä sellaisenaan tuotannossa.
set -euo pipefail
# Requires bash, curl and jq. Use an isolated sandbox API key.
DOCS_BASE_URL="${DOCS_BASE_URL:-https://hintadata.fi}"
: "${HINTADATA_API_KEY:?Set a sandbox API key privately}"
DOCS_VARIABLES=$(jq -cn  '{}')
DOCS_RESPONSE_FILE=$(mktemp)
trap 'rm -f -- "$DOCS_RESPONSE_FILE"' EXIT
# invalid: expected HTTP 400
DOCS_PATH="$(jq -cnr --argjson vars "$DOCS_VARIABLES" '"/v1/search?q=sony&limit=0"')"
DOCS_STATUS=$(curl --silent --show-error --max-time 20 --output "$DOCS_RESPONSE_FILE" --write-out '%{http_code}' -X 'GET' "$DOCS_BASE_URL$DOCS_PATH" -H "Authorization: Bearer $HINTADATA_API_KEY")
[[ "$DOCS_STATUS" == '400' ]] || { printf '%s\n' 'Unexpected HTTP status at invalid' >&2; exit 1; }
DOCS_RESPONSE=$(jq -c . "$DOCS_RESPONSE_FILE")
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("error") else false end) and ($response["error"] | if type == "object" or type == "array" then has("code") else false end))) and ($response["error"]["code"] == ("invalid_request"))' >/dev/null
printf '%s\n' 'invalid: verified'
# search: expected HTTP 200
DOCS_PATH="$(jq -cnr --argjson vars "$DOCS_VARIABLES" '"/v1/search?q=sony&limit=2"')"
DOCS_STATUS=$(curl --silent --show-error --max-time 20 --output "$DOCS_RESPONSE_FILE" --write-out '%{http_code}' -X 'GET' "$DOCS_BASE_URL$DOCS_PATH" -H "Authorization: Bearer $HINTADATA_API_KEY")
[[ "$DOCS_STATUS" == '200' ]] || { printf '%s\n' 'Unexpected HTTP status at search' >&2; exit 1; }
DOCS_RESPONSE=$(jq -c . "$DOCS_RESPONSE_FILE")
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("query") else false end))) and ($response["query"] == ("sony"))' >/dev/null
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("items") else false end) and ($response["items"] | if type == "object" or type == "array" then has(0) else false end) and ($response["items"][0] | if type == "object" or type == "array" then has("canonical_product_id") else false end)) == true)' >/dev/null
DOCS_VARIABLES=$(jq -cn --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" '$vars + {"productId":$response["items"][0]["canonical_product_id"],"secondId":$response["items"][1]["canonical_product_id"]}')
printf '%s\n' 'search: verified'
# inspect: expected HTTP 200
jq -e 'has("productId")' <<< "$DOCS_VARIABLES" >/dev/null
DOCS_PATH="$(jq -cnr --argjson vars "$DOCS_VARIABLES" '"/v1/products/" + ($vars["productId"] | tostring | @uri) + ""')"
DOCS_STATUS=$(curl --silent --show-error --max-time 20 --output "$DOCS_RESPONSE_FILE" --write-out '%{http_code}' -X 'GET' "$DOCS_BASE_URL$DOCS_PATH" -H "Authorization: Bearer $HINTADATA_API_KEY")
[[ "$DOCS_STATUS" == '200' ]] || { printf '%s\n' 'Unexpected HTTP status at inspect' >&2; exit 1; }
DOCS_RESPONSE=$(jq -c . "$DOCS_RESPONSE_FILE")
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("canonical_product_id") else false end))) and ($response["canonical_product_id"] == ($vars["productId"]))' >/dev/null
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("offers") else false end) and ($response["offers"] | if type == "object" or type == "array" then has(0) else false end) and ($response["offers"][0] | if type == "object" or type == "array" then has("delivered_price") else false end)) == true)' >/dev/null
jq -en --argjson vars "$DOCS_VARIABLES" --argjson response "$DOCS_RESPONSE" --argjson status "$DOCS_STATUS" '((($response | if type == "object" or type == "array" then has("canonical_product_id") else false end))) and ($response["canonical_product_id"] == ($vars["productId"]))' >/dev/null
printf '%s\n' 'inspect: verified'

Varmista tulos

Odotettu vastaus on HTTP 200 ja kentät query, items, total ja next_offset. Tallenna canonical_product_id, älä näyttönimeä. Tyhjä items on kelvollinen hakutulos: tarkenna q ennen tunnisteen lukemista. X-Data-Mode: demo ei ole näyttöä tuotantodatasta.

Palautuminen ja siivous

400 invalid_request: aseta q:n pituudeksi 1–120 merkkiä ja limit-arvoksi 1–100. 401: vaihda virheellinen avain; 403: tarkista oikeudet ja tilaus. 503 source_unavailable/source_stale: pyydä lähteen omistajaa julkaisemaan tuore aineisto. Älä esitä esimerkkiaineistoa tuotantodatan korvikkeena.

Noudata 429- ja tilapäisissä 5xx-virheissä Retry-After-ohjetta ja rajaa uudelleenyritykset. Älä vie API-avaimia tai vastausrunkoja lokeihin tai tukipyyntöihin.

Vapaaehtoinen tuotantotehtävän mittaus

Nimenomainen suostumus tallentaa aloituksen ja ensimmäisen onnistuneen tuotantohaun samassa tunnistetussa työtilassa ja ympäristössä. Kuitti vanhenee 30 minuutissa eikä anna API-oikeuksia. Lukeminen, selainharjoitukset ja testiavainten pyynnöt eivät ole tuotanto-onnistumisia. Analytiikkaan menevät vain tehtävä, kieli, julkaisu, aikaleimat ja satunnainen korrelaatiotunniste; ei hakutekstiä, sähköpostia, avainta eikä vastausrunkoa. Jätä molemmat mittausotsakkeet pois, jos et halua osallistua. Jos mittaus ei ole käytettävissä, jatka yllä olevalla tavallisella hakukomennolla.

bashillustrative
Esimerkin luotettavuus: illustrativeNäyttää muodon tai idean; älä käytä sellaisenaan tuotannossa.
set -euo pipefail
# Optional: explicit analytics consent; use a LIVE key only when ready for live data.
ATTEMPT=$(curl --fail-with-body --silent --show-error https://hintadata.fi/api/docs/tasks \
  -H "Authorization: Bearer $HINTADATA_API_KEY" -H 'X-Analytics-Consent: granted' \
  -H 'Content-Type: application/json' \
  --data '{"task":"first-product-search","locale":"fi"}' | jq -er '.receipt')
curl --fail-with-body --silent --show-error --get https://hintadata.fi/v1/search \
  -H "Authorization: Bearer $HINTADATA_API_KEY" -H 'X-Analytics-Consent: granted' \
  -H "X-Docs-Attempt: $ATTEMPT" --data-urlencode 'q=sony' --data 'limit=2' | jq .
unset ATTEMPT
Oliko tästä sivusta apua?