عرض القائمة · المقالات
قراءة المقالات ومعاينة المسودات
GET/api/v1/addons/shopently.blog/posts
- المصادقة
Bearer- متاح بدءًا من
- BASIC
- الوحدة المثبتة المطلوبة
shopently.blog· إصدار عقد الوحدة 1- الصلاحيات المطلوبة
addon.shopently.blog:post_read
أمثلة الكود
مثال على الطلب
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?limit=10&locale=pl&status=draft'
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?limit=10&locale=pl&status=draft');
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?limit=10&locale=pl&status=draft', 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))
مثال على الاستجابة 200
{
"data": [
{
"author_name": "Store editorial team",
"cover_alt": "Niebieska ilustracja poradnika",
"cover_media_id": "e8663afe-3c38-461c-a142-a980085630af",
"first_published_at": null,
"id": "2103ba96-2713-420b-b197-8a008730c851",
"public_number": 1,
"publish_at": null,
"status": "draft",
"title": "Jak wybrać produkt",
"updated_at": "2026-10-07T23:17:44.320869Z",
"version": 1
}
],
"meta": {
"pagination": {
"has_more": false,
"limit": 10,
"next_cursor": null
},
"request_id": "56b810d9-7dfa-4bc5-8928-0af90d80dbda"
}
}
نظرة عامة
أدر مدونة متجرك بمقالات HTML وصور وكتّاب وبيانات وصفية لمحركات البحث. احفظ المسودات وأعد الترجمات وانشر فورًا أو في موعد تحدده ضمن منطقة زمنية معينة. أدر التعليقات ومراجعتها من اللوحة، ويمكن لمولّد خارجي استخدام API بالصلاحيات التي تمنحها.
BASIC · api.enabled · addons.use(shopently.blog) · addon.shopently.blog:post_read
المعاملات
معلمات الاستعلام
localeسلسلة نصيةمطلوباللغة المحددة لهذا الطلب.
minLength:2maxLength:35القيود
pattern"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
limitعدد صحيحاختياريالعدد الأقصى للسجلات في هذه الصفحة.
minimum:1maximum:100cursorسلسلة نصية nullاختياريقيمة متابعة معتمة أعادتها الصفحة السابقة.
سلسلة نصية:maxLength:512statusسلسلة نصية nullاختياريالحالة التي تقبلها هذه العملية تحديدًا.
القيود · سلسلة نصية 1
enum["draft", "scheduled", "published", "archived"]
titleسلسلة نصية nullاختياريالعنوان باللغة المحددة.
سلسلة نصية:maxLength:200author_idسلسلة نصية nullاختياريالكاتب
سلسلة نصية:format:"uuid"publish_fromسلسلة نصية nullاختيارينُشر من
سلسلة نصية:format:"date-time"publish_toسلسلة نصية nullاختيارينُشر قبل
سلسلة نصية:format:"date-time"
لا تقبل هذه العملية محتوى JSON.
الاستجابات
الاستجابة 200
dataمصفوفة <كائنحقول إضافية: لا> مطلوبمحتوى الاستجابة الناجحة.
maxItems:100الحقول ·
dataكائنحقول إضافية: لا
author_nameسلسلة نصيةمطلوبالكاتب
maxLength:160cover_altسلسلة نصيةمطلوبالنص البديل
maxLength:250cover_media_idسلسلة نصية nullمطلوبصورة الغلاف
سلسلة نصية:format:"uuid"first_published_atسلسلة نصية nullمطلوبأول نشر
سلسلة نصية:format:"date-time"idسلسلة نصيةمطلوبمعرّف المورد؛ احتفظ به كما أعيد.
format:"uuid"public_numberعدد صحيحمطلوبالرقم
minimum:1publish_atسلسلة نصية nullمطلوبتاريخ النشر
سلسلة نصية:format:"date-time"statusسلسلة نصيةمطلوبالحالة التي تقبلها هذه العملية تحديدًا.
القيود
enum["draft", "scheduled", "published", "archived"]
titleسلسلة نصيةمطلوبالعنوان باللغة المحددة.
maxLength:200updated_atسلسلة نصيةمطلوبوقت آخر تحديث.
format:"date-time"versionعدد صحيحمطلوبإصدار المورد المستخدم للتحكم في التعديلات المتزامنة.
minimum:1maximum:9223372036854775807
metaكائنحقول إضافية: لامطلوبالبيانات الوصفية للاستجابة.
الحقول ·
metapaginationكائنحقول إضافية: لامطلوبالبيانات الوصفية للترقيم باستخدام المؤشر.
الحقول ·
paginationhas_moreقيمة منطقيةمطلوبما إذا كانت هناك صفحة أخرى متاحة.
limitعدد صحيحمطلوبالعدد الأقصى للسجلات في هذه الصفحة.
minimum:1maximum:100next_cursorسلسلة نصية nullمطلوبقيمة المتابعة للصفحة التالية، أو null.
سلسلة نصية:maxLength:512
request_idسلسلة نصيةمطلوبمعرّف الطلب؛ في البيانات الوصفية للاستجابة يحدد طلب HTTP.
minLength:1maxLength:100
حالة HTTP
200- استجابة ناجحة المخطط
400- طلب غير صالح
401- المصادقة مطلوبة
403- الإذن مرفوض
404- المورد غير موجود
409- تعارض الإصدارات
422- فشل التحقق من البيانات
429- تم تجاوز حد الطلبات
حالات HTTP الأخرى (7)
405- الطريقة غير مسموحة
413- الطلب كبير جدًا
415- تنسيق غير مدعوم
500- خطأ في الخادم
502- خطأ في بوابة API
503- الخدمة غير متاحة
504- انتهت مهلة الانتظار
دليل الأخطاء: ErrorResponse
الترويسات
401
WWW-Authenticateسلسلة نصيةاختيارينظام المصادقة الذي يطلبه الخادم.
405
Allowسلسلة نصيةاختياريطرق HTTP التي يدعمها هذا المورد.
429, 503
Retry-Afterعدد صحيحاختياريالحد الأدنى للانتظار قبل إعادة المحاولة، بالثواني.
minimum:0