概要
DrupalのREST APIを使って、複数のコンテンツを一括削除する機会がありましたので、備忘録です。
参考
REST APIを使用せずにコンテンツを一括削除する方法として、以下も参考にしてください。
準備
まず、HTTP Basic AuthenticationモジュールとJSON:APIモジュールを有効化します。
さらに、REST resourcesにおいて、DELETEを有効化します。
/admin/config/services/rest


実行例
以下の自作ライブラリを使用します。
https://github.com/nakamura196/drupal_tools
以下でも処理内容をご確認いただけます。
https://nakamura196.github.io/drupal_tools/
インストール
pip install git+https://github.com/nakamura196/drupal_tools
.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)
まとめ
不具合等が含まれる可能性がありますので、使用される際は十分にご注意ください。
参考になりましたら幸いです。