Preskoči na sadržaj
ShopentlyLearn

Popis · Komentari

Čitanje komentara i statusa moderiranja

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

Autentifikacija
Bearer
Dostupno od
BASIC
Potreban instalirani modul
shopently.blog · Verzija ugovora modula 1
Potrebne ovlasti
addon.shopently.blog:comment_read

Primjeri koda

Primjer zahtjeva

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/comments?limit=10&post_id=2103ba96-2713-420b-b197-8a008730c851'

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/comments?limit=10&post_id=2103ba96-2713-420b-b197-8a008730c851');
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/comments?limit=10&post_id=2103ba96-2713-420b-b197-8a008730c851', 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))

Primjer odgovora 200

JSON
{
  "data": [
    {
      "actor_kind": "api",
      "body_preview": "Zapraszamy do zadawania pytań.",
      "created_at": "2026-10-07T23:17:44.892022Z",
      "display_name": "Redakcja",
      "edited_at": null,
      "id": "2247b58d-1521-4fc0-9eec-6c47c259c181",
      "locale": "pl",
      "post_id": "2103ba96-2713-420b-b197-8a008730c851",
      "status": "approved",
      "version": 1
    }
  ],
  "meta": {
    "pagination": {
      "has_more": false,
      "limit": 10,
      "next_cursor": null
    },
    "request_id": "a27f02dc-4061-4716-9766-a1eec23ac186"
  }
}

Pregled

Vodite blog trgovine s HTML člancima, fotografijama, autorima i metapodacima za tražilice. Spremajte nacrte, pripremajte prijevode i objavljujte odmah ili u odabrano vrijeme i vremensku zonu. Upravljajte komentarima i moderiranjem u panelu; vanjski generator može koristiti API s dodijeljenim ovlastima.

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

Parametri

Parametri upita

limitCijeli brojNeobavezno

Najveći broj zapisa na ovoj stranici.

minimum: 1maximum: 100
Zadano: 50Primjer: 10
cursorNiz znakova nullNeobavezno

Neprozirna vrijednost za nastavak koju je vratila prethodna stranica.

Niz znakova:maxLength: 512
post_idNiz znakova nullNeobavezno

Članak

Niz znakova:format: "uuid"
Primjer: "2103ba96-2713-420b-b197-8a008730c851"
statusNiz znakova nullNeobavezno

Status prihvaćen za ovu određenu operaciju.

Ograničenja · Niz znakova 1
enum
["pending", "approved", "rejected", "spam"]

Ova operacija ne prihvaća JSON tijelo.

Odgovori

Odgovor 200

dataPolje vrijednosti <ObjektDodatna polja: Ne> Obvezno

Podaci uspješnog odgovora.

maxItems: 100
Polja · data

ObjektDodatna polja: Ne

actor_kindNiz znakovaObvezno

Vrsta izvršitelja

Ograničenja
enum
["administrator", "customer", "api"]
body_previewNiz znakovaObvezno

Komentar

minLength: 1maxLength: 250
created_atNiz znakovaObvezno

Vrijeme izrade.

format: "date-time"
display_nameNiz znakovaObvezno

Ime

minLength: 1maxLength: 160
edited_atNiz znakova nullObvezno

Uređeno

Niz znakova:format: "date-time"
idNiz znakovaObvezno

Identifikator resursa; sačuvajte ga u vraćenom obliku.

format: "uuid"
localeNiz znakovaObvezno

Jezik odabran za ovaj zahtjev.

minLength: 2maxLength: 35
Ograničenja
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
post_idNiz znakovaObvezno

Članak

format: "uuid"
statusNiz znakovaObvezno

Status prihvaćen za ovu određenu operaciju.

Ograničenja
enum
["pending", "approved", "rejected", "spam"]
versionCijeli brojObvezno

Verzija resursa za kontrolu istodobnih upisa.

minimum: 1maximum: 9223372036854775807
metaObjektDodatna polja: NeObvezno

Metapodaci odgovora.

Polja · meta
paginationObjektDodatna polja: NeObvezno

Metapodaci straničenja pomoću kursora.

Polja · pagination
has_moreLogička vrijednostObvezno

Postoji li sljedeća stranica.

limitCijeli brojObvezno

Najveći broj zapisa na ovoj stranici.

minimum: 1maximum: 100
next_cursorNiz znakova nullObvezno

Vrijednost za nastavak na sljedeću stranicu ili null.

Niz znakova:maxLength: 512
request_idNiz znakovaObvezno

Identifikator zahtjeva; u metapodacima odgovora označava HTTP zahtjev.

minLength: 1maxLength: 100
Primjer odgovora

HTTP status

200
Uspješan odgovor Shema
400
Nevaljan zahtjev
401
Potrebna je autentikacija
403
Pristup odbijen
404
Resurs nije pronađen
409
Sukob verzija
422
Provjera nije uspjela
429
Prekoračeno ograničenje zahtjeva
Ostali HTTP statusi (7)
405
Metoda nije dopuštena
413
Zahtjev je prevelik
415
Nepodržan format
500
Pogreška poslužitelja
502
Pogreška API pristupnika
503
Usluga nije dostupna
504
Istek vremena

Katalog pogrešaka: ErrorResponse

Zaglavlja

401

WWW-AuthenticateNiz znakovaNeobavezno

Shema autentifikacije koju zahtijeva poslužitelj.

405

AllowNiz znakovaNeobavezno

HTTP metode koje ovaj resurs podržava.

429, 503

Retry-AfterCijeli brojNeobavezno

Najkraće čekanje prije ponavljanja, u sekundama.

minimum: 0