DrupalのREST APIを使って、複数のコンテンツを一括削除する

2024/07/14に公開

概要

DrupalのREST APIを使って、複数のコンテンツを一括削除する機会がありましたので、備忘録です。

参考

REST APIを使用せずにコンテンツを一括削除する方法として、以下も参考にしてください。

https://zenn.dev/nakamura196/articles/fe78f513919bba

準備

まず、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の準備

/.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