PythonでBASEのAPIを叩いて商品を一括削除してみる


今回はPythonでBASEのAPI処理の内、「削除」に関する処理を実装してみます。

APIの解説ページはこちらです。

POST /1/items/delete

さて、今回の処理ですが、想定している処理の流れは以下の様なものです。

1.ファイル選択のダイアログを開き、処理対象のCSVを選択する。

2.~処理~

3.処理結果が記述されたCSVを出力。

ここの「1」で選択するCSVについては、以前の記事で出力したCSVを使用します。

※CSVのサンプル

そして早速ですが今回作成したコードは以下の通りです。

import os
import requests
import json
import csv
import tkinter, tkinter.filedialog, tkinter.messagebox
from enum import Enum, IntEnum, auto

'''
-----------------------------------------------------------------
 ダイアログで指定したCSVファイルのデータを用い、
 ショップ上の商品データを削除する(CSV内のデータ全件対象)
-----------------------------------------------------------------
'''
def delete_item():
    MSGBOX_TITLE = "商品データ削除処理"

    filepath = get_filepath_dialog(MSGBOX_TITLE)
    if filepath == "":
        return

    access_token = get_accesstoken()
    header = {
        "Authorization": "Bearer " + access_token,
        }
    param = {}

    with open(filepath, "r", newline="") as f:
        item_list = list(csv.reader(f))
        
    # データ件数分リクエストを飛ばし、結果をファイルに出力する
    result_filepath = os.path.join(os.path.dirname(os.path.abspath(__file__)), "del_result.csv")
    with open(result_filepath, "w", newline="") as f:
        writer = csv.writer(f)

        # ヘッダ出力
        writer.writerow({"item_id", "title", "result"})
        for item in item_list:
            param["item_id"] = item[Items.ID.value]

            response = requests.post(APIURL_DEL_ITEM, params=param, headers=header)
            result = json.loads(response.text)

            # 結果出力
            if not "result" in result:
                writer.writerow({item[Items.ID.value], 
                    item[Items.TITLE.value], "失敗:" + result["error_description"]})
    
    show_Msgbox(MSGBOX_TITLE, "処理が完了しました。\n結果はdel_result.csvに保存しています。")
[一部関数の解説]

■get_filepath_dialog

⇒ファイル選択ダイアログを表示し、選択されたファイルパスを返す独自関数です。

■get_accesstoken

⇒APIを使用するためのアクセストークン取得処理です。内容は以下の過去記事を参照。

上記コードを実行すると、選択したcsvファイルに記述された全ての商品を削除し、その削除結果をcsvファイルで出力するという動きを行います。

エラーとなった場合は該当の商品コードと商品名、エラー理由を出力する形式となっています。

スポンサーリンク

登録中の商品を削除してみる

では実際に以下のcsvを用いて処理を実行してみます。

「BASEパーカー」の140番~150番が削除対象です。

このCSVファイルを用いて上記処理を実行すると・・・

BASEパーカー140以降の商品が消えており、正常に処理されている事が分かりますね。

ちなみにリクエストは1件1件送っています。

10個の商品を削除したい場合はリクエストを10回送っているという事になります。

一応、APIの利用制限として「1時間の利用上限を5000回、1日の利用上限を100000回」というものがありますので、大量に処理を行う場合は注意が必要です。

※上記の上限を超えるとエラーレスポンスが返ってくる様になります。

以上で削除処理は終わりです。

次回は更新の仕方を解説します。

関連記事と広告

シェアする

  • このエントリーをはてなブックマークに追加

フォローする