⛳
DrupalのREST APIを使って、複数のコンテンツを一括削除する
概要
DrupalのREST APIを使って、複数のコンテンツを一括削除する機会がありましたので、備忘録です。
参考
REST APIを使用せずにコンテンツを一括削除する方法として、以下も参考にしてください。
準備
まず、HTTP Basic Authentication
モジュールとJSON:API
モジュールを有効化します。
さらに、REST resourcesにおいて、DELETE
を有効化します。
/admin/config/services/rest
実行例
以下の自作ライブラリを使用します。
以下でも処理内容をご確認いただけます。
インストール
pip install git+https://github.com/nakamura196/drupal_tools
.envの準備
/.env
DRUPAL_URL=http://example.org/drupal
DRUPAL_USERNAME=username
DRUPAL_PASSWORD=password
実行
以下のように実行します。
item_ids
は、field_name
(ここでは、field_item_id
)に対応する一意の値のリストです。
from drupal_tools.api import DrupalAPIClient
import pandas as pd
def get_item_ids():
# Load a CSV file containing item ids into a DataFrame.
df = pd.read_csv("./uuids.csv")
item_ids = [row["asset_uuid"] for _, row in df.iterrows()]
return item_ids
# Call the function to get the list of item ids.
item_ids = get_item_ids()
# Load Drupal credentials from a .env file using the DrupalAPIClient.
DRUPAL_URL, DRUPAL_USERNAME, DRUPAL_PASSWORD = DrupalAPIClient.load_credentials("../.env")
# Create an instance of the DrupalAPIClient with the loaded credentials.
drupal = DrupalAPIClient(DRUPAL_URL, DRUPAL_USERNAME, DRUPAL_PASSWORD)
field_name = "field_item_id"
nids = drupal.get_nids(item_ids, field_name)
results = drupal.delete_from_nids(nids)
まとめ
不具合等が含まれる可能性がありますので、使用される際は十分にご注意ください。
参考になりましたら幸いです。
Discussion