Saltar al contenido
ShopentlyLearn

Artículo

Leer artículos y previsualizar borradores

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

Autenticación
Bearer
Disponible desde
BASIC
Módulo instalado requerido
shopently.blog · Versión del contrato del módulo 1
Permisos necesarios
addon.shopently.blog:post_read

Ejemplos de código

Ejemplo de solicitud

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))

Ejemplo de respuesta 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"
  }
}

Vista general

Gestiona el blog de tu tienda con artículos HTML, fotos, autores y metadatos para buscadores. Guarda borradores, prepara traducciones y publica al instante o a una hora elegida en una zona horaria concreta. Gestiona los comentarios y su moderación en el panel; un generador externo puede usar la API con los permisos que concedas.

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

Parámetros

Parámetros de ruta

post_idCadena de textoObligatorio

Artículo

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

Parámetros de consulta

localeCadena de textoObligatorio

Idioma seleccionado para esta solicitud.

minLength: 2maxLength: 35
Restricciones
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
Ejemplo: "pl"

Esta operación no acepta un cuerpo JSON.

Respuestas

Respuesta 200

dataObjetoCampos adicionales: NoObligatorio

Contenido de una respuesta correcta.

Campos · data
author_idCadena de texto nullObligatorio

Autor

Cadena de texto:format: "uuid"
comments_modeCadena de textoObligatorio

Comentarios

Restricciones
enum
["inherit", "open", "closed"]
content_htmlCadena de textoObligatorio

Contenido

maxLength: 50000
cover_altCadena de textoObligatorio

Texto alternativo

maxLength: 250
cover_captionCadena de textoObligatorio

Pie de foto

maxLength: 500
cover_media_idCadena de texto nullObligatorio

Foto de portada

Cadena de texto:format: "uuid"
draft_revision_idCadena de textoObligatorio

Revisión del borrador

format: "uuid"
excerptCadena de textoObligatorio

Introducción

maxLength: 1000
first_published_atCadena de texto nullObligatorio

Primera publicación

Cadena de texto:format: "date-time"
idCadena de textoObligatorio

Identificador del recurso; consérvalo tal como se devuelve.

format: "uuid"
last_published_atCadena de texto nullObligatorio

Última publicación

Cadena de texto:format: "date-time"
localeCadena de textoObligatorio

Idioma seleccionado para esta solicitud.

minLength: 2maxLength: 35
Restricciones
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
meta_descriptionCadena de textoObligatorio

Descripción para buscadores en el idioma seleccionado.

maxLength: 160
meta_keywordsLista <Cadena de texto> Obligatorio

Palabras clave para buscadores en el idioma seleccionado.

maxItems: 20
Lista:minLength: 1maxLength: 50
meta_titleCadena de textoObligatorio

Título para buscadores en el idioma seleccionado.

maxLength: 70
public_numberNúmero enteroObligatorio

Número

minimum: 1
publish_atCadena de texto nullObligatorio

Fecha de publicación

Cadena de texto:format: "date-time"
publish_timezoneCadena de texto nullObligatorio

Zona horaria

Cadena de texto:maxLength: 64
published_revision_idCadena de texto nullObligatorio

Revisión (Publicado)

Cadena de texto:format: "uuid"
schedule_stateCadena de texto nullObligatorio

Publicación programada

Restricciones · Cadena de texto 1
enum
["armed", "requires_confirmation"]
scheduled_revision_idCadena de texto nullObligatorio

Revisión (Programado)

Cadena de texto:format: "uuid"
slugCadena de textoObligatorio

Segmento de la ruta URL en el idioma seleccionado.

maxLength: 160
statusCadena de textoObligatorio

Estado admitido por esta operación concreta.

Restricciones
enum
["draft", "scheduled", "published", "archived"]
titleCadena de textoObligatorio

Título en el idioma seleccionado.

maxLength: 200
updated_atCadena de textoObligatorio

Momento de la última actualización.

format: "date-time"
versionNúmero enteroObligatorio

Versión del recurso utilizada para controlar cambios simultáneos.

minimum: 1maximum: 9223372036854775807
metaObjetoCampos adicionales: NoObligatorio

Metadatos de la respuesta.

Campos · meta
request_idCadena de textoObligatorio

Identificador de la solicitud; en los metadatos de respuesta identifica la solicitud HTTP.

minLength: 1maxLength: 100
Ejemplo de respuesta

Estado HTTP

200
Respuesta correcta Esquema
400
Solicitud no válida
401
Autenticación necesaria
403
Permiso denegado
404
Recurso no encontrado
409
Conflicto de versión
422
Error de validación
429
Límite de solicitudes excedido
Otros estados HTTP (7)
405
Método no permitido
413
Solicitud demasiado grande
415
Formato no compatible
500
Error del servidor
502
Error de la pasarela API
503
Servicio no disponible
504
Tiempo de espera agotado

Catálogo de errores: ErrorResponse

Cabeceras

401

WWW-AuthenticateCadena de textoOpcional

Esquema de autenticación exigido por el servidor.

405

AllowCadena de textoOpcional

Métodos HTTP admitidos por este recurso.

429, 503

Retry-AfterNúmero enteroOpcional

Espera mínima antes de reintentar, en segundos.

minimum: 0