İçeriğe atla
ShopentlyLearn

Listele · Fotoğraflar

Makale fotoğraflarını görüntüleme ve önizleme

GET/api/v1/addons/shopently.blog/media

Kimlik doğrulama
Bearer
En düşük plan
BASIC
Gerekli kurulu modül
shopently.blog · Modül sözleşme sürümü 1
Gerekli izinler
addon.shopently.blog:media_read

Kod örnekleri

İstek örneği

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:?}" \
  --url "${SHOPENTLY_SHOP_URL%/}"'/api/v1/addons/shopently.blog/media?limit=10'

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?limit=10');
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'] ?? ''));
}
$result = $raw === '' ? null : json_decode($raw, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);
echo json_encode($result, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

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?limit=10', 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 False:
        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))

Yanıt örneği 200

JSON
{
  "data": [
    {
      "bytes": 366,
      "created_at": "2026-10-07T23:17:43.893580Z",
      "expires_at": "2026-10-14T23:17:43.893580Z",
      "height": 100,
      "id": "e8663afe-3c38-461c-a142-a980085630af",
      "mime_type": "image/webp",
      "state": "ready",
      "variants": {
        "card": {
          "bytes": 122,
          "height": 100,
          "width": 200
        },
        "original": {
          "bytes": 122,
          "height": 100,
          "width": 200
        },
        "thumbnail": {
          "bytes": 122,
          "height": 100,
          "width": 200
        }
      },
      "version": 1,
      "width": 200
    }
  ],
  "meta": {
    "pagination": {
      "has_more": false,
      "limit": 10,
      "next_cursor": null
    },
    "request_id": "18046f72-d201-405f-b4ab-66644766b4df"
  }
}

Genel bakış

Mağazanızın blogunu HTML makaleler, fotoğraflar, yazarlar ve arama motoru meta verileriyle yönetin. Taslakları kaydedin, çevirileri hazırlayın ve hemen ya da belirli bir saat diliminde seçtiğiniz zamanda yayımlayın. Yorumları ve denetimi panelden yönetin; harici bir üretici, verdiğiniz izinlerle API’yi kullanabilir.

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

Parametreler

Sorgu parametreleri

limitTam sayıİsteğe bağlı

Bu sayfadaki en yüksek kayıt sayısı.

minimum: 1maximum: 100
Varsayılan: 50Örnek: 10
cursorDize nullİsteğe bağlı

Önceki sayfanın döndürdüğü, iç yapısı yorumlanmaması gereken devam değeri.

Dize:maxLength: 512

Bu işlem JSON gövdesi kabul etmez.

Yanıtlar

Yanıt 200

dataDizi <NesneEk alanlar: Hayır> Zorunlu

Başarılı yanıtın verileri.

maxItems: 100
Alanlar · data

NesneEk alanlar: Hayır

bytesTam sayıZorunlu

Bayt cinsinden boyut

minimum: 1maximum: 15728640
created_atDizeZorunlu

Oluşturulma zamanı.

format: "date-time"
expires_atDize nullZorunlu

Kimlik bilgisinin sona erme tarihi ve saati.

Dize:format: "date-time"
heightTam sayıZorunlu

Yükseklik

minimum: 1maximum: 1600
idDizeZorunlu

Kaynak tanımlayıcısı; döndürüldüğü biçimi koruyun.

format: "uuid"
mime_typeDizeZorunlu

Medya içerik türü.

const: "image/webp"
stateDizeZorunlu

Durum

Kısıtlamalar
enum
["staged", "ready"]
variantsNesneEk alanlar: HayırZorunlu

Fotoğraf · variants (WebP)

versionTam sayıZorunlu

Eşzamanlılık denetiminde kullanılan kaynak sürümü.

minimum: 1maximum: 9223372036854775807
widthTam sayıZorunlu

Genişlik

minimum: 1maximum: 1600
metaNesneEk alanlar: HayırZorunlu

Yanıt üst verileri.

Alanlar · meta
paginationNesneEk alanlar: HayırZorunlu

İmleç tabanlı sayfalamanın üst verileri.

Alanlar · pagination
has_moreMantıksal değerZorunlu

Başka bir sayfanın mevcut olup olmadığı.

limitTam sayıZorunlu

Bu sayfadaki en yüksek kayıt sayısı.

minimum: 1maximum: 100
next_cursorDize nullZorunlu

Sonraki sayfanın devam değeri veya null.

Dize:maxLength: 512
request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100
Yanıt örneği

HTTP durumu

200
Başarılı yanıt Şema
400
Geçersiz istek
401
Kimlik doğrulaması gerekli
403
İzin reddedildi
404
Kaynak bulunamadı
409
Sürüm çakışması
422
Doğrulama başarısız
429
İstek sınırı aşıldı
Diğer HTTP durumları (7)
405
Yönteme izin verilmiyor
413
İstek çok büyük
415
Desteklenmeyen biçim
500
Sunucu hatası
502
API ağ geçidi hatası
503
Hizmet kullanılamıyor
504
Zaman aşımı

Hata kataloğu: ErrorResponse

Başlıklar

401

WWW-AuthenticateDizeİsteğe bağlı

Sunucunun gerektirdiği kimlik doğrulama şeması.

405

AllowDizeİsteğe bağlı

Bu kaynağın desteklediği HTTP yöntemleri.

429, 503

Retry-AfterTam sayıİsteğe bağlı

Yeniden denemeden önce saniye cinsinden en kısa bekleme süresi.

minimum: 0