Aqbeż għall-kontenut
ShopentlyLearn

Ritratt · WebP

Ara r-ritratti tal-artikli u l-previżjonijiet tagħhom

GET/api/v1/addons/shopently.blog/media/{media_id}/file

Awtentikazzjoni
Bearer
Disponibbli minn
BASIC
Modulu installat meħtieġ
shopently.blog · Verżjoni tal-kuntratt tal-modulu 1
Permessi meħtieġa
addon.shopently.blog:media_read

Eżempji ta’ kodiċi

Eżempju ta’ talba

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request GET \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --max-filesize 5242880 \
  --output "${SHOPENTLY_OUTPUT_FILE:?}" \
  --url "${SHOPENTLY_SHOP_URL%/}"'/api/v1/addons/shopently.blog/media/e8663afe-3c38-461c-a142-a980085630af/file?variant=thumbnail'

PHP

<?php
declare(strict_types=1);

$baseUrl = rtrim(getenv('SHOPENTLY_SHOP_URL') ?: '', '/');
$origin = parse_url($baseUrl);
if (!$origin || ($origin['scheme'] ?? '') !== 'https' || empty($origin['host']) ||
    isset($origin['user'], $origin['pass']) || isset($origin['user']) || isset($origin['path']) ||
    isset($origin['query']) || isset($origin['fragment'])) {
    throw new RuntimeException('SHOPENTLY_SHOP_URL must be an HTTPS origin');
}
$credential = getenv('SHOPENTLY_ACCESS_TOKEN') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = [];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/addons/shopently.blog/media/e8663afe-3c38-461c-a142-a980085630af/file?variant=thumbnail');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HEADERFUNCTION => static function ($handle, string $line) use (&$responseHeaders): int {
        if (str_contains($line, ':')) {
            [$name, $value] = explode(':', $line, 2);
            $responseHeaders[strtolower(trim($name))] = trim($value);
        }
        return strlen($line);
    },
]);
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$error = curl_error($handle);
curl_close($handle);
if ($raw === false) {
    throw new RuntimeException('Transport error: ' . $error);
}
if ($status < 200 || $status >= 300) {
    throw new RuntimeException('HTTP ' . $status . '; request_id=' .
        ($responseHeaders['x-request-id'] ?? '') . '; retry_after=' . ($responseHeaders['retry-after'] ?? ''));
}
if (($responseHeaders['content-type'] ?? '') !== 'image/webp' || strlen($raw) > 5242880) {
    throw new RuntimeException('Unexpected image response');
}
$output = fopen(getenv('SHOPENTLY_OUTPUT_FILE') ?: '', 'xb');
if ($output === false) { throw new RuntimeException('Cannot create image output'); }
try {
    if (fwrite($output, $raw) !== strlen($raw)) { throw new RuntimeException('Incomplete image write'); }
} finally { fclose($output); }

Python

from contextlib import ExitStack
import json
import os
from urllib.parse import urlsplit

import requests  # python -m pip install requests

base_url = os.environ["SHOPENTLY_SHOP_URL"].rstrip("/")
origin = urlsplit(base_url)
if origin.scheme != "https" or not origin.hostname or origin.username or origin.password or origin.path or origin.query or origin.fragment:
    raise ValueError("SHOPENTLY_SHOP_URL must be an HTTPS origin")
credential = os.environ['SHOPENTLY_ACCESS_TOKEN']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {}
headers["Authorization"] = 'Bearer' + " " + credential
body = None
if body is not None:
    headers["Content-Type"] = "application/json"

with ExitStack() as stack:
    session = stack.enter_context(requests.Session())
    files = None
    if False:
        image = stack.enter_context(open(os.environ["SHOPENTLY_IMAGE_FILE"], "rb"))
        if os.fstat(image.fileno()).st_size > 5242880:
            raise ValueError("Image exceeds 5 MiB")
        files = {"file": ("article.png", image, "image/png")}
    response = session.request(
        'GET', base_url + '/api/v1/addons/shopently.blog/media/e8663afe-3c38-461c-a142-a980085630af/file?variant=thumbnail', headers=headers,
        data=body.encode("utf-8") if body is not None else None, files=files,
        timeout=(5, 30), allow_redirects=False,
    )
    if not 200 <= response.status_code < 300:
        raise RuntimeError(f"HTTP {response.status_code}; request_id={response.headers.get('X-Request-ID', '')}; retry_after={response.headers.get('Retry-After', '')}")
    if True:
        if response.headers.get("Content-Type") != "image/webp" or len(response.content) > 5242880:
            raise ValueError("Unexpected image response")
        with open(os.environ["SHOPENTLY_OUTPUT_FILE"], "xb") as output:
            output.write(response.content)
    else:
        result = response.json() if response.content else None
        print(json.dumps(result, ensure_ascii=False, indent=2))

Eżempju ta’ tweġiba 200

text
Content-Type: image/webp
Content-Disposition: inline; filename="image.webp"

Ħarsa ġenerali

Immaniġġja l-blog tal-ħanut b’artikli HTML, ritratti, awturi u metadata għall-magni tat-tiftix. Issejvja abbozzi, ħejji traduzzjonijiet u ppubblika minnufih jew f’ħin magħżul f’żona tal-ħin speċifika. Immaniġġja l-kummenti u l-moderazzjoni fil-pannell; ġeneratur estern jista’ juża l-API bil-permessi li tagħtih.

BASIC · api.enabled · addons.use(shopently.blog) · addon.shopently.blog:media_read

Parametri

Parametri tal-mogħdija

media_idStringObbligatorju

Identifikatur tal-assi tal-istampa magħżula.

format: "uuid"
Eżempju: "e8663afe-3c38-461c-a142-a980085630af"

Parametri tal-mistoqsija

variantStringMhux obbligatorju

Varjant tal-istruttura tad-data deskritt mill-valuri permessi tiegħu.

Restrizzjonijiet
enum
["original", "card", "thumbnail"]
Valur predefinit: "original"Eżempju: "thumbnail"

Din l-operazzjoni ma taċċettax kontenut JSON.

Tweġibiet

Risposta 200

Eżempju ta’ tweġiba

Status HTTP

200
Risposta b’suċċess Skema
400
Talba mhux valida
401
Awtentikazzjoni meħtieġa
403
Permess miċħud
404
Riżorsa ma nstabitx
409
Kunflitt tal-verżjoni
422
Validazzjoni falliet
429
Inqabeż il-limitu tat-talbiet
Stati HTTP oħra (7)
405
Metodu mhux permess
413
Talba kbira wisq
415
Format mhux appoġġjat
500
Żball tas-server
502
Żball tal-gateway tal-API
503
Servizz mhux disponibbli
504
Skada l-ħin ta’ stennija

Katalgu tal-iżbalji: ErrorResponse

Headers

401

WWW-AuthenticateStringMhux obbligatorju

Skema ta’ awtentikazzjoni meħtieġa mis-server.

405

AllowStringMhux obbligatorju

Metodi HTTP appoġġati minn din ir-riżorsa.

429, 503

Retry-AfterNumru sħiħMhux obbligatorju

Dewmien minimu qabel tentattiv ieħor, f’sekondi.

minimum: 0