コンテンツにスキップ
ShopentlyLearn

記事

記事の閲覧と下書きのプレビュー

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

認証
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/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))

レスポンス例 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"
  }
}

概要

HTML記事、写真、著者情報、検索用メタデータを使って店舗のブログを運営できます。下書きや翻訳を準備し、すぐに公開するか、指定したタイムゾーンの日時に公開を予約できます。管理画面でコメントと審査を管理でき、外部の生成ツールは付与された権限でAPIを利用できます。

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

パラメーター

パスパラメーター

post_id文字列必須

記事

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

クエリパラメーター

locale文字列必須

このリクエストで選択した言語。

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

この操作は JSON 本文を受け付けません。

レスポンス

レスポンス 200

dataオブジェクト追加フィールド: いいえ必須

成功レスポンスのデータ。

フィールド · data
author_id文字列 null必須

変更者

文字列:format: "uuid"
comments_mode文字列必須

コメント

制約
enum
["inherit", "open", "closed"]
content_html文字列必須

内容

maxLength: 50000
cover_alt文字列必須

代替テキスト

maxLength: 250
cover_caption文字列必須

写真の説明

maxLength: 500
cover_media_id文字列 null必須

カバー写真

文字列:format: "uuid"
draft_revision_id文字列必須

下書きの版

format: "uuid"
excerpt文字列必須

紹介文

maxLength: 1000
first_published_at文字列 null必須

初回公開

文字列:format: "date-time"
id文字列必須

リソース識別子。返された値をそのまま保持してください。

format: "uuid"
last_published_at文字列 null必須

最終公開

文字列:format: "date-time"
locale文字列必須

このリクエストで選択した言語。

minLength: 2maxLength: 35
制約
pattern
"^[a-zA-Z]{2,3}(?:-[a-zA-Z0-9]{2,8})*$"
meta_description文字列必須

選択した言語での検索エンジン向け説明。

maxLength: 160
meta_keywords配列 <文字列> 必須

選択した言語での検索エンジン向けキーワード。

maxItems: 20
配列:minLength: 1maxLength: 50
meta_title文字列必須

選択した言語での検索エンジン向けタイトル。

maxLength: 70
public_number整数必須

番号

minimum: 1
publish_at文字列 null必須

公開日時

文字列:format: "date-time"
publish_timezone文字列 null必須

タイムゾーン

文字列:maxLength: 64
published_revision_id文字列 null必須

版 (公開済み)

文字列:format: "uuid"
schedule_state文字列 null必須

予約公開

制約 · 文字列 1
enum
["armed", "requires_confirmation"]
scheduled_revision_id文字列 null必須

版 (予約済み)

文字列:format: "uuid"
slug文字列必須

選択した言語での URL パス部分。

maxLength: 160
status文字列必須

この操作で受け付けるステータス。

制約
enum
["draft", "scheduled", "published", "archived"]
title文字列必須

選択した言語でのタイトル。

maxLength: 200
updated_at文字列必須

最終更新時刻。

format: "date-time"
version整数必須

同時更新制御に使うリソースバージョン。

minimum: 1maximum: 9223372036854775807
metaオブジェクト追加フィールド: いいえ必須

レスポンスのメタデータ。

フィールド · meta
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