文件预览

get_feed_document.py

查看 Amazon Store Feeds 技能包中的文件内容。

文件内容

scripts/get_feed_document.py

#!/usr/bin/env python3
"""
Amazon Store — getFeedDocument (SP-API Feeds v2021-06-30)
=========================================================

GET `feeds/2021-06-30/documents/{feedDocumentId}`

官方参考: https://developer-docs.amazon.com/sp-api/reference/getfeeddocument
"""

from __future__ import annotations

import json
import sys
from urllib.parse import quote

from _spapi_feeds_common import (
    FEEDS_PATH_PREFIX,
    developer_proxy_call,
    encode_path_segment,
    ensure_auth_skill_available,
    get_store_tokens,
    load_cli_params,
    merge_success_json,
    require_seller_region,
)


def main() -> None:
    params = load_cli_params()
    if not params:
        print(
            "Usage: get_feed_document.py '<JSON>'\n"
            "Required: sellerId, region, feedDocumentId\n"
            "Optional: enableContentEncodingUrlHeader (boolean)",
            file=sys.stderr,
        )
        sys.exit(1)

    if not params.get("skipDepCheck"):
        ensure_auth_skill_available("get_feed_document.py")

    if "feedDocumentId" not in params:
        print("Missing required field: feedDocumentId", file=sys.stderr)
        sys.exit(1)

    seller_id, region = require_seller_region(params)
    doc_id = encode_path_segment(params["feedDocumentId"])
    path = f"{FEEDS_PATH_PREFIX}/documents/{doc_id}"

    qs = None
    if "enableContentEncodingUrlHeader" in params:
        flag = "true" if params["enableContentEncodingUrlHeader"] else "false"
        qs = f"enableContentEncodingUrlHeader={quote(flag, safe='')}"

    tokens = get_store_tokens(seller_id, region)
    if "error" in tokens or "accessToken" not in tokens:
        print(json.dumps(tokens, indent=2, ensure_ascii=False))
        sys.exit(1)

    proxy = developer_proxy_call(
        region, path, "GET", tokens["accessToken"], query_string=qs
    )
    out: dict = {"developerProxy": proxy, "resolvedPath": path, "queryString": qs}
    merge_success_json(out, proxy, "feedDocument")
    print(json.dumps(out, indent=2, ensure_ascii=False))


if __name__ == "__main__":
    main()