今回はPythonでBASEのAPI処理の内、「削除」に関する処理を実装してみます。
APIの解説ページはこちらです。
さて、今回の処理ですが、想定している処理の流れは以下の様なものです。
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を用いて処理を実行してみます。
このCSVファイルを用いて上記処理を実行すると・・・
BASEパーカー140以降の商品が消えており、正常に処理されている事が分かりますね。
ちなみにリクエストは1件1件送っています。
10個の商品を削除したい場合はリクエストを10回送っているという事になります。
一応、APIの利用制限として「1時間の利用上限を5000回、1日の利用上限を100000回」というものがありますので、大量に処理を行う場合は注意が必要です。
※上記の上限を超えるとエラーレスポンスが返ってくる様になります。
以上で削除処理は終わりです。
次回は更新の仕方を解説します。