İçeriğe atla
ShopentlyLearn

Makale

Makaleleri okuma ve taslakları önizleme

GET/api/v1/addons/shopently.blog/posts/{post_id}

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:post_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/posts/2103ba96-2713-420b-b197-8a008730c851?locale=pl'

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/posts/2103ba96-2713-420b-b197-8a008730c851?locale=pl');
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/posts/2103ba96-2713-420b-b197-8a008730c851?locale=pl', 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": {
    "author_id": "341494e0-caab-4f47-a8ff-f6795c42a775",
    "comments_mode": "open",
    "content_html": "<h2>Porównaj właściwości</h2><p>Sprawdź opis produktu i wybierz wariant odpowiedni do swoich potrzeb.</p>",
    "cover_alt": "Niebieska ilustracja poradnika",
    "cover_caption": "Ilustracja redakcyjna",
    "cover_media_id": "e8663afe-3c38-461c-a142-a980085630af",
    "draft_revision_id": "8c4af6da-63f4-42aa-8b37-57c703fa0af7",
    "excerpt": "Praktyczny poradnik zakupowy.",
    "first_published_at": null,
    "id": "2103ba96-2713-420b-b197-8a008730c851",
    "last_published_at": null,
    "locale": "pl",
    "meta_description": "Praktyczne wskazówki dotyczące wyboru produktu.",
    "meta_keywords": [
      "poradnik",
      "wybór"
    ],
    "meta_title": "Jak wybrać produkt",
    "public_number": 1,
    "publish_at": null,
    "publish_timezone": null,
    "published_revision_id": null,
    "schedule_state": null,
    "scheduled_revision_id": null,
    "slug": "jak-wybrac-produkt",
    "status": "draft",
    "title": "Jak wybrać produkt",
    "updated_at": "2026-10-07T23:17:44.320869Z",
    "version": 1
  },
  "meta": {
    "request_id": "c85f6074-44e5-4d74-a117-fb631879fb7d"
  }
}

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:post_read

Parametreler

Yol parametreleri

post_idDizeZorunlu

Makale

format: "uuid"
Örnek: "2103ba96-2713-420b-b197-8a008730c851"

Sorgu parametreleri

localeDizeZorunlu

Bu istek için seçilen dil.

minLength: 2maxLength: 35
Kısıtlamalar
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
Örnek: "pl"

Bu işlem JSON gövdesi kabul etmez.

Yanıtlar

Yanıt 200

dataNesneEk alanlar: HayırZorunlu

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

Alanlar · data
author_idDize nullZorunlu

Yazar

Dize:format: "uuid"
comments_modeDizeZorunlu

Yorumlar

Kısıtlamalar
enum
["inherit", "open", "closed"]
content_htmlDizeZorunlu

İçerik

maxLength: 50000
cover_altDizeZorunlu

Alternatif metin

maxLength: 250
cover_captionDizeZorunlu

Fotoğraf açıklaması

maxLength: 500
cover_media_idDize nullZorunlu

Kapak fotoğrafı

Dize:format: "uuid"
draft_revision_idDizeZorunlu

Taslak sürümü

format: "uuid"
excerptDizeZorunlu

Giriş

maxLength: 1000
first_published_atDize nullZorunlu

İlk yayın

Dize:format: "date-time"
idDizeZorunlu

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

format: "uuid"
last_published_atDize nullZorunlu

Son yayın

Dize:format: "date-time"
localeDizeZorunlu

Bu istek için seçilen dil.

minLength: 2maxLength: 35
Kısıtlamalar
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
meta_descriptionDizeZorunlu

Seçilen dilde arama motoru açıklaması.

maxLength: 160
meta_keywordsDizi <Dize> Zorunlu

Seçilen dilde arama motoru anahtar kelimeleri.

maxItems: 20
Dizi:minLength: 1maxLength: 50
meta_titleDizeZorunlu

Seçilen dilde arama motoru başlığı.

maxLength: 70
public_numberTam sayıZorunlu

Numara

minimum: 1
publish_atDize nullZorunlu

Yayın tarihi

Dize:format: "date-time"
publish_timezoneDize nullZorunlu

Saat dilimi

Dize:maxLength: 64
published_revision_idDize nullZorunlu

Sürüm (Yayımlandı)

Dize:format: "uuid"
schedule_stateDize nullZorunlu

Zamanlanmış yayın

Kısıtlamalar · Dize 1
enum
["armed", "requires_confirmation"]
scheduled_revision_idDize nullZorunlu

Sürüm (Zamanlandı)

Dize:format: "uuid"
slugDizeZorunlu

Seçilen dilde URL yolu parçası.

maxLength: 160
statusDizeZorunlu

Bu işlemin kabul ettiği durum.

Kısıtlamalar
enum
["draft", "scheduled", "published", "archived"]
titleDizeZorunlu

Seçilen dilde başlık.

maxLength: 200
updated_atDizeZorunlu

Son güncelleme zamanı.

format: "date-time"
versionTam sayıZorunlu

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

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

Yanıt üst verileri.

Alanlar · meta
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