Shoplazza APIを活用したPythonによる事例研究:受注管理
By manhnv, at: 2024年5月15日10:53
Estimated Reading Time: __READING_TIME__ minutes


はじめに
「API(s)を活用したPython」シリーズの最新記事へようこそ。この記事では、Pythonを使用してShoplazza APIと連携し、受注管理を行う方法を探ります。このガイドでは、PythonによるShoplazzaへのAPIコールの基本を解説し、実際のケーススタディを通して、このアプローチが受注管理プロセスをどのように効率化できるかを示します。
Shoplazzaをオンラインストアに使用している事業主を想像してみてください。多くの受注について定期的に特定の詳細情報を更新する必要があります。ShoplazzaのUIを通じて手動でこれらの更新を行うのは、時間と手間がかかります。PythonとShoplazza APIを使用すると、このタスクを自動化し、時間とエラーを削減できます。
このガイドでは、環境設定、Shoplazza APIへの認証、受注の取得、および更新の方法を学習します。エラー処理とコード構造に関するベストプラクティスについても説明します。
このガイドの最後には、Pythonを使用してShoplazza APIと連携する方法を十分に理解し、その知識を自身のビジネスニーズに応用できるようになります。さあ、受注管理の自動化を始めましょう!
Shoplazza APIの概要
Shoplazza APIは、認証と認可にOAuth 2.0を使用するRESTfulウェブサービスです。サードパーティアプリケーションがShoplazzaプラットフォームと連携することを可能にし、データのクエリ、トランザクションの投稿など、さまざまなタスクを実行できます。
Shoplazzaは、OAuth 2.0を必要としないプライベートアプリアクセストークンによる統合方法も提供しています(今回はこちらの方法を使用します)。
主要なエンドポイント:
- 受注:
- エンドポイント:
/openapi/2020-07/orders
- メソッド:
GET
、POST
、PUT
- 説明: Shoplazza内の受注の取得、作成、更新を可能にします。売上管理と正確な受注記録の確保に不可欠です。
- 参考: https://www.shoplazza.dev/v2020.07/reference/order
- エンドポイント:
- 商品:
- エンドポイント:
/openapi/2020-07/products
- メソッド:
GET
、POST
、PUT
- 説明: 商品情報へのアクセスを可能にし、商品カタログを効率的に管理できます。
- 参考: https://www.shoplazza.dev/v2020.07/reference/product
- エンドポイント:
- 顧客:
- エンドポイント:
/openapi/2020-07/customers
- メソッド:
GET
、POST
、PUT
- 説明: 顧客情報の管理を容易にし、最新かつ正確な顧客記録を維持するために重要です。
- 参考: https://www.shoplazza.dev/v2020.07/reference/customer
- エンドポイント:
詳細なドキュメントについては、Shoplazza APIドキュメントを参照してください。
注意: このブログ投稿では、受注エンドポイントを使用して例を示します。このエンドポイントは、売上を効率的に管理するために重要であり、Shoplazza APIの機能を示す包括的な方法を提供します。
開発環境の設定
まず、Shoplazza APIとの統合/呼び出しを行うには、Shoplazzaでストアを作成する必要があります。方法がわからない場合は、Shoplazzaでオンラインストアを始める方法のガイドに従ってください。
次に、作成したストアにプライベートアプリを作成する必要があります。これにより、APIコールを介してアプリにアクセスするためのアクセストークンが取得できます。次のガイドに従ってください。Shoplazzaのプライベートアプリを作成する方法
最後に、必要なパッケージを使用して開発環境を設定します。
-
Pythonのインストール: Pythonがインストールされていることを確認します。Pythonの公式ウェブサイトからダウンロードできます。
-
仮想環境の作成:
python -m venv venv # 仮想環境の作成
source venv/bin/activate # 仮想環境の有効化 -
必要な依存関係のインストール:
pip install requests # PythonでのHTTP(s)リクエストを行うためのライブラリ
pip install ipython # Python開発のための便利な対話型シェル
すべてのインストールが完了したら、次のコマンドでシェルにアクセスできます。
ipython
Shoplazza APIへの認証
APIコールを行うには、前の手順で取得したアクセストークンを使用してShoplazzaに対して認証を行う必要があります。そのためには、リクエストヘッダーにキーAccess-Token
を含めてAPIを呼び出すだけです。
また、呼び出し用のURLエンドポイントはhttps://{your_store_domain}.myshoplaza.com
です。ここでyour_store_domain
はあなたのストアドメインです(詳細については、ShoplazzaのAPI URLを参照してください)。
アクセストークンをリクエストヘッダーに渡す方法のサンプルコードを以下に示します:
注意: 以下のコードはAPIを呼び出しません。Shoplazza APIを呼び出すために必要なヘッダーの形式を示すためのものです。コピーまたは実行する必要はありません。
# Shoplazzaアクセストークン
access_token = "
# Shoplazzaの呼び出し先のエンドポイント
store_domain = "
url = f"https://{store_domain}.myshoplaza.com"
# ヘッダー
headers = {
'Access-Token': access_token, # リクエストを行う際にヘッダーにAccess-Tokenキーを追加します
'Content-Type': 'application/json' # コンテンツはJSON形式である必要があります
}
# APIコールの実行
response = requests.get(url, headers=headers)
受注の取得
Shoplazzaアカウントから受注を取得するには、受注APIを使用します。
import requests
# Shoplazzaアクセストークン
access_token = ""
# Shoplazzaの呼び出し先のエンドポイント
store_domain = ""
url = f"https://{store_domain}.myshoplaza.com"
# 受注URL
postfix = "/openapi/2020-07/orders"
orders_url = f"{url}{postfix}"
# ヘッダー
headers = {
'Access-Token': access_token,
'Content-Type': 'application/json'
}
# リクエストの実行
response = requests.get(orders_url, headers=headers)
# レスポンスのステータスコードをチェックします
if response.status_code == 200:
orders = response.json()
print(orders)
else:
print(f"エラー: {response.status_code}")
print(response.text)
上記のコードを実行すると、ストア内のすべての受注を含む次の結果が表示されます。
{
"orders": [
{
"id": "1317632-00000007",
"note": "Total tax amount is: 47.011624",
"number": "00000007",
"financial_status": "paid",
"status": "placed",
"cancel_reason": "",
"payment_method": "markpay",
"fulfillment_status": "waiting",
"discount_code": "",
"customer_note": "",
"tags": "",
"created_at": "2024-04-01T04:42:07Z",
"updated_at": "2024-04-01T04:48:38Z",
"canceled_at": None,
"customer_deleted_at": None,
"deleted_at": None,
"placed_at": "2024-04-01T04:42:07Z",
"browser_ip": "210.245.54.99",
"payment_line": {
"payment_channel": "markpay",
"payment_method": "markpay",
"transaction_no": "",
"merchant_id": "",
"merchant_email": "",
},
"refund_status": "",
"line_items": [
{
"id": "331a7e13-8697-4a62-8acb-fa747a0ae33b",
"product_id": "fd3cba17-73b4-407c-962b-27012217ef57",
"variant_id": "b7156f30-cc6d-48c2-a01b-03661f48b5bf",
"variant_title": "",
"product_title": "Frankenstein",
"product_handle": "frankenstein",
"quantity": 1,
"note": "",
"fulfillment_status": "waiting",
"sku": "FRANK",
"weight_unit": "kg",
"vendor": "",
"product_url": "/products/frankenstein",
"refund_quantity": 0,
"refund_total": "0.00",
"image": "//img.fantaskycdn.com/746e4ea66311e9fc51ea6181d8cf7283.jpeg",
"price": "873.90",
"compare_at_price": "0.00",
"weight": 0,
"total": "873.90",
},
{
"id": "fc38e511-711a-472b-951a-376594a51c6b",
"product_id": "7047cbb4-6146-419f-bc07-64da7d37e40e",
"variant_id": "100e3057-e29d-4cb1-a05f-eafd22b54ddb",
"variant_title": "",
"product_title": "The Great Gatsby",
"product_handle": "the-great-gatsby",
"quantity": 1,
"note": "",
"fulfillment_status": "waiting",
"sku": "TGG",
"weight_unit": "kg",
"vendor": "",
"product_url": "/products/the-great-gatsby",
"refund_quantity": 0,
"refund_total": "0.00",
"image": "//img.fantaskycdn.com/7b77bd990f7a94f30c13a176dde374eb.jpeg",
"price": "123.80",
"compare_at_price": "0.00",
"weight": 0,
"total": "123.80",
},
],
"fulfillments": [],
"landing_site": "",
"buyer_accepts_marketing": False,
"currency": "USD",
"total_price": "997.70",
"total_discount": "0.00",
"total_tax": "0.00",
"total_shipping": "0.00",
"sub_total": "997.70",
"code_discount_total": "0.00",
"line_item_discount_total": "0.00",
"total_refund_price": "0.00",
"total_refund_tax": "0.00",
"total_refund_discount": "0.00",
"shipping_line": {"name": "Sample rate"},
"customer": {
"email": "[email protected]",
"created_at": "2024-04-01T04:19:53Z",
"updated_at": "2024-04-01T04:42:07Z",
"first_name": "Jacques",
"last_name": "Lacroix",